ref: 12f28dadccf8aaa99aae6f57d97191afa786f247
parent: 2c1dbb2b5046daab3ee22d83e2cd8501292cb504
author: Olav Sørensen <olav.sorensen@live.no>
date: Mon Mar 1 15:02:13 EST 2021
Big code change, read description 1) Don't calculate big LUTs for mixer deltas on init (was just a waste of RAM) 2) The mixer now uses a 64-bit division to calculate max number of safe samples to mix (branchless), instead of using a big hackish LUT for DIV->MUL 3) Module and sample loaders have been refactored so that it's much simpler to write new loaders (or modify the old ones) 4) Added support for importing DIGI Booster (non-Pro) modules 5) Added support for importing 8-channel StarTrekker modules 6) Updated help text 7) Some more minor code change 8) Updated the Visual Studio project and make scripts to include the new loaders * Sorry for not making individual commits for all the changes, but at this point it was simply too difficult for me to do so!
--- a/make-linux-nomidi.sh
+++ b/make-linux-nomidi.sh
@@ -3,7 +3,7 @@
rm release/other/ft2-clone &> /dev/null
echo Compiling \(with no MIDI functionality\), please wait patiently...
-gcc -DNDEBUG src/gfxdata/*.c src/mixer/*.c src/*.c -lSDL2 -lm -Wshadow -Winit-self -Wall -Wno-missing-field-initializers -Wno-unused-result -Wno-strict-aliasing -Wextra -Wunused -Wunreachable-code -Wswitch-default -march=native -mtune=native -O3 -o release/other/ft2-clone
+gcc -DNDEBUG src/gfxdata/*.c src/mixer/*.c src/modloaders/*.c src/smploaders/*.c src/*.c -lSDL2 -lm -Wshadow -Winit-self -Wall -Wno-missing-field-initializers -Wno-unused-result -Wno-strict-aliasing -Wextra -Wunused -Wunreachable-code -Wswitch-default -march=native -mtune=native -O3 -o release/other/ft2-clone
rm src/gfxdata/*.o src/*.o &> /dev/null
--- a/make-linux.sh
+++ b/make-linux.sh
@@ -3,7 +3,7 @@
rm release/other/ft2-clone &> /dev/null
echo Compiling, please wait patiently...
-gcc -DNDEBUG -DHAS_MIDI -D__LINUX_ALSA__ src/rtmidi/*.cpp src/gfxdata/*.c src/mixer/*.c src/*.c -lSDL2 -lpthread -lasound -lstdc++ -lm -Wshadow -Winit-self -Wall -Wno-missing-field-initializers -Wno-unused-result -Wno-strict-aliasing -Wextra -Wunused -Wunreachable-code -Wswitch-default -march=native -mtune=native -O3 -o release/other/ft2-clone
+gcc -DNDEBUG -DHAS_MIDI -D__LINUX_ALSA__ src/rtmidi/*.cpp src/gfxdata/*.c src/mixer/*.c src/modloaders/*.c src/smploaders/*.c src/*.c -lSDL2 -lpthread -lasound -lstdc++ -lm -Wshadow -Winit-self -Wall -Wno-missing-field-initializers -Wno-unused-result -Wno-strict-aliasing -Wextra -Wunused -Wunreachable-code -Wswitch-default -march=native -mtune=native -O3 -o release/other/ft2-clone
rm src/rtmidi/*.o src/gfxdata/*.o src/*.o &> /dev/null
--- a/make-macos.sh
+++ b/make-macos.sh
@@ -36,7 +36,7 @@
#
function compile() {
rm $1 &> /dev/null
- clang $VERBOSE $CFLAGS -F /Library/Frameworks -g0 -DNDEBUG -DHAS_MIDI -D__MACOSX_CORE__ -stdlib=libc++ src/rtmidi/*.cpp src/gfxdata/*.c src/mixer/*.c src/*.c -Winit-self -Wno-deprecated -Wextra -Wunused -mno-ms-bitfields -Wno-missing-field-initializers -Wswitch-default $LDFLAGS -L /Library/Frameworks -framework SDL2 -framework CoreMidi -framework CoreAudio -framework Cocoa -liconv -lpthread -lm -lstdc++ -o $1
+ clang $VERBOSE $CFLAGS -F /Library/Frameworks -g0 -DNDEBUG -DHAS_MIDI -D__MACOSX_CORE__ -stdlib=libc++ src/rtmidi/*.cpp src/gfxdata/*.c src/mixer/*.c src/modloaders/*.c src/smploaders/*.c src/*.c -Winit-self -Wno-deprecated -Wextra -Wunused -mno-ms-bitfields -Wno-missing-field-initializers -Wswitch-default $LDFLAGS -L /Library/Frameworks -framework SDL2 -framework CoreMidi -framework CoreAudio -framework Cocoa -liconv -lpthread -lm -lstdc++ -o $1
return $?
}
--- a/src/ft2_audio.c
+++ b/src/ft2_audio.c
@@ -47,8 +47,8 @@
voice_t *v = voice;
for (int32_t i = 0; i < MAX_VOICES*2; i++, v++)
{
+ v->dOldHz = 0.0;
v->oldDelta = 0;
- v->oldRevDelta = UINT32_MAX;
}
}
@@ -109,7 +109,6 @@
return false;
}
- calcRevMixDeltaTable();
resumeAudio();
setWavRenderFrequency(audio.freq);
@@ -140,10 +139,7 @@
const bool mustRecalcTables = audio.freq != oldAudioFreq;
if (mustRecalcTables)
- {
calcReplayerVars(audio.freq);
- calcRevMixDeltaTable();
- }
}
void setBackOldAudioFreq(void) // for song-to-WAV rendering
@@ -153,10 +149,7 @@
audio.freq = oldAudioFreq;
if (mustRecalcTables)
- {
calcReplayerVars(audio.freq);
- calcRevMixDeltaTable();
- }
}
void P_SetSpeed(uint16_t bpm)
@@ -383,7 +376,7 @@
if (status & IS_Period)
{
- // use cached values if possible
+ // use cached values when possible
if (ch->finalPeriod != ch->oldFinalPeriod)
{
ch->oldFinalPeriod = ch->finalPeriod;
@@ -390,19 +383,22 @@
if (ch->finalPeriod == 0) // in FT2, period 0 -> delta 0
{
+ v->dOldHz = 0.0;
v->oldDelta = 0;
- v->oldRevDelta = UINT32_MAX;
v->dSincLUT = gKaiserSinc;
}
else
{
- v->oldDelta = getMixerDelta(ch->finalPeriod);
- v->oldRevDelta = getRevMixerDelta(ch->finalPeriod); // for calc'ing max samples in inner mix loop before sample end/loop end
+ const double dHz = dPeriod2Hz(ch->finalPeriod);
+ const uint64_t delta64 = (int64_t)((dHz * audio.dHz2MixDeltaMul) + 0.5); // Hz -> rounded 32.32 fixed-point
+ v->dOldHz = dHz;
+ v->oldDelta = delta64;
+
// decide which sinc LUT to use according to resampling ratio
- if (v->oldDelta <= 0x130000000) // 1.1875 (32.32 fixed-point)
+ if (delta64 <= 0x130000000) // 1.1875 (32.32fp)
v->dSincLUT = gKaiserSinc;
- else if (v->oldDelta <= 0x180000000) // 1.5 (32.32 fixed-point)
+ else if (delta64 <= 0x180000000) // 1.5 (32.32fp)
v->dSincLUT = gDownSample1;
else
v->dSincLUT = gDownSample2;
@@ -410,7 +406,7 @@
}
v->delta = v->oldDelta;
- v->revDelta = v->oldRevDelta;
+ v->dHz = v->dOldHz;
}
if (status & IS_NyTon)
@@ -878,18 +874,24 @@
syncedChannel_t *c = chSyncData.channels;
stmTyp *s = stm;
+ voice_t *v = voice;
- for (int32_t i = 0; i < song.antChn; i++, c++, s++)
+ for (int32_t i = 0; i < song.antChn; i++, c++, s++, v++)
{
- c->finalPeriod = s->finalPeriod;
- c->fineTune = s->fineTune;
- c->relTonNr = s->relTonNr;
+ c->vol = s->finalVol;
+ c->dHz = v->dHz;
c->instrNr = s->instrNr;
c->sampleNr = s->sampleNr;
- c->envSustainActive = s->envSustainActive;
c->status = s->tmpStatus;
- c->dFinalVol = s->dFinalVol;
- c->smpStartPos = s->smpStartPos;
+ c->smpStartPos = (uint16_t)s->smpStartPos;
+
+ c->pianoNoteNr = 255; // no piano key
+ if (songPlaying && (c->status & IS_Period) && s->envSustainActive)
+ {
+ const int32_t note = getPianoKey(s->finalPeriod, s->fineTune, s->relTonNr);
+ if (note >= 0 && note <= 95)
+ c->pianoNoteNr = (uint8_t)note;
+ }
}
chSyncData.timestamp = audio.tickTime64;
--- a/src/ft2_audio.h
+++ b/src/ft2_audio.h
@@ -34,7 +34,7 @@
uint32_t freq, audLatencyPerfValInt, audLatencyPerfValFrac, samplesPerTick, musicTimeSpeedVal;
uint64_t tickTime64, tickTime64Frac, tickTimeTab[MAX_BPM+1];
double dRampQuickVolMul, dRampTickMul, dRampTickMulTab[MAX_BPM+1];
- double *dMixBufferL, *dMixBufferR, *dMixBufferLUnaligned, *dMixBufferRUnaligned;
+ double *dMixBufferL, *dMixBufferR, *dMixBufferLUnaligned, *dMixBufferRUnaligned, dHz2MixDeltaMul;
double dAudioLatencyMs, dSamplesPerTick, dTickSampleCounter, dSamplesPerTickTab[MAX_BPM+1];
SDL_AudioDeviceID dev;
@@ -47,8 +47,8 @@
const int16_t *base16, *revBase16;
bool active, backwards, isFadeOutVoice, hasLooped;
uint8_t mixFuncOffset, pan, loopType;
- int32_t pos, end, loopStart, loopLength;
- uint32_t volRampSamples, revDelta, oldRevDelta;
+ int32_t pos, end, loopStart, loopLength, oldPeriod;
+ uint32_t volRampSamples;
uint64_t posFrac, delta, oldDelta;
// if (loopEnabled && hasLooped && samplingPos <= loopStart+SINC_LEFT_TAPS) readFixedTapsFromThisPointer();
@@ -56,7 +56,7 @@
const int16_t *leftEdgeTaps16;
const double *dSincLUT;
- double dVol, dDestVolL, dDestVolR, dVolL, dVolR, dVolDeltaL, dVolDeltaR;
+ double dOldHz, dHz, dVol, dDestVolL, dDestVolR, dVolL, dVolR, dVolDeltaL, dVolDeltaR;
} voice_t;
typedef struct pattSyncData_t
--- a/src/ft2_diskop.c
+++ b/src/ft2_diskop.c
@@ -1187,6 +1187,38 @@
}
}
+static bool moduleExtensionAccepted(char *extPtr)
+{
+ int32_t i = 0;
+ while (true)
+ {
+ const char *str = supportedModExtensions[i++];
+ if (!_stricmp(str, "END_OF_LIST"))
+ return false;
+
+ if (!_stricmp(str, extPtr))
+ break;
+ }
+
+ return true;
+}
+
+static bool sampleExtensionAccepted(char *extPtr)
+{
+ int32_t i = 0;
+ while (true)
+ {
+ const char *str = supportedSmpExtensions[i++];
+ if (!_stricmp(str, "END_OF_LIST"))
+ return false;
+
+ if (!_stricmp(str, extPtr))
+ break;
+ }
+
+ return true;
+}
+
static uint8_t handleEntrySkip(UNICHAR *nameU, bool isDir)
{
// skip if illegal name or filesize >32-bit
@@ -1223,12 +1255,13 @@
}
else if (!FReq_ShowAllFiles)
{
- const int32_t extOffset = getExtOffset(name, nameLen);
+ int32_t extOffset = getExtOffset(name, nameLen);
if (extOffset == -1)
goto skipEntry;
+ extOffset++; // skip '.'
const int32_t extLen = (int32_t)strlen(&name[extOffset]);
- if (extLen < 3 || extLen > 5)
+ if (extLen < 2 || extLen > 6)
goto skipEntry; // no possibly known extensions to filter out
char *extPtr = &name[extOffset];
@@ -1239,117 +1272,46 @@
default:
case DISKOP_ITEM_MODULE:
{
- if (extLen == 3)
- {
- if (_stricmp(".xm", extPtr) && _stricmp(".ft", extPtr))
- goto skipEntry; // skip, none of the extensions above
- }
- else if (extLen == 4)
- {
- if (editor.moduleSaveMode == MOD_SAVE_MODE_WAV)
- {
- if (_stricmp(".nst", extPtr) && _stricmp(".mod", extPtr) &&
- _stricmp(".s3m", extPtr) && _stricmp(".stm", extPtr) &&
- _stricmp(".fst", extPtr) && _stricmp(".wav", extPtr))
- {
- goto skipEntry; // skip, none of the extensions above
- }
- }
- else
- {
- if (_stricmp(".nst", extPtr) && _stricmp(".mod", extPtr) &&
- _stricmp(".s3m", extPtr) && _stricmp(".stm", extPtr) &&
- _stricmp(".fst", extPtr))
- {
- goto skipEntry; // skip, none of the extensions above
- }
- }
- }
- else
- {
+ if (editor.moduleSaveMode == MOD_SAVE_MODE_WAV && !_stricmp("wav", extPtr))
+ break; // show .wav files when save mode is "WAV"
+
+ if (!moduleExtensionAccepted(extPtr))
goto skipEntry;
- }
}
break;
case DISKOP_ITEM_INSTR:
{
- if (extLen == 3)
- {
- if (_stricmp(".xi", extPtr))
- goto skipEntry; // skip, none of the extensions above
- }
- else if (extLen == 4)
- {
- if (_stricmp(".iff", extPtr) && _stricmp(".raw", extPtr) &&
- _stricmp(".wav", extPtr) && _stricmp(".snd", extPtr) &&
- _stricmp(".smp", extPtr) && _stricmp(".sam", extPtr) &&
- _stricmp(".aif", extPtr) && _stricmp(".pat", extPtr))
- {
- goto skipEntry; // skip, none of the extensions above
- }
- }
- else if (extLen == 5)
- {
- if (_stricmp(".aiff", extPtr))
- goto skipEntry; // skip, not the extension above
- }
- else
- {
+ if (!_stricmp("xi", extPtr))
+ break;
+
+ if (!sampleExtensionAccepted(extPtr))
goto skipEntry;
- }
}
break;
case DISKOP_ITEM_SAMPLE:
{
- if (extLen == 4)
- {
- if (_stricmp(".iff", extPtr) && _stricmp(".raw", extPtr) &&
- _stricmp(".wav", extPtr) && _stricmp(".snd", extPtr) &&
- _stricmp(".smp", extPtr) && _stricmp(".sam", extPtr) &&
- _stricmp(".aif", extPtr))
- {
- goto skipEntry; // skip, none of the extensions above
- }
- }
- else if (extLen == 5)
- {
- if (_stricmp(".aiff", extPtr))
- goto skipEntry; // skip, not the extension above
- }
- else
- {
+ if (!sampleExtensionAccepted(extPtr))
goto skipEntry;
- }
}
break;
case DISKOP_ITEM_PATTERN:
{
- if (extLen == 3)
- {
- if (_stricmp(".xp", extPtr))
- goto skipEntry; // skip, not the extension above
- }
- else
- {
- goto skipEntry;
- }
+ if (!_stricmp("xp", extPtr))
+ break;
+
+ goto skipEntry;
}
break;
case DISKOP_ITEM_TRACK:
{
- if (extLen == 3)
- {
- if (_stricmp(".xt", extPtr))
- goto skipEntry; // skip, not the extension above
- }
- else
- {
- goto skipEntry;
- }
+ if (!_stricmp("xt", extPtr))
+ break;
+
+ goto skipEntry;
}
break;
}
--- a/src/ft2_inst_ed.c
+++ b/src/ft2_inst_ed.c
@@ -18,7 +18,6 @@
#include "ft2_video.h"
#include "ft2_sample_loader.h"
#include "ft2_diskop.h"
-#include "ft2_module_loader.h"
#include "ft2_tables.h"
#include "ft2_bmp.h"
#include "ft2_structs.h"
@@ -1657,12 +1656,8 @@
syncedChannel_t *c = chSyncData->channels;
for (int32_t i = 0; i < song.antChn; i++, c++)
{
- if (c->instrNr == editor.curInstr && c->envSustainActive)
- {
- const int32_t note = getPianoKey(c->finalPeriod, c->fineTune, c->relTonNr);
- if (note >= 0 && note <= 95)
- newStatus[note] = true;
- }
+ if (c->instrNr == editor.curInstr && c->pianoNoteNr <= 95)
+ newStatus[c->pianoNoteNr] = true;
}
}
else // song is not playing (jamming from keyboard/MIDI)
@@ -3412,7 +3407,7 @@
loadDone:
fclose(f);
- fixSampleName(editor.curInstr);
+ fixInstrAndSampleNames(editor.curInstr);
editor.updateCurInstr = true; // setMouseBusy(false) is called in the input/video thread when done
if (ih.antSamp > MAX_SMP_PER_INST)
@@ -3426,14 +3421,13 @@
(void)ptr;
}
-static bool fileIsInstr(UNICHAR *filename)
+bool fileIsInstr(UNICHAR *filenameU)
{
- char header[22];
-
- FILE *f = UNICHAR_FOPEN(filename, "rb");
+ FILE *f = UNICHAR_FOPEN(filenameU, "rb");
if (f == NULL)
return false;
+ char header[22];
fread(header, 1, sizeof (header), f);
fclose(f);
--- a/src/ft2_inst_ed.h
+++ b/src/ft2_inst_ed.h
@@ -8,6 +8,8 @@
void drawC4Rate(void);
+bool fileIsInstr(UNICHAR *filenameU);
+
void saveInstr(UNICHAR *filenameU, int16_t nr);
void loadInstr(UNICHAR *filenameU);
void copyInstr(void); // dstInstr = srcInstr
--- a/src/ft2_module_loader.c
+++ b/src/ft2_module_loader.c
@@ -10,7 +10,6 @@
#include <unistd.h>
#endif
#include "ft2_header.h"
-#include "ft2_config.h"
#include "ft2_scopes.h"
#include "ft2_trim.h"
#include "ft2_inst_ed.h"
@@ -24,1857 +23,206 @@
#include "ft2_midi.h"
#include "ft2_events.h"
#include "ft2_video.h"
-#include "ft2_tables.h"
#include "ft2_structs.h"
+#include "ft2_sysreqs.h"
-/* This is a *HUGE* mess!
-** I hope you never have to modify it, and you probably shouldn't either.
-** You will experience a lot of headaches if you dig into this file...
-** If something looks to be wrong, it's probably right!
-**
-** The actual module load routines are ported from FT2 and slightly modified.
-*/
+bool loadDIGI(FILE *f, uint32_t filesize);
+bool loadMOD(FILE *f, uint32_t filesize);
+bool loadS3M(FILE *f, uint32_t filesize);
+bool loadSTK(FILE *f, uint32_t filesize);
+bool loadSTM(FILE *f, uint32_t filesize);
+bool loadXM(FILE *f, uint32_t filesize);
enum
{
- FORMAT_NONE = 0,
- FORMAT_XM = 1,
- FORMAT_MOD = 2,
- FORMAT_S3M = 3,
- FORMAT_STM = 4
+ FORMAT_UNKNOWN = 0,
+ FORMAT_POSSIBLY_STK = 1,
+ FORMAT_XM = 2,
+ FORMAT_MOD = 3,
+ FORMAT_S3M = 4,
+ FORMAT_STM = 5,
+ FORMAT_DIGI = 6
};
-// .MOD types
-enum
+// file extensions accepted by Disk Op. in module mode
+char *supportedModExtensions[] =
{
- FORMAT_MK, // ProTracker or compatible
- FORMAT_FLT, // StarTrekker (4-channel modules only)
- FORMAT_FT2, // FT2 (or other trackers, multichannel)
- FORMAT_STK, // The Ultimate SoundTracker (15 samples)
- FORMAT_NT, // NoiseTracker
- FORMAT_HMNT, // His Master's NoiseTracker (special one)
+ "xm", "ft", "nst", "stk", "mod", "s3m", "stm", "fst", "digi",
- FORMAT_UNKNOWN // may be The Ultimate Soundtracker (set to FORMAT_STK later)
+ "END_OF_LIST" // do NOT move, remove or edit this line!
};
-// DO NOT TOUCH THESE STRUCTS!
+// globals for module loaders
+volatile bool tmpLinearPeriodsFlag;
+int16_t pattLensTmp[MAX_PATTERNS];
+tonTyp *pattTmp[MAX_PATTERNS];
+instrTyp *instrTmp[1+256];
+songTyp songTmp;
+// --------------------------
-#ifdef _MSC_VER
-#pragma pack(push)
-#pragma pack(1)
-#endif
-typedef struct songSTMinstrHeaderTyp_t
-{
- char name[12];
- uint8_t nul, insDisk;
- uint16_t reserved1, len, repS, repE;
- uint8_t vol, reserved2;
- uint16_t rate;
- int32_t reserved3;
- uint16_t paraLen;
-}
-#ifdef __GNUC__
-__attribute__ ((packed))
-#endif
-songSTMinstrHeaderTyp;
-
-typedef struct songSTMHeaderTyp_t
-{
- char name[20], sig[8];
- uint8_t id1a, typ;
- uint8_t verMajor, verMinor;
- uint8_t tempo, ap, vol, reserved[13];
- songSTMinstrHeaderTyp instr[31];
- uint8_t songTab[128];
-}
-#ifdef __GNUC__
-__attribute__ ((packed))
-#endif
-songSTMHeaderTyp;
-
-typedef struct songS3MinstrHeaderTyp_t
-{
- uint8_t typ;
- char dosName[12];
- uint8_t memSegH;
- uint16_t memSeg;
- int32_t len, repS, repE;
- uint8_t vol, dsk, pack, flags;
- int32_t c2Spd, res1;
- uint16_t gusPos;
- uint8_t res2[6];
- char name[28], id[4];
-}
-#ifdef __GNUC__
-__attribute__ ((packed))
-#endif
-songS3MinstrHeaderTyp;
-
-typedef struct songS3MHeaderTyp_t
-{
- char name[28];
- uint8_t id1a, typ;
- uint16_t res1;
- int16_t songTabLen, antInstr, antPatt;
- uint16_t flags, trackerID, ver;
- char id[4];
- uint8_t globalVol, defSpeed, defTempo, masterVol, res2[12], chanType[32];
-}
-#ifdef __GNUC__
-__attribute__ ((packed))
-#endif
-songS3MHeaderTyp;
-#ifdef _MSC_VER
-#pragma pack(pop)
-#endif
-
-static volatile uint8_t loadedFormat;
-static volatile bool linearFreqTable, musicIsLoading, moduleLoaded, moduleFailedToLoad;
-static uint8_t oldPlayMode, pattBuff[12288], packedPattData[65536];
-static const uint8_t stmEff[16] = { 0, 0, 11, 0, 10, 2, 1, 3, 4, 7, 0, 5 ,6, 0, 0, 0 };
+static volatile bool musicIsLoading, moduleLoaded, moduleFailedToLoad;
static SDL_Thread *thread;
-
-// these temporarily read to, then copied to real struct if load was OK (should not need to be volatile'd)
-static int16_t pattLensTmp[MAX_PATTERNS];
-static uint32_t extraSampleLengths[32-MAX_SMP_PER_INST]; // ModPlug Tracker & OpenMPT supports up to 32 samples per instrument in .XM
-static tonTyp *pattTmp[MAX_PATTERNS];
-static instrTyp *instrTmp[1+256];
-static songTyp songTmp;
-
+static uint8_t oldPlayMode;
static void setupLoadedModule(void);
static void freeTmpModule(void);
-static bool loadInstrHeader(FILE *f, uint16_t i, bool externalThreadFlag);
-static bool loadInstrSample(FILE *f, uint16_t i, bool externalThreadFlag);
-void unpackPatt(uint8_t *dst, uint8_t *src, uint16_t len, int32_t antChn);
-static bool tmpPatternEmpty(uint16_t nr);
-static bool loadPatterns(FILE *f, uint16_t antPtn, bool externalThreadFlag);
-void checkSampleRepeat(sampleTyp *s);
-
-// ft2_replayer.c
-extern const char modSig[32][5];
-
-static bool allocateTmpInstr(int16_t nr)
+// Crude module detection routine. These aren't always accurate detections!
+static int8_t detectModule(FILE *f)
{
- if (instrTmp[nr] != NULL)
- return false; // already allocated
+ uint8_t D[256], I[4];
- instrTyp *p = (instrTyp *)calloc(1, sizeof (instrTyp));
- if (p == NULL)
- return false;
-
- sampleTyp *s = p->samp;
- for (int32_t i = 0; i < MAX_SMP_PER_INST; i++, s++)
- {
- s->pan = 128;
- s->vol = 64;
- }
-
- instrTmp[nr] = p;
- return true;
-}
-
-#define IS_ID(s, b) !strncmp(s, b, 4)
-
-static uint8_t getModType(uint8_t *numChannels, const char *id)
-{
- uint8_t modFormat = FORMAT_UNKNOWN;
- *numChannels = 4;
-
- if (IS_ID("M.K.", id) || IS_ID("M!K!", id) || IS_ID("NSMS", id) || IS_ID("LARD", id) || IS_ID("PATT", id))
- {
- modFormat = FORMAT_MK; // ProTracker or compatible
- }
- else if (id[1] == 'C' && id[2] == 'H' && id[3] == 'N')
- {
- modFormat = FORMAT_FT2; // FT2 or generic multichannel
- *numChannels = id[0] - '0';
- }
- else if (id[2] == 'C' && (id[3] == 'H' || id[3] == 'N'))
- {
- modFormat = FORMAT_FT2; // FT2 or generic multichannel
- *numChannels = ((id[0] - '0') * 10) + (id[1] - '0');
- }
- else if (IS_ID("FLT4", id))
- {
- modFormat = FORMAT_FLT; // StarTrekker (4-channel modules only)
- }
- else if (IS_ID("N.T.", id))
- {
- modFormat = FORMAT_NT; // NoiseTracker
- }
- else if (IS_ID("M&K!", id) || IS_ID("FEST", id))
- {
- modFormat = FORMAT_HMNT; // His Master's NoiseTracker
- }
-
- return modFormat;
-}
-
-static bool loadMusicMOD(FILE *f, uint32_t fileLength, bool externalThreadFlag)
-{
- char ID[16];
- uint8_t bytes[4], modFormat, numChannels;
- int16_t i, j, k, ai;
- uint16_t a, b, period;
- tonTyp *ton;
- sampleTyp *s;
- songMOD31HeaderTyp h_MOD31;
- songMOD15HeaderTyp h_MOD15;
- int16_t (*showMsg)(int16_t, const char *, const char *);
-
- showMsg = externalThreadFlag ? okBoxThreadSafe : okBox;
-
- bool veryLateSTKVerFlag = false; // "DFJ SoundTracker III" nad later
- bool lateSTKVerFlag = false; // "TJC SoundTracker II" and later
- bool mightBeSTK = false;
-
- memset(&songTmp, 0, sizeof (songTmp));
- memset(&h_MOD31, 0, sizeof (songMOD31HeaderTyp));
- memset(&h_MOD15, 0, sizeof (songMOD15HeaderTyp));
-
- // start loading MOD
-
- loadedFormat = FORMAT_MOD;
-
+ fseek(f, 0, SEEK_END);
+ uint32_t fileLength = (uint32_t)ftell(f);
rewind(f);
- fread(ID, 1, 16, f);
- fseek(f, 0x1D, SEEK_SET);
- fread(bytes, 1, 1, f);
- rewind(f);
-
- // since .mod is the last format tested, check if the file is an .it module (Impulse Tracker)
- if (!memcmp(ID, "IMPM", 4) && bytes[0] == 0)
- {
- showMsg(0, "System message", "Error: Impulse Tracker modules are not supported!");
- goto modLoadError;
- }
- // check if the file to load is a WAV, if so reject it
- if (!memcmp(ID, "RIFF", 4) && !memcmp(&ID[8], "WAVEfmt", 7))
- {
- showMsg(0, "System message", "Error: Can't load a .wav file as a module!");
- goto modLoadError;
- }
-
- if (fileLength < 1596 || fileLength > 20842494) // minimum and maximum possible size for a supported .mod
- {
- showMsg(0, "System message", "Error: This file is either not a module, or is not supported.");
- goto modLoadError;
- }
-
- if (fread(&h_MOD31, 1, sizeof (h_MOD31), f) != sizeof (h_MOD31))
- {
- showMsg(0, "System message", "Error: This file is either not a module, or is not supported.");
- goto modLoadError;
- }
-
- modFormat = getModType(&numChannels, h_MOD31.sig);
-
- if (modFormat == FORMAT_FLT && numChannels == 8)
- {
- showMsg(0, "System message", "8-channel Startrekker modules are not supported!");
- goto modLoadError;
- }
-
- if (modFormat != FORMAT_UNKNOWN)
- {
- if (fileLength < sizeof (h_MOD31))
- {
- showMsg(0, "System message", "Error: This file is either not a module, or is not supported.");
- goto modLoadError;
- }
-
- songTmp.antChn = numChannels;
- songTmp.len = h_MOD31.len;
- songTmp.repS = h_MOD31.repS;
- memcpy(songTmp.songTab, h_MOD31.songTab, 128);
- ai = 31;
- }
- else
- {
- mightBeSTK = true;
- if (fileLength < sizeof (h_MOD15))
- {
- showMsg(0, "System message", "Error: This file is not a module!");
- goto modLoadError;
- }
-
- rewind(f);
- if (fread(&h_MOD15, 1, sizeof (h_MOD15), f) != sizeof (h_MOD15))
- {
- showMsg(0, "System message", "Error: This file is either not a module, or is not supported.");
- goto modLoadError;
- }
-
- songTmp.antChn = numChannels;
- songTmp.len = h_MOD15.len;
- songTmp.repS = h_MOD15.repS;
- memcpy(songTmp.songTab, h_MOD15.songTab, 128);
- ai = 15;
- }
-
- if (modFormat == FORMAT_MK && songTmp.len == 129)
- songTmp.len = 127; // fixes a specific copy of beatwave.mod (FIXME: Do we want to keep this digsuting hack?)
-
- if (songTmp.antChn == 0 || songTmp.len < 1 || songTmp.len > 128 || (mightBeSTK && songTmp.repS > 220))
- {
- showMsg(0, "System message", "Error: This file is either not a module, or is not supported.");
- goto modLoadError;
- }
-
- for (a = 0; a < ai; a++)
- {
- songMODInstrHeaderTyp *smp = &h_MOD31.instr[a];
-
- if (modFormat != FORMAT_HMNT) // most of "His Master's Noisetracker" songs have junk sample names, so let's not load them
- {
- // trim off spaces at end of name
- for (i = 21; i >= 0; i--)
- {
- if (smp->name[i] == ' ' || smp->name[i] == 0x1A)
- smp->name[i] = '\0';
- else
- break;
- }
-
- memcpy(songTmp.instrName[1+a], smp->name, 22);
- songTmp.instrName[1+a][22] = '\0';
- }
-
- /* Only late versions of Ultimate SoundTracker could have samples larger than 9999 bytes.
- ** If found, we know for sure that this is a late STK module.
- */
- if (mightBeSTK && 2*SWAP16(smp->len) > 9999)
- lateSTKVerFlag = true;
- }
-
- songTmp.speed = 125;
- if (mightBeSTK)
- {
- /* If we're still here at this point and the mightBeSTK flag is set,
- ** then it's most likely a proper The Ultimate SoundTracker (STK/UST) module.
- */
- modFormat = FORMAT_STK;
-
- if (songTmp.repS == 0)
- songTmp.repS = 120;
-
- // jjk55.mod by Jesper Kyd has a bogus STK tempo value that should be ignored (hackish!)
- if (!strcmp("jjk55", h_MOD31.name))
- songTmp.repS = 120;
-
- // The "restart pos" field in STK is the inital tempo (must be converted to BPM first)
- if (songTmp.repS != 120) // 120 is a special case and means 50Hz (125BPM)
- {
- if (songTmp.repS > 220)
- songTmp.repS = 220;
-
- // convert UST tempo to BPM
- uint16_t ciaPeriod = (240 - songTmp.repS) * 122;
- double dHz = 709379.0 / ciaPeriod;
- int32_t BPM = (int32_t)((dHz * 2.5) + 0.5);
-
- songTmp.speed = (uint16_t)BPM;
- }
-
- songTmp.repS = 0;
- }
- else if (songTmp.repS >= songTmp.len)
- {
- songTmp.repS = 0;
- }
-
- // trim off spaces at end of name
- for (i = 19; i >= 0; i--)
- {
- if (h_MOD31.name[i] == ' ' || h_MOD31.name[i] == 0x1A)
- h_MOD31.name[i] = '\0';
- else
- break;
- }
-
- memcpy(songTmp.name, h_MOD31.name, 20);
- songTmp.name[20] = '\0';
-
- // count number of patterns
- b = 0;
- for (a = 0; a < 128; a++)
- {
- if (songTmp.songTab[a] > b)
- b = songTmp.songTab[a];
- }
- b++;
-
- for (a = 0; a < b; a++)
- {
- pattTmp[a] = (tonTyp *)calloc((MAX_PATT_LEN * TRACK_WIDTH) + 16, 1);
- if (pattTmp[a] == NULL)
- {
- showMsg(0, "System message", "Not enough memory!");
- goto modLoadError;
- }
-
- pattLensTmp[a] = 64;
- for (j = 0; j < 64; j++)
- {
- for (k = 0; k < songTmp.antChn; k++)
- {
- ton = &pattTmp[a][(j * MAX_VOICES) + k];
-
- if (fread(bytes, 1, 4, f) != 4)
- {
- showMsg(0, "System message", "Error: This file is either not a module, or is not supported.");
- goto modLoadError;
- }
-
- // period to note
- period = ((bytes[0] & 0x0F) << 8) | bytes[1];
- for (i = 0; i < 8*12; i++)
- {
- if (period >= amigaPeriod[i])
- {
- ton->ton = (uint8_t)i + 1;
- break;
- }
- }
-
- ton->instr = (bytes[0] & 0xF0) | (bytes[2] >> 4);
- ton->effTyp = bytes[2] & 0x0F;
- ton->eff = bytes[3];
-
- if (modFormat == FORMAT_STK)
- {
- if (ton->effTyp == 0xC || ton->effTyp == 0xD || ton->effTyp == 0xE)
- {
- // "TJC SoundTracker II" and later
- lateSTKVerFlag = true;
- }
-
- if (ton->effTyp == 0xF)
- {
- // "DFJ SoundTracker III" and later
- lateSTKVerFlag = true;
- veryLateSTKVerFlag = true;
- }
- }
-
- if (ton->effTyp == 0xC)
- {
- if (ton->eff > 64)
- ton->eff = 64;
- }
- else if (ton->effTyp == 0x1)
- {
- if (ton->eff == 0)
- ton->effTyp = 0;
- }
- else if (ton->effTyp == 0x2)
- {
- if (ton->eff == 0)
- ton->effTyp = 0;
- }
- else if (ton->effTyp == 0x5)
- {
- if (ton->eff == 0)
- ton->effTyp = 0x3;
- }
- else if (ton->effTyp == 0x6)
- {
- if (ton->eff == 0)
- ton->effTyp = 0x4;
- }
- else if (ton->effTyp == 0xA)
- {
- if (ton->eff == 0)
- ton->effTyp = 0;
- }
- else if (ton->effTyp == 0xE)
- {
- // check if certain E commands are empty
- if (ton->eff == 0x10 || ton->eff == 0x20 || ton->eff == 0xA0 || ton->eff == 0xB0)
- {
- ton->effTyp = 0;
- ton->eff = 0;
- }
- }
- }
- }
-
- if (tmpPatternEmpty(a))
- {
- if (pattTmp[a] != NULL)
- {
- free(pattTmp[a]);
- pattTmp[a] = NULL;
- }
- }
- }
-
- // pattern command conversion for non-PT formats
- if (modFormat == FORMAT_STK || modFormat == FORMAT_NT || modFormat == FORMAT_HMNT || modFormat == FORMAT_FLT)
- {
- for (a = 0; a < b; a++)
- {
- if (pattTmp[a] == NULL)
- continue;
-
- for (j = 0; j < 64; j++)
- {
- for (k = 0; k < songTmp.antChn; k++)
- {
- ton = &pattTmp[a][(j * MAX_VOICES) + k];
-
- if (modFormat == FORMAT_NT || modFormat == FORMAT_HMNT)
- {
- // any Dxx == D00 in NT/HMNT
- if (ton->effTyp == 0xD)
- ton->eff = 0;
-
- // effect F with param 0x00 does nothing in NT/HMNT
- if (ton->effTyp == 0xF && ton->eff == 0)
- ton->effTyp = 0;
- }
- else if (modFormat == FORMAT_FLT) // Startrekker
- {
- if (ton->effTyp == 0xE) // remove unsupported "assembly macros" command
- {
- ton->effTyp = 0;
- ton->eff = 0;
- }
-
- // Startrekker is always in vblank mode, and limits speed to 0x1F
- if (ton->effTyp == 0xF && ton->eff > 0x1F)
- ton->eff = 0x1F;
- }
- else if (modFormat == FORMAT_STK)
- {
- // convert STK effects to PT effects
-
- if (!lateSTKVerFlag)
- {
- // old SoundTracker 1.x commands
-
- if (ton->effTyp == 1)
- {
- // arpeggio
- ton->effTyp = 0;
- }
- else if (ton->effTyp == 2)
- {
- // pitch slide
- if (ton->eff & 0xF0)
- {
- // pitch slide down
- ton->effTyp = 2;
- ton->eff >>= 4;
- }
- else if (ton->eff & 0x0F)
- {
- // pitch slide up
- ton->effTyp = 1;
- }
- }
- }
- else
- {
- // "DFJ SoundTracker II" or later
-
- if (ton->effTyp == 0xD)
- {
- if (veryLateSTKVerFlag) // "DFJ SoundTracker III" or later
- {
- // pattern break w/ no param (param must be cleared to fix some songs)
- ton->eff = 0;
- }
- else
- {
- // volume slide
- ton->effTyp = 0xA;
- }
- }
- }
-
- // effect F with param 0x00 does nothing in UST/STK (I think?)
- if (ton->effTyp == 0xF && ton->eff == 0)
- ton->effTyp = 0;
- }
- }
- }
- }
- }
-
- for (a = 0; a < ai; a++)
- {
- if (h_MOD31.instr[a].len == 0)
- continue;
-
- if (!allocateTmpInstr(1+a))
- {
- showMsg(0, "System message", "Not enough memory!");
- goto modLoadError;
- }
-
- setNoEnvelope(instrTmp[1+a]);
-
- s = &instrTmp[1+a]->samp[0];
-
- s->len = 2 * SWAP16(h_MOD31.instr[a].len);
-
- if (modFormat != FORMAT_HMNT) // most of "His Master's Noisetracker" songs have junk sample names, so let's not load them
- memcpy(s->name, songTmp.instrName[1+a], 22);
-
- if (modFormat == FORMAT_HMNT) // finetune in "His Master's NoiseTracker" is different
- h_MOD31.instr[a].fine = (uint8_t)((-h_MOD31.instr[a].fine & 0x1F) >> 1); // one more bit of precision, + inverted
-
- if (modFormat != FORMAT_STK)
- s->fine = 8 * ((2 * ((h_MOD31.instr[a].fine & 0xF) ^ 8)) - 16);
-
- s->pan = 128;
-
- s->vol = h_MOD31.instr[a].vol;
- if (s->vol > 64)
- s->vol = 64;
-
- s->repS = 2 * SWAP16(h_MOD31.instr[a].repS);
- s->repL = 2 * SWAP16(h_MOD31.instr[a].repL);
-
- if (s->repL < 2)
- s->repL = 2;
-
- // in The Ultimate SoundTracker, sample loop start is in bytes, not words
- if (modFormat == FORMAT_STK)
- s->repS >>= 1;
-
- // fix for poorly converted STK (< v2.5) -> PT/NT modules (FIXME: Worth keeping or not?)
- if (modFormat != FORMAT_STK && s->repL > 2 && s->repS+s->repL > s->len)
- {
- if ((s->repS>>1)+s->repL <= s->len)
- s->repS >>= 1;
- }
-
- // fix overflown loop
- if (s->repS+s->repL > s->len)
- {
- if (s->repS >= s->len)
- {
- s->repS = 0;
- s->repL = 0;
- }
- else
- {
- s->repL = s->len - s->repS;
- }
- }
-
- if (s->repS+s->repL > 2)
- s->typ = 1; // enable loop
-
- /* For Ultimate SoundTracker modules, only the loop area of a looped sample is played.
- ** Skip loading of eventual data present before loop start.
- */
- if (modFormat == FORMAT_STK && s->repS > 0 && s->repL < s->len)
- {
- s->len -= s->repS;
- fseek(f, s->repS, SEEK_CUR);
- s->repS = 0;
- }
-
- s->pek = NULL;
- s->origPek = (int8_t *)malloc(s->len + LOOP_FIX_LEN);
- if (s->origPek == NULL)
- {
- showMsg(0, "System message", "Not enough memory!");
- goto modLoadError;
- }
-
- s->pek = s->origPek + SMP_DAT_OFFSET;
-
- int32_t bytesRead = (int32_t)fread(s->pek, 1, s->len, f);
- if (bytesRead < s->len)
- {
- int32_t bytesToClear = s->len - bytesRead;
- memset(&s->pek[bytesRead], 0, bytesToClear);
- }
-
- // clear repL and repS on non-looping samples...
- if (s->typ == 0)
- {
- s->repL = 0;
- s->repS = 0;
- }
-
- fixSample(s);
- }
-
- fclose(f);
-
- songTmp.initialTempo = songTmp.tempo = 6;
-
- moduleLoaded = true;
- return true;
-
-modLoadError:
- fclose(f);
- freeTmpModule();
- moduleFailedToLoad = true;
- return false;
-}
-
-static uint8_t stmTempoToBPM(uint8_t tempo) // ported from original ST2.3 replayer code
-{
- const uint8_t slowdowns[16] = { 140, 50, 25, 15, 10, 7, 6, 4, 3, 3, 2, 2, 2, 2, 1, 1 };
- uint16_t hz = 50;
-
- hz -= ((slowdowns[tempo >> 4] * (tempo & 15)) >> 4); // can and will underflow
-
- const uint32_t bpm = (hz << 1) + (hz >> 1); // BPM = hz * 2.5
- return (uint8_t)CLAMP(bpm, 32, 255); // result can be slightly off, but close enough...
-}
-
-static bool loadMusicSTM(FILE *f, uint32_t fileLength, bool externalThreadFlag)
-{
- uint8_t typ, tempo;
- int16_t i, j, k, ap, tmp;
- uint16_t a;
- tonTyp *ton;
- sampleTyp *s;
- songSTMHeaderTyp h_STM;
- int16_t (*showMsg)(int16_t, const char *, const char *);
-
- showMsg = externalThreadFlag ? okBoxThreadSafe : okBox;
-
+ memset(D, 0, sizeof (D));
+ fread(D, 1, sizeof (D), f);
+ fseek(f, 1080, SEEK_SET); // MOD ID
+ I[0] = I[1] = I[2] = I[3] = 0;
+ fread(I, 1, 4, f);
rewind(f);
- // start loading STM
+ // DIGI Booster (non-Pro)
+ if (!memcmp("DIGI Booster module", &D[0x00], 19+1) && D[0x19] >= 1 && D[0x19] <= 8)
+ return FORMAT_DIGI;
- if (fread(&h_STM, 1, sizeof (h_STM), f) != sizeof (h_STM))
- return loadMusicMOD(f, fileLength, externalThreadFlag); // file is not a .stm, try to load as .mod
+ // Scream Tracker 3 S3M (and compatible trackers)
+ if (!memcmp("SCRM", &D[0x2C], 4) && D[0x1D] == 16) // XXX: byte=16 in all cases?
+ return FORMAT_S3M;
- if (memcmp(h_STM.sig, "!Scream!", 8) && memcmp(h_STM.sig, "BMOD2STM", 8) &&
- memcmp(h_STM.sig, "WUZAMOD!", 8) && memcmp(h_STM.sig, "SWavePro", 8))
+ // Scream Tracker 2 STM
+ if ((!memcmp("!Scream!", &D[0x14], 8) || !memcmp("BMOD2STM", &D[0x14], 8) ||
+ !memcmp("WUZAMOD!", &D[0x14], 8) || !memcmp("SWavePro", &D[0x14], 8)) && D[0x1D] == 2) // XXX: byte=2 for "WUZAMOD!"/"SWavePro" ?
{
- return loadMusicMOD(f, fileLength, externalThreadFlag); // file is not a .stm, try to load as .mod
+ return FORMAT_STM;
}
- loadedFormat = FORMAT_STM;
+ // Generic multi-channel MOD (1..9 channels)
+ if (isdigit(I[0]) && I[0] != '0' && I[1] == 'C' && I[2] == 'H' && I[3] == 'N') // xCHN
+ return FORMAT_MOD;
- if (h_STM.verMinor == 0 || h_STM.typ != 2)
- {
- showMsg(0, "System message", "Error loading .stm: Incompatible module!");
- goto stmLoadError;
- }
+ // Generic multi-channel MOD (10..99 channels)
+ if (isdigit(I[0]) && isdigit(I[1]) && I[0] != '0' && I[2] == 'C' && I[3] == 'H') // xxCH
+ return FORMAT_MOD;
- songTmp.antChn = 4;
- memcpy(songTmp.songTab, h_STM.songTab, 128);
-
- i = 0;
- while (i < 128 && songTmp.songTab[i] < 99) i++;
- songTmp.len = i + (i == 0);
-
- if (songTmp.len < 255)
- memset(&songTmp.songTab[songTmp.len], 0, 256 - songTmp.len);
-
- // trim off spaces at end of name
- for (i = 19; i >= 0; i--)
+ // Generic multi-channel MOD (10..99 channels)
+ if (isdigit(I[0]) && isdigit(I[1]) && I[0] != '0' && I[2] == 'C' && I[3] == 'N') // xxCN (same as xxCH)
+ return FORMAT_MOD;
+
+ // Generic 4-channel MOD (NoiseTracker/ProTracker or compatible)
+ if (!memcmp("M.K.", I, 4) || !memcmp("M!K!", I, 4) || !memcmp("NSMS", I, 4) ||
+ !memcmp("LARD", I, 4) || !memcmp("PATT", I, 4) || !memcmp("PATT", I, 4) ||
+ !memcmp("FLT4", I, 4) || !memcmp("FLT8", I, 4) || !memcmp("N.T.", I, 4) ||
+ !memcmp("M&K!", I, 4) || !memcmp("FEST", I, 4))
{
- if (h_STM.name[i] == ' ' || h_STM.name[i] == 0x1A)
- h_STM.name[i] = '\0';
- else
- break;
+ return FORMAT_MOD;
}
- memcpy(songTmp.name, h_STM.name, 20);
- songTmp.name[20] = '\0';
+ /* Check if the file is a .it module (Impulse Tracker, not supported).
+ ** Some people may attempt to load .IT files in the FT2 clone, so
+ ** reject them here instead of accidentally loading them as .STK
+ */
+ if (!memcmp("IMPM", D, 4) && D[0x16] == 0)
+ return FORMAT_UNKNOWN;
- tempo = h_STM.tempo;
- if (h_STM.verMinor < 21)
- tempo = ((tempo / 10) << 4) + (tempo % 10);
+ /* Fasttracker II XM and compatible trackers.
+ ** Note: This test can falsely be true for STK modules (and non-supported files) where the
+ ** first 17 bytes start with "Extended Module: ". This is unlikely to happen.
+ */
+ if (!memcmp("Extended Module: ", &D[0x00], 17))
+ return FORMAT_XM;
- if (tempo == 0)
- tempo = 96;
+ /* Lastly, we assume that the file is either a 15-sample STK or an unsupported file.
+ ** Let's assume it's an STK and do some sanity checks. If they fail, we have an
+ ** unsupported file.
+ */
- songTmp.initialTempo = songTmp.tempo = CLAMP(h_STM.tempo >> 4, 1, 31);
- songTmp.speed = stmTempoToBPM(tempo);
+ // minimum and maximum (?) possible size for a supported STK
+ if (fileLength < 1624 || fileLength > 984634)
+ return FORMAT_UNKNOWN;
- if (h_STM.verMinor > 10)
- songTmp.globVol = MIN(h_STM.vol, 64);
-
- ap = h_STM.ap;
- for (i = 0; i < ap; i++)
- {
- pattTmp[i] = (tonTyp *)calloc((MAX_PATT_LEN * TRACK_WIDTH) + 16, 1);
- if (pattTmp[i] == NULL)
- {
- showMsg(0, "System message", "Not enough memory!");
- goto stmLoadError;
- }
-
- pattLensTmp[i] = 64;
- if (fread(pattBuff, 64 * 4 * 4, 1, f) != 1)
- {
- showMsg(0, "System message", "General I/O error during loading!");
- goto stmLoadError;
- }
-
- a = 0;
- for (j = 0; j < 64; j++)
- {
- for (k = 0; k < 4; k++)
- {
- ton = &pattTmp[i][(j * MAX_VOICES) + k];
-
- if (pattBuff[a] == 254)
- {
- ton->ton = 97;
- }
- else if (pattBuff[a] < 96)
- {
- ton->ton = (12 * (pattBuff[a] >> 4)) + (25 + (pattBuff[a] & 0x0F));
- if (ton->ton > 96)
- ton->ton = 0;
- }
- else
- {
- ton->ton = 0;
- }
-
- ton->instr = pattBuff[a + 1] >> 3;
- typ = (pattBuff[a + 1] & 7) + ((pattBuff[a + 2] & 0xF0) >> 1);
- if (typ <= 64)
- ton->vol = typ + 0x10;
-
- ton->eff = pattBuff[a + 3];
-
- tmp = pattBuff[a + 2] & 0x0F;
- if (tmp == 1)
- {
- ton->effTyp = 15;
-
- if (h_STM.verMinor < 21)
- ton->eff = ((ton->eff / 10) << 4) + (ton->eff % 10);
-
- ton->eff >>= 4;
- }
- else if (tmp == 3)
- {
- ton->effTyp = 13;
- ton->eff = 0;
- }
- else if (tmp == 2 || (tmp >= 4 && tmp <= 12))
- {
- ton->effTyp = stmEff[tmp];
- if (ton->effTyp == 0xA)
- {
- if (ton->eff & 0x0F)
- ton->eff &= 0x0F;
- else
- ton->eff &= 0xF0;
- }
- }
- else
- {
- ton->eff = 0;
- }
-
- if (ton->effTyp > 35)
- {
- ton->effTyp = 0;
- ton->eff = 0;
- }
-
- a += 4;
- }
- }
-
- if (tmpPatternEmpty(i))
- {
- if (pattTmp[i] != NULL)
- {
- free(pattTmp[i]);
- pattTmp[i] = NULL;
- }
- }
- }
-
- for (i = 0; i < 31; i++)
- {
- // trim off spaces at end of name
- for (j = 11; j >= 0; j--)
- {
- if (h_STM.instr[i].name[j] == ' ' || h_STM.instr[i].name[j] == 0x1A)
- h_STM.instr[i].name[j] = '\0';
- else
- break;
- }
-
- memset(&songTmp.instrName[1+i], 0, sizeof (songTmp.instrName[1+i]));
- memcpy(&songTmp.instrName[1+i], h_STM.instr[i].name, 12);
-
- if (h_STM.instr[i].len != 0 && h_STM.instr[i].reserved1 != 0)
- {
- allocateTmpInstr(1 + i);
- setNoEnvelope(instrTmp[i]);
-
- s = &instrTmp[1+i]->samp[0];
-
- s->pek = NULL;
- s->origPek = (int8_t *)malloc(h_STM.instr[i].len + LOOP_FIX_LEN);
- if (s->origPek == NULL)
- {
- showMsg(0, "System message", "Not enough memory!");
- goto stmLoadError;
- }
-
- s->pek = s->origPek + SMP_DAT_OFFSET;
-
- s->len = h_STM.instr[i].len;
- tuneSample(s, h_STM.instr[i].rate, false);
- s->vol = h_STM.instr[i].vol;
- s->repS = h_STM.instr[i].repS;
- s->repL = h_STM.instr[i].repE - h_STM.instr[i].repS;
- s->pan = 128;
-
- if (s->repS < s->len && h_STM.instr[i].repE > s->repS && h_STM.instr[i].repE != 0xFFFF)
- {
- if (s->repS+s->repL > s->len)
- s->repL = s->len - s->repS;
-
- s->typ = 1; // enable loop
- }
- else
- {
- s->repS = 0;
- s->repL = 0;
- s->typ = 0;
- }
-
- if (s->vol > 64)
- s->vol = 64;
-
- if (fread(s->pek, s->len, 1, f) != 1)
- {
- showMsg(0, "System message", "General I/O error during loading! Possibly corrupt module?");
- goto stmLoadError;
- }
-
- fixSample(s);
- }
- }
-
- fclose(f);
-
- moduleLoaded = true;
- return true;
-
-stmLoadError:
- fclose(f);
- freeTmpModule();
- moduleFailedToLoad = true;
- return false;
-}
-
-static int8_t countS3MChannels(uint16_t antPtn)
-{
- int32_t channels = 0;
- for (int32_t i = 0; i < antPtn; i++)
- {
- if (pattTmp[i] == NULL)
- continue;
-
- tonTyp *ton = pattTmp[i];
- for (int32_t j = 0; j < 64; j++)
- {
- for (int32_t k = 0; k < MAX_VOICES; k++, ton++)
- {
- if (ton->eff == 0 && ton->effTyp == 0 && ton->instr == 0 && ton->ton == 0 && ton->vol == 0)
- continue;
-
- if (k > channels)
- channels = k;
- }
- }
- }
- channels++;
-
- return (int8_t)channels;
-}
-
-static bool loadMusicS3M(FILE *f, uint32_t dataLength, bool externalThreadFlag)
-{
- int8_t *tmpSmp;
- uint8_t ha[2048];
- uint8_t alastnfo[32], alastefx[32], alastvibnfo[32], s3mLastGInstr[32];
- uint8_t typ;
- int16_t ai, ap, ver, ii, kk, tmp;
- uint16_t ptnOfs[256];
- int32_t i, j, k, len;
- tonTyp ton;
- sampleTyp *s;
- songS3MHeaderTyp h_S3M;
- songS3MinstrHeaderTyp h_S3MInstr;
- int16_t (*showMsg)(int16_t, const char *, const char *);
-
- showMsg = externalThreadFlag ? okBoxThreadSafe : okBox;
-
+ // test STK numOrders+BPM for illegal values
+ fseek(f, 470, SEEK_SET);
+ D[0] = D[1] = 0;
+ fread(D, 1, 2, f);
rewind(f);
- // start loading S3M
+ if (D[0] >= 0 && D[0] <= 128 && D[1] <= 220)
+ return FORMAT_POSSIBLY_STK;
- if (fread(&h_S3M, 1, sizeof (h_S3M), f) != sizeof (h_S3M))
- return loadMusicSTM(f, dataLength, externalThreadFlag); // not a .s3m, try loading as .stm
-
- if (memcmp(h_S3M.id, "SCRM", 4))
- return loadMusicSTM(f, dataLength, externalThreadFlag); // not a .s3m, try loading as .stm
-
- loadedFormat = FORMAT_S3M;
-
- if (h_S3M.antInstr > MAX_INST || h_S3M.songTabLen > 256 || h_S3M.antPatt > 256 ||
- h_S3M.typ != 16 || h_S3M.ver < 1 || h_S3M.ver > 2)
- {
- showMsg(0, "System message", "Error loading .s3m: Incompatible module!");
- goto s3mLoadError;
- }
-
- memset(songTmp.songTab, 255, sizeof (songTmp.songTab));
- if (fread(songTmp.songTab, h_S3M.songTabLen, 1, f) != 1)
- {
- showMsg(0, "System message", "General I/O error during loading! Is the file in use?");
- goto s3mLoadError;
- }
-
- songTmp.len = h_S3M.songTabLen;
-
- // remove pattern separators (254)
- k = 0;
- j = 0;
- for (i = 0; i < songTmp.len; i++)
- {
- if (songTmp.songTab[i] != 254)
- songTmp.songTab[j++] = songTmp.songTab[i];
- else
- k++;
- }
-
- if (k <= songTmp.len)
- songTmp.len -= (uint16_t)k;
- else
- songTmp.len = 1;
-
- for (i = 1; i < songTmp.len; i++)
- {
- if (songTmp.songTab[i] == 255)
- {
- songTmp.len = (uint16_t)i;
- break;
- }
- }
-
- // clear unused song table entries
- if (songTmp.len < 255)
- memset(&songTmp.songTab[songTmp.len], 0, 255-songTmp.len);
-
- songTmp.speed = h_S3M.defTempo;
- if (songTmp.speed < 32)
- songTmp.speed = 32;
-
- songTmp.tempo = h_S3M.defSpeed;
- if (songTmp.tempo == 0)
- songTmp.tempo = 6;
-
- if (songTmp.tempo > 31)
- songTmp.tempo = 31;
-
- songTmp.initialTempo = songTmp.tempo;
-
- // trim off spaces at end of name
- for (i = 19; i >= 0; i--)
- {
- if (h_S3M.name[i] == ' ' || h_S3M.name[i] == 0x1A)
- h_S3M.name[i] = '\0';
- else
- break;
- }
-
- memcpy(songTmp.name, h_S3M.name, 20);
- songTmp.name[20] = '\0';
-
- ap = h_S3M.antPatt;
- ai = h_S3M.antInstr;
- ver = h_S3M.ver;
-
- k = 31;
- while (k >= 0 && h_S3M.chanType[k] >= 16) k--;
- songTmp.antChn = (k + 2) & 254;
-
- if (fread(ha, ai + ai, 1, f) != 1)
- {
- showMsg(0, "System message", "General I/O error during loading! Is the file in use?");
- goto s3mLoadError;
- }
-
- if (fread(ptnOfs, ap + ap, 1, f) != 1)
- {
- showMsg(0, "System message", "General I/O error during loading! Is the file in use?");
- goto s3mLoadError;
- }
-
- // *** PATTERNS ***
-
- k = 0;
- for (i = 0; i < ap; i++)
- {
- if (ptnOfs[i] == 0)
- continue; // empty pattern
-
- memset(alastnfo, 0, sizeof (alastnfo));
- memset(alastefx, 0, sizeof (alastefx));
- memset(alastvibnfo, 0, sizeof (alastvibnfo));
- memset(s3mLastGInstr, 0, sizeof (s3mLastGInstr));
-
- fseek(f, ptnOfs[i] << 4, SEEK_SET);
- if (feof(f))
- continue;
-
- if (fread(&j, 2, 1, f) != 1)
- {
- showMsg(0, "System message", "General I/O error during loading! Is the file in use?");
- goto s3mLoadError;
- }
-
- if (j > 0 && j <= 12288)
- {
- pattTmp[i] = (tonTyp *)calloc((MAX_PATT_LEN * TRACK_WIDTH) + 16, 1);
- if (pattTmp[i] == NULL)
- {
- showMsg(0, "System message", "Not enough memory!");
- goto s3mLoadError;
- }
-
- pattLensTmp[i] = 64;
- fread(pattBuff, j, 1, f);
-
- k = 0;
- kk = 0;
-
- while (k < j && kk < 64)
- {
- typ = pattBuff[k++];
-
- if (typ == 0)
- {
- kk++;
- }
- else
- {
- ii = typ & 31;
-
- memset(&ton, 0, sizeof (ton));
-
- // note and sample
- if (typ & 32)
- {
- ton.ton = pattBuff[k++];
- ton.instr = pattBuff[k++];
-
- if (ton.instr > MAX_INST)
- ton.instr = 0;
-
- if (ton.ton == 254) ton.ton = 97;
- else if (ton.ton == 255) ton.ton = 0;
- else
- {
- ton.ton = 1 + (ton.ton & 0xF) + (ton.ton >> 4) * 12;
- if (ton.ton > 96)
- ton.ton = 0;
- }
- }
-
- // volume column
- if (typ & 64)
- {
- ton.vol = pattBuff[k++];
-
- if (ton.vol <= 64)
- ton.vol += 0x10;
- else
- ton.vol = 0;
- }
-
- // effect
- if (typ & 128)
- {
- ton.effTyp = pattBuff[k++];
- ton.eff = pattBuff[k++];
-
- if (ton.eff > 0)
- {
- alastnfo[ii] = ton.eff;
- if (ton.effTyp == 8 || ton.effTyp == 21)
- alastvibnfo[ii] = ton.eff; // H/U
- }
-
- // in ST3, a lot of effects directly share the same memory!
- if (ton.eff == 0 && ton.effTyp != 7) // G
- {
- uint8_t efx = ton.effTyp;
- if (efx == 8 || efx == 21) // H/U
- ton.eff = alastvibnfo[ii];
- else if ((efx >= 4 && efx <= 12) || (efx >= 17 && efx <= 19)) // D/E/F/I/J/K/L/Q/R/S
- ton.eff = alastnfo[ii];
-
- /* If effect data is zero and effect type was the same as last one, clear out
- ** data if it's not J or S (those have no memory in the equivalent XM effects).
- ** Also goes for extra fine pitch slides and fine volume slides,
- ** since they get converted to other effects.
- */
- if (efx == alastefx[ii] && ton.effTyp != 10 && ton.effTyp != 19) // J/S
- {
- uint8_t nfo = ton.eff;
- bool extraFinePitchSlides = (efx == 5 || efx == 6) && ((nfo & 0xF0) == 0xE0);
- bool fineVolSlides = (efx == 4 || efx == 11) &&
- ((nfo > 0xF0) || (((nfo & 0xF) == 0xF) && ((nfo & 0xF0) > 0)));
-
- if (!extraFinePitchSlides && !fineVolSlides)
- ton.eff = 0;
- }
- }
-
- if (ton.effTyp > 0)
- alastefx[ii] = ton.effTyp;
-
- switch (ton.effTyp)
- {
- case 1: // A
- {
- ton.effTyp = 0xF;
- if (ton.eff == 0 || ton.eff > 0x1F)
- {
- ton.effTyp = 0;
- ton.eff = 0;
- }
- }
- break;
-
- case 2: ton.effTyp = 0xB; break; // B
- case 3: ton.effTyp = 0xD; break; // C
- case 4: // D
- {
- if (ton.eff > 0xF0) // fine slide up
- {
- ton.effTyp = 0xE;
- ton.eff = 0xB0 | (ton.eff & 0xF);
- }
- else if ((ton.eff & 0x0F) == 0x0F && (ton.eff & 0xF0) > 0) // fine slide down
- {
- ton.effTyp = 0xE;
- ton.eff = 0xA0 | (ton.eff >> 4);
- }
- else
- {
- ton.effTyp = 0xA;
- if (ton.eff & 0x0F) // on D/K, last nybble has first priority in ST3
- ton.eff &= 0x0F;
- }
- }
- break;
-
- case 5: // E
- case 6: // F
- {
- if ((ton.eff & 0xF0) >= 0xE0)
- {
- // convert to fine slide
- if ((ton.eff & 0xF0) == 0xE0)
- tmp = 0x21;
- else
- tmp = 0xE;
-
- ton.eff &= 0x0F;
-
- if (ton.effTyp == 0x05)
- ton.eff |= 0x20;
- else
- ton.eff |= 0x10;
-
- ton.effTyp = (uint8_t)tmp;
-
- if (ton.effTyp == 0x21 && ton.eff == 0)
- {
- ton.effTyp = 0;
- }
- }
- else
- {
- // convert to normal 1xx/2xx slide
- ton.effTyp = 7 - ton.effTyp;
- }
- }
- break;
-
- case 7: // G
- {
- ton.effTyp = 0x03;
-
- // fix illegal slides (to new instruments)
- if (ton.instr != 0 && ton.instr != s3mLastGInstr[ii])
- ton.instr = s3mLastGInstr[ii];
- }
- break;
-
- case 11: // K
- {
- if (ton.eff > 0xF0) // fine slide up
- {
- ton.effTyp = 0xE;
- ton.eff = 0xB0 | (ton.eff & 0xF);
-
- // if volume column is unoccupied, set to vibrato
- if (ton.vol == 0)
- ton.vol = 0xB0;
- }
- else if ((ton.eff & 0x0F) == 0x0F && (ton.eff & 0xF0) > 0) // fine slide down
- {
- ton.effTyp = 0xE;
- ton.eff = 0xA0 | (ton.eff >> 4);
-
- // if volume column is unoccupied, set to vibrato
- if (ton.vol == 0)
- ton.vol = 0xB0;
- }
- else
- {
- ton.effTyp = 0x6;
- if (ton.eff & 0x0F) // on D/K, last nybble has first priority in ST3
- ton.eff &= 0x0F;
- }
- }
- break;
-
- case 8: ton.effTyp = 0x04; break; // H
- case 9: ton.effTyp = 0x1D; break; // I
- case 10: ton.effTyp = 0x00; break; // J
- case 12: ton.effTyp = 0x05; break; // L
- case 15: ton.effTyp = 0x09; break; // O
- case 17: ton.effTyp = 0x1B; break; // Q
- case 18: ton.effTyp = 0x07; break; // R
-
- case 19: // S
- {
- ton.effTyp = 0xE;
- tmp = ton.eff >> 4;
- ton.eff &= 0x0F;
-
- if (tmp == 0x1) ton.eff |= 0x30;
- else if (tmp == 0x2) ton.eff |= 0x50;
- else if (tmp == 0x3) ton.eff |= 0x40;
- else if (tmp == 0x4) ton.eff |= 0x70;
- // ignore S8x becuase it's not compatible with FT2 panning
- else if (tmp == 0xB) ton.eff |= 0x60;
- else if (tmp == 0xC) // Note Cut
- {
- ton.eff |= 0xC0;
- if (ton.eff == 0xC0)
- {
- // EC0 does nothing in ST3 but cuts voice in FT2, remove effect
- ton.effTyp = 0;
- ton.eff = 0;
- }
- }
- else if (tmp == 0xD) // Note Delay
- {
- ton.eff |= 0xD0;
- if (ton.ton == 0 || ton.ton == 97)
- {
- // EDx without a note does nothing in ST3 but retrigs in FT2, remove effect
- ton.effTyp = 0;
- ton.eff = 0;
- }
- else if (ton.eff == 0xD0)
- {
- // ED0 prevents note/smp/vol from updating in ST3, remove everything
- ton.ton = 0;
- ton.instr = 0;
- ton.vol = 0;
- ton.effTyp = 0;
- ton.eff = 0;
- }
- }
- else if (tmp == 0xE) ton.eff |= 0xE0;
- else if (tmp == 0xF) ton.eff |= 0xF0;
- else
- {
- ton.effTyp = 0;
- ton.eff = 0;
- }
- }
- break;
-
- case 20: // T
- {
- ton.effTyp = 0x0F;
- if (ton.eff < 0x21) // Txx with a value lower than 33 (0x21) does nothing in ST3, remove effect
- {
- ton.effTyp = 0;
- ton.eff = 0;
- }
- }
- break;
-
- case 22: // V
- {
- ton.effTyp = 0x10;
- if (ton.eff > 0x40)
- {
- // Vxx > 0x40 does nothing in ST3
- ton.effTyp = 0;
- ton.eff = 0;
- }
- }
- break;
-
- default:
- {
- ton.effTyp = 0;
- ton.eff = 0;
- }
- break;
- }
- }
-
- if (ton.instr != 0 && ton.effTyp != 0x3)
- s3mLastGInstr[ii] = ton.instr;
-
- if (ton.effTyp > 35)
- {
- ton.effTyp = 0;
- ton.eff = 0;
- }
-
- pattTmp[i][(kk * MAX_VOICES) + ii] = ton;
- }
- }
-
- if (tmpPatternEmpty((uint16_t)i))
- {
- if (pattTmp[i] != NULL)
- {
- free(pattTmp[i]);
- pattTmp[i] = NULL;
- }
- }
- }
- }
-
- // *** SAMPLES ***
-
- bool adlibInsWarn = false;
-
- memcpy(ptnOfs, ha, 512);
- for (i = 0; i < ai; i++)
- {
- fseek(f, ptnOfs[i] << 4, SEEK_SET);
-
- if (fread(&h_S3MInstr, 1, sizeof (h_S3MInstr), f) != sizeof (h_S3MInstr))
- {
- showMsg(0, "System message", "Not enough memory!");
- goto s3mLoadError;
- }
-
- // trim off spaces at end of name
- for (j = 21; j >= 0; j--)
- {
- if (h_S3MInstr.name[j] == ' ' || h_S3MInstr.name[j] == 0x1A)
- h_S3MInstr.name[j] = '\0';
- else
- break;
- }
-
- memcpy(songTmp.instrName[1+i], h_S3MInstr.name, 22);
- songTmp.instrName[1+i][22] = '\0';
-
- if (h_S3MInstr.typ == 2)
- {
- adlibInsWarn = true;
- }
- else if (h_S3MInstr.typ == 1)
- {
- if ((h_S3MInstr.flags & (255-1-2-4)) != 0 || h_S3MInstr.pack != 0)
- {
- showMsg(0, "System message", "Error loading .s3m: Incompatible module!");
- goto s3mLoadError;
- }
- else if (h_S3MInstr.memSeg > 0 && h_S3MInstr.len > 0)
- {
- if (!allocateTmpInstr((int16_t)(1 + i)))
- {
- showMsg(0, "System message", "Not enough memory!");
- goto s3mLoadError;
- }
-
- setNoEnvelope(instrTmp[1 + i]);
- s = &instrTmp[1+i]->samp[0];
-
- len = h_S3MInstr.len;
-
- bool hasLoop = h_S3MInstr.flags & 1;
- bool stereoSample = (h_S3MInstr.flags >> 1) & 1;
- bool is16Bit = (h_S3MInstr.flags >> 2) & 1;
-
- if (is16Bit) // 16-bit
- len <<= 1;
-
- if (stereoSample) // stereo
- len <<= 1;
-
- tmpSmp = (int8_t *)malloc(len + LOOP_FIX_LEN);
- if (tmpSmp == NULL)
- {
- showMsg(0, "System message", "Not enough memory!");
- goto s3mLoadError;
- }
-
- int8_t *newPtr = tmpSmp + SMP_DAT_OFFSET;
-
- memcpy(s->name, h_S3MInstr.name, 21);
-
- if (h_S3MInstr.c2Spd > 65535) // ST3 (and OpenMPT) does this
- h_S3MInstr.c2Spd = 65535;
-
- tuneSample(s, h_S3MInstr.c2Spd, false);
-
- s->len = h_S3MInstr.len;
- s->vol = h_S3MInstr.vol;
- s->repS = h_S3MInstr.repS;
- s->repL = h_S3MInstr.repE - h_S3MInstr.repS;
-
- // non-FT2: fixes "miracle man.s3m"
- if ((h_S3MInstr.memSeg<<4)+s->len > (int32_t)dataLength)
- s->len = dataLength - (h_S3MInstr.memSeg << 4);
-
- if (s->repL <= 2 || s->repS+s->repL > s->len)
- {
- s->repS = 0;
- s->repL = 0;
- hasLoop = false;
- }
-
- if (s->repL == 0)
- hasLoop = false;
-
- s->typ = hasLoop + (is16Bit << 4);
-
- if (s->vol > 64)
- s->vol = 64;
-
- s->pan = 128;
-
- fseek(f, h_S3MInstr.memSeg << 4, SEEK_SET);
-
- // non-FT2: fixes "miracle man.s3m"
- if ((h_S3MInstr.memSeg<<4)+len > (int32_t)dataLength)
- len = dataLength - (h_S3MInstr.memSeg << 4);
-
- if (ver == 1)
- {
- fseek(f, len, SEEK_CUR); // sample not supported
- }
- else
- {
- if (fread(newPtr, len, 1, f) != 1)
- {
- free(tmpSmp);
- showMsg(0, "System message", "General I/O error during loading! Is the file in use?");
- goto s3mLoadError;
- }
-
- if (is16Bit)
- {
- conv16BitSample(newPtr, len, stereoSample);
-
- s->origPek = tmpSmp;
- s->pek = s->origPek + SMP_DAT_OFFSET;
-
- s->len <<= 1;
- s->repS <<= 1;
- s->repL <<= 1;
- }
- else
- {
- conv8BitSample(newPtr, len, stereoSample);
-
- s->origPek = tmpSmp;
- s->pek = s->origPek + SMP_DAT_OFFSET;
- }
-
- // if stereo sample: reduce memory footprint after sample was downmixed to mono
- if (stereoSample)
- {
- newPtr = (int8_t *)realloc(s->origPek, s->len + LOOP_FIX_LEN);
- if (newPtr != NULL)
- {
- s->origPek = newPtr;
- s->pek = s->origPek + SMP_DAT_OFFSET;
- }
- }
-
- fixSample(s);
- }
- }
- }
- }
-
- fclose(f);
-
- songTmp.antChn = countS3MChannels(ap);
-
- if (adlibInsWarn)
- showMsg(0, "System message", "Warning: The module contains unsupported AdLib instruments!");
-
- if (!(config.dontShowAgainFlags & DONT_SHOW_S3M_LOAD_WARNING_FLAG))
- showMsg(6, "System message", "Warning: S3M channel panning is ignored because it's not compatible with FT2.");
-
- moduleLoaded = true;
- return true;
-
-s3mLoadError:
- fclose(f);
- freeTmpModule();
- moduleFailedToLoad = true;
- return false;
+ return FORMAT_UNKNOWN;
}
-bool doLoadMusic(bool externalThreadFlag)
+static bool doLoadMusic(bool externalThreadFlag)
{
- char tmpText[128];
- int16_t k;
- uint16_t i;
- uint32_t filelength;
- songHeaderTyp h;
- FILE *f;
- int16_t (*showMsg)(int16_t, const char *, const char *);
+ // setup message box functions
+ loaderMsgBox = externalThreadFlag ? myLoaderMsgBoxThreadSafe : myLoaderMsgBox;
+ loaderSysReq = externalThreadFlag ? okBoxThreadSafe : okBox;
- showMsg = externalThreadFlag ? okBoxThreadSafe : okBox;
-
- linearFreqTable = false;
-
if (editor.tmpFilenameU == NULL)
{
- showMsg(0, "System message", "Generic memory fault during loading!");
- moduleFailedToLoad = true;
- return false;
+ loaderMsgBox("Generic memory fault during loading!");
+ goto loadError;
}
- f = UNICHAR_FOPEN(editor.tmpFilenameU, "rb");
+ FILE *f = UNICHAR_FOPEN(editor.tmpFilenameU, "rb");
if (f == NULL)
{
- showMsg(0, "System message", "General I/O error during loading! Is the file in use? Does it exist?");
- moduleFailedToLoad = true;
- return false;
+ loaderMsgBox("General I/O error during loading! Is the file in use? Does it exist?");
+ goto loadError;
}
+ int8_t format = detectModule(f);
fseek(f, 0, SEEK_END);
- filelength = ftell(f);
- rewind(f);
+ uint32_t filesize = ftell(f);
- // start loading
- if (fread(&h, 1, sizeof (h), f) != sizeof (h))
- return loadMusicS3M(f, filelength, externalThreadFlag); // not a .xm file, try to load as .s3m
-
- if (memcmp(h.sig, "Extended Module: ", 17))
- return loadMusicS3M(f, filelength, externalThreadFlag); // not a .xm file, try to load as .s3m
-
- loadedFormat = FORMAT_XM;
-
- if (h.ver < 0x0102 || h.ver > 0x0104)
+ rewind(f);
+ switch (format)
{
- fclose(f);
+ case FORMAT_XM: moduleLoaded = loadXM(f, filesize); break;
+ case FORMAT_S3M: moduleLoaded = loadS3M(f, filesize); break;
+ case FORMAT_STM: moduleLoaded = loadSTM(f, filesize); break;
+ case FORMAT_MOD: moduleLoaded = loadMOD(f, filesize); break;
+ case FORMAT_POSSIBLY_STK: moduleLoaded = loadSTK(f, filesize); break;
+ case FORMAT_DIGI: moduleLoaded = loadDIGI(f, filesize); break;
- const int32_t major = (h.ver >> 8) & 0x0F;
- const int32_t minor = h.ver & 0xFF;
-
- sprintf(tmpText, "Error loading XM: Unsupported file version (v%01X.%02X).", major, minor);
- showMsg(0, "System message", tmpText);
-
- moduleFailedToLoad = true;
- return false;
+ default:
+ loaderMsgBox("This file is not a supported module!");
+ break;
}
-
- if (h.len > MAX_ORDERS)
- {
- showMsg(0, "System message", "Error loading XM: The song has more than 256 orders!");
- goto xmLoadError;
- }
-
- if (h.antPtn > MAX_PATTERNS)
- {
- showMsg(0, "System message", "Error loading XM: The song has more than 256 patterns!");
- goto xmLoadError;
- }
-
- if (h.antChn == 0)
- {
- showMsg(0, "System message", "Error loading XM: This file is corrupt.");
- goto xmLoadError;
- }
-
- if (h.antInstrs > 256) // if >128 instruments, we fake-load up to 128 extra instruments and discard them
- {
- showMsg(0, "System message", "Error loading XM: This file is corrupt.");
- goto xmLoadError;
- }
-
- fseek(f, 60 + h.headerSize, SEEK_SET);
- if (filelength != 336 && feof(f)) // 336 in length at this point = empty XM
- {
- showMsg(0, "System message", "Error loading XM: The module is empty!");
- goto xmLoadError;
- }
-
- // trim off spaces at end of name
- for (k = 19; k >= 0; k--)
- {
- if (h.name[k] == ' ' || h.name[k] == 0x1A)
- h.name[k] = '\0';
- else
- break;
- }
-
- memcpy(songTmp.name, h.name, 20);
- songTmp.name[20] = '\0';
-
- songTmp.len = h.len;
- songTmp.repS = h.repS;
- songTmp.antChn = (uint8_t)h.antChn;
- songTmp.speed = h.defSpeed;
- songTmp.tempo = h.defTempo;
- songTmp.ver = h.ver;
- linearFreqTable = h.flags & 1;
-
- songTmp.speed = CLAMP(songTmp.speed, 1, 999);
- songTmp.tempo = CLAMP(songTmp.tempo, 1, 99);
-
- songTmp.initialTempo = songTmp.tempo;
-
- if (songTmp.globVol > 64)
- songTmp.globVol = 64;
-
- if (songTmp.len == 0)
- songTmp.len = 1; // songTmp.songTab is already empty
- else
- memcpy(songTmp.songTab, h.songTab, songTmp.len);
-
- // some strange XMs have the order list padded with 0xFF, remove them!
- for (int16_t j = 255; j >= 0; j--)
- {
- if (songTmp.songTab[j] != 0xFF)
- break;
-
- if (songTmp.len > j)
- songTmp.len = j;
- }
-
- // even though XM supports 256 orders, FT2 supports only 255...
- if (songTmp.len > 0xFF)
- songTmp.len = 0xFF;
-
- if (songTmp.ver < 0x0104)
- {
- // XM v1.02 and XM v1.03
-
- for (i = 1; i <= h.antInstrs; i++)
- {
- if (!loadInstrHeader(f, i, externalThreadFlag))
- goto xmLoadError;
- }
-
- if (!loadPatterns(f, h.antPtn, externalThreadFlag))
- goto xmLoadError;
-
- for (i = 1; i <= h.antInstrs; i++)
- {
- if (!loadInstrSample(f, i, externalThreadFlag))
- goto xmLoadError;
- }
- }
- else
- {
- // XM v1.04 (latest version)
-
- if (!loadPatterns(f, h.antPtn, externalThreadFlag))
- goto xmLoadError;
-
- for (i = 1; i <= h.antInstrs; i++)
- {
- if (!loadInstrHeader(f, i, externalThreadFlag))
- goto xmLoadError;
-
- if (!loadInstrSample(f, i, externalThreadFlag))
- goto xmLoadError;
- }
- }
-
- // if we temporarily loaded more than 128 instruments, clear the extra allocated memory
- if (h.antInstrs > MAX_INST)
- {
- for (i = MAX_INST+1; i <= h.antInstrs; i++)
- {
- if (instrTmp[i] != NULL)
- {
- free(instrTmp[i]);
- instrTmp[i] = NULL;
- }
- }
- }
-
fclose(f);
- /* We support loading XMs with up to 32 samples per instrument (ModPlug/OpenMPT),
- ** but only the first 16 will be loaded. Now make sure we set the number of samples
- ** back to max 16 in the headers before loading is done.
- */
- bool instrHasMoreThan16Samples = false;
- for (i = 1; i <= MAX_INST; i++)
- {
- if (instrTmp[i] != NULL && instrTmp[i]->antSamp > MAX_SMP_PER_INST)
- {
- instrHasMoreThan16Samples = true;
- instrTmp[i]->antSamp = MAX_SMP_PER_INST;
- }
- }
+ if (!moduleLoaded)
+ goto loadError;
- if (songTmp.antChn > MAX_VOICES)
- {
- songTmp.antChn = MAX_VOICES;
- showMsg(0, "System message", "Warning: This XM contains >32 channels. The extra channels will be discarded!");
- }
-
- if (h.antInstrs > MAX_INST)
- showMsg(0, "System message", "Warning: This XM contains >128 instruments. The extra instruments will be discarded!");
-
- if (instrHasMoreThan16Samples)
- showMsg(0, "System message", "Warning: This XM contains instrument(s) with >16 samples. The extra samples will be discarded!");
-
moduleLoaded = true;
return true;
-xmLoadError:
- fclose(f);
+loadError:
freeTmpModule();
moduleFailedToLoad = true;
return false;
}
+static void clearTmpModule(void)
+{
+ memset(pattTmp, 0, sizeof (pattTmp));
+ memset(instrTmp, 0, sizeof (instrTmp));
+ memset(&songTmp, 0, sizeof (songTmp));
+
+ for (uint32_t i = 0; i < MAX_PATTERNS; i++)
+ pattLensTmp[i] = 64;
+}
+
static int32_t SDLCALL loadMusicThread(void *ptr)
{
return doLoadMusic(true);
-
(void)ptr;
}
void loadMusic(UNICHAR *filenameU)
{
- if (musicIsLoading)
+ if (musicIsLoading || filenameU == NULL)
return;
mouseAnimOn();
@@ -1882,20 +230,10 @@
musicIsLoading = true;
moduleLoaded = false;
moduleFailedToLoad = false;
- loadedFormat = FORMAT_NONE;
+ clearTmpModule(); // clear stuff from last loading session (very important)
UNICHAR_STRCPY(editor.tmpFilenameU, filenameU);
- // clear deprecated pointers from possible last loading session (super important)
- memset(pattTmp, 0, sizeof (pattTmp));
- memset(instrTmp, 0, sizeof (instrTmp));
-
- // prevent stuck instrument names from previous module
- memset(&songTmp, 0, sizeof (songTmp));
-
- for (uint32_t i = 0; i < MAX_PATTERNS; i++)
- pattLensTmp[i] = 64;
-
thread = SDL_CreateThread(loadMusicThread, NULL, NULL);
if (thread == NULL)
{
@@ -1910,19 +248,10 @@
bool loadMusicUnthreaded(UNICHAR *filenameU, bool autoPlay)
{
- if (filenameU == NULL || editor.tmpFilenameU == NULL)
+ if (filenameU == NULL)
return false;
- // clear deprecated pointers from possible last loading session (super important)
- memset(pattTmp, 0, sizeof (pattTmp));
- memset(instrTmp, 0, sizeof (instrTmp));
-
- // prevent stuck instrument names from previous module
- memset(&songTmp, 0, sizeof (songTmp));
-
- for (uint32_t i = 0; i < MAX_PATTERNS; i++)
- pattLensTmp[i] = 64;
-
+ clearTmpModule(); // clear stuff from last loading session (very important)
UNICHAR_STRCPY(editor.tmpFilenameU, filenameU);
editor.loadMusicEvent = EVENT_NONE;
@@ -1940,6 +269,36 @@
return false;
}
+bool allocateTmpPatt(int32_t nr, uint16_t rows)
+{
+ pattTmp[nr] = (tonTyp *)calloc((MAX_PATT_LEN * TRACK_WIDTH) + 16, 1);
+ if (pattTmp[nr] == NULL)
+ return false;
+
+ pattLensTmp[nr] = rows;
+ return true;
+}
+
+bool allocateTmpInstr(int16_t nr)
+{
+ if (instrTmp[nr] != NULL)
+ return false; // already allocated
+
+ instrTyp *p = (instrTyp *)calloc(1, sizeof (instrTyp));
+ if (p == NULL)
+ return false;
+
+ sampleTyp *s = p->samp;
+ for (int32_t i = 0; i < MAX_SMP_PER_INST; i++, s++)
+ {
+ s->pan = 128;
+ s->vol = 64;
+ }
+
+ instrTmp[nr] = p;
+ return true;
+}
+
static void freeTmpModule(void) // called on module load error
{
// free all patterns
@@ -1970,405 +329,8 @@
}
}
-static bool loadInstrHeader(FILE *f, uint16_t i, bool externalThreadFlag)
+bool tmpPatternEmpty(uint16_t nr)
{
- int8_t k;
- uint8_t j;
- uint32_t readSize;
- instrHeaderTyp ih;
- instrTyp *ins;
- sampleHeaderTyp *src;
- sampleTyp *s;
- int16_t (*showMsg)(int16_t, const char *, const char *);
-
- showMsg = externalThreadFlag ? okBoxThreadSafe : okBox;
-
- memset(extraSampleLengths, 0, sizeof (extraSampleLengths));
- memset(&ih, 0, sizeof (ih));
- fread(&ih.instrSize, 4, 1, f);
-
- readSize = ih.instrSize;
-
- // yes, some XMs can have a header size of 0, and it usually means 263 bytes (INSTR_HEADER_SIZE)
- if (readSize == 0 || readSize > INSTR_HEADER_SIZE)
- readSize = INSTR_HEADER_SIZE;
-
- if (readSize < 4)
- {
- showMsg(0, "System message", "Error loading XM: This file is corrupt (or not supported)!");
- return false;
- }
-
- // load instrument data into temp buffer
- fread(ih.name, readSize-4, 1, f); // -4 = skip ih.instrSize
-
- // FT2 bugfix: skip instrument header data if instrSize is above INSTR_HEADER_SIZE
- if (ih.instrSize > INSTR_HEADER_SIZE)
- fseek(f, ih.instrSize-INSTR_HEADER_SIZE, SEEK_CUR);
-
- if (ih.antSamp < 0 || ih.antSamp > 32)
- {
- showMsg(0, "System message", "Error loading XM: This file is corrupt (or not supported)!");
- return false;
- }
-
- if (i <= MAX_INST) // copy over instrument names
- {
- // trim off spaces at end of name
- for (k = 21; k >= 0; k--)
- {
- if (ih.name[k] == ' ' || ih.name[k] == 0x1A)
- ih.name[k] = '\0';
- else
- break;
- }
-
- memcpy(songTmp.instrName[i], ih.name, 22);
- songTmp.instrName[i][22] = '\0';
- }
-
- if (ih.antSamp > 0)
- {
- if (!allocateTmpInstr(i))
- {
- showMsg(0, "System message", "Not enough memory!");
- return false;
- }
-
- // copy instrument header elements to our instrument struct
-
- ins = instrTmp[i];
- memcpy(ins->ta, ih.ta, 96);
- memcpy(ins->envVP, ih.envVP, 12*2*sizeof(int16_t));
- memcpy(ins->envPP, ih.envPP, 12*2*sizeof(int16_t));
- ins->envVPAnt = ih.envVPAnt;
- ins->envPPAnt = ih.envPPAnt;
- ins->envVSust = ih.envVSust;
- ins->envVRepS = ih.envVRepS;
- ins->envVRepE = ih.envVRepE;
- ins->envPSust = ih.envPSust;
- ins->envPRepS = ih.envPRepS;
- ins->envPRepE = ih.envPRepE;
- ins->envVTyp = ih.envVTyp;
- ins->envPTyp = ih.envPTyp;
- ins->vibTyp = ih.vibTyp;
- ins->vibSweep = ih.vibSweep;
- ins->vibDepth = ih.vibDepth;
- ins->vibRate = ih.vibRate;
- ins->fadeOut = ih.fadeOut;
- ins->midiOn = (ih.midiOn == 1) ? true : false;
- ins->midiChannel = ih.midiChannel;
- ins->midiProgram = ih.midiProgram;
- ins->midiBend = ih.midiBend;
- ins->mute = (ih.mute == 1) ? true : false;
- ins->antSamp = ih.antSamp; // used in loadInstrSample()
-
- // sanitize stuff for broken/unsupported instruments
- ins->midiProgram = CLAMP(ins->midiProgram, 0, 127);
- ins->midiBend = CLAMP(ins->midiBend, 0, 36);
-
- if (ins->midiChannel > 15) ins->midiChannel = 15;
- if (ins->vibDepth > 0x0F) ins->vibDepth = 0x0F;
- if (ins->vibRate > 0x3F) ins->vibRate = 0x3F;
- if (ins->vibTyp > 3) ins->vibTyp = 0;
-
- for (j = 0; j < 96; j++)
- {
- if (ins->ta[j] >= MAX_SMP_PER_INST)
- ins->ta[j] = MAX_SMP_PER_INST-1;
- }
-
- if (ins->envVPAnt > 12) ins->envVPAnt = 12;
- if (ins->envVRepS > 11) ins->envVRepS = 11;
- if (ins->envVRepE > 11) ins->envVRepE = 11;
- if (ins->envVSust > 11) ins->envVSust = 11;
- if (ins->envPPAnt > 12) ins->envPPAnt = 12;
- if (ins->envPRepS > 11) ins->envPRepS = 11;
- if (ins->envPRepE > 11) ins->envPRepE = 11;
- if (ins->envPSust > 11) ins->envPSust = 11;
-
- for (j = 0; j < 12; j++)
- {
- if ((uint16_t)ins->envVP[j][0] > 32767) ins->envVP[j][0] = 32767;
- if ((uint16_t)ins->envPP[j][0] > 32767) ins->envPP[j][0] = 32767;
- if ((uint16_t)ins->envVP[j][1] > 64) ins->envVP[j][1] = 64;
- if ((uint16_t)ins->envPP[j][1] > 63) ins->envPP[j][1] = 63;
- }
-
- int32_t sampleHeadersToRead = ih.antSamp;
- if (sampleHeadersToRead > MAX_SMP_PER_INST)
- sampleHeadersToRead = MAX_SMP_PER_INST;
-
- if (fread(ih.samp, sampleHeadersToRead * sizeof (sampleHeaderTyp), 1, f) != 1)
- {
- showMsg(0, "System message", "General I/O error during loading!");
- return false;
- }
-
- // if instrument contains more than 16 sample headers (unsupported), skip them
- if (ih.antSamp > MAX_SMP_PER_INST) // can only be 0..32 at this point
- {
- const int32_t samplesToSkip = ih.antSamp-MAX_SMP_PER_INST;
- for (j = 0; j < samplesToSkip; j++)
- {
- fread(&extraSampleLengths[j], 4, 1, f); // used for skipping data in loadInstrSample()
- fseek(f, sizeof (sampleHeaderTyp)-4, SEEK_CUR);
- }
- }
-
- for (j = 0; j < sampleHeadersToRead; j++)
- {
- s = &instrTmp[i]->samp[j];
- src = &ih.samp[j];
-
- // copy sample header elements to our sample struct
-
- s->len = src->len;
- s->repS = src->repS;
- s->repL = src->repL;
- s->vol = src->vol;
- s->fine = src->fine;
- s->typ = src->typ;
- s->pan = src->pan;
- s->relTon = src->relTon;
- memcpy(s->name, src->name, 22);
- s->name[22] = '\0';
-
- // dst->pek is set up later
-
- // trim off spaces at end of name
- for (k = 21; k >= 0; k--)
- {
- if (s->name[k] == ' ' || s->name[k] == 0x1A)
- s->name[k] = '\0';
- else
- break;
- }
-
- // sanitize stuff broken/unsupported samples
- if (s->vol > 64)
- s->vol = 64;
-
- s->relTon = CLAMP(s->relTon, -48, 71);
- }
- }
-
- return true;
-}
-
-void checkSampleRepeat(sampleTyp *s)
-{
- if (s->repS < 0) s->repS = 0;
- if (s->repL < 0) s->repL = 0;
- if (s->repS > s->len) s->repS = s->len;
- if (s->repS+s->repL > s->len) s->repL = s->len - s->repS;
- if (s->repL == 0) s->typ &= ~3; // non-FT2 fix: force loop off if looplen is 0
-}
-
-static bool loadInstrSample(FILE *f, uint16_t i, bool externalThreadFlag)
-{
- int16_t (*showMsg)(int16_t, const char *, const char *);
-
- showMsg = externalThreadFlag ? okBoxThreadSafe : okBox;
-
- if (instrTmp[i] == NULL)
- return true; // empty instrument, let's just pretend it got loaded successfully
-
- uint16_t k = instrTmp[i]->antSamp;
- if (k > MAX_SMP_PER_INST)
- k = MAX_SMP_PER_INST;
-
- sampleTyp *s = instrTmp[i]->samp;
-
- if (i > MAX_INST) // insNum > 128, just skip sample data
- {
- for (uint16_t j = 0; j < k; j++, s++)
- {
- if (s->len > 0)
- fseek(f, s->len, SEEK_CUR);
- }
- }
- else
- {
- for (uint16_t j = 0; j < k; j++, s++)
- {
- // if a sample has both forward loop and pingpong loop set, make it pingpong loop only (FT2 mixer behavior)
- if ((s->typ & 3) == 3)
- s->typ &= 0xFE;
-
- int32_t l = s->len;
- if (l <= 0)
- {
- s->pek = NULL;
- s->len = 0;
- s->repL = 0;
- s->repS = 0;
-
- if (s->typ & 32)
- s->typ &= ~32; // remove stereo flag
- }
- else
- {
- int32_t bytesToSkip = 0;
- if (l > MAX_SAMPLE_LEN)
- {
- bytesToSkip = l - MAX_SAMPLE_LEN;
- l = MAX_SAMPLE_LEN;
- }
-
- s->pek = NULL;
- s->origPek = (int8_t *)malloc(l + LOOP_FIX_LEN);
- if (s->origPek == NULL)
- {
- showMsg(0, "System message", "Not enough memory!");
- return false;
- }
-
- s->pek = s->origPek + SMP_DAT_OFFSET;
-
- const int32_t bytesRead = (int32_t)fread(s->pek, 1, l, f);
- if (bytesRead < l)
- {
- const int32_t bytesToClear = l - bytesRead;
- memset(&s->pek[bytesRead], 0, bytesToClear);
- }
-
- if (bytesToSkip > 0)
- fseek(f, bytesToSkip, SEEK_CUR);
-
- delta2Samp(s->pek, l, s->typ);
-
- if (s->typ & 32) // stereo sample - already downmixed to mono in delta2samp()
- {
- s->typ &= ~32; // remove stereo flag
-
- s->len >>= 1;
- s->repL >>= 1;
- s->repS >>= 1;
-
- int8_t *newPtr = (int8_t *)realloc(s->origPek, s->len + LOOP_FIX_LEN);
- if (newPtr != NULL)
- {
- s->origPek = newPtr;
- s->pek = s->origPek + SMP_DAT_OFFSET;
- }
- }
- }
-
- // NON-FT2 FIX: Align to 2-byte if 16-bit sample
- if (s->typ & 16)
- {
- s->repL &= 0xFFFFFFFE;
- s->repS &= 0xFFFFFFFE;
- s->len &= 0xFFFFFFFE;
- }
-
- checkSampleRepeat(s);
- fixSample(s);
- }
- }
-
- if (instrTmp[i]->antSamp > MAX_SMP_PER_INST)
- {
- const int32_t samplesToSkip = instrTmp[i]->antSamp-MAX_SMP_PER_INST;
- for (i = 0; i < samplesToSkip; i++)
- {
- if (extraSampleLengths[i] > 0)
- fseek(f, extraSampleLengths[i], SEEK_CUR);
- }
- }
-
- return true;
-}
-
-void unpackPatt(uint8_t *dst, uint8_t *src, uint16_t len, int32_t antChn)
-{
- int32_t j;
-
- if (dst == NULL)
- return;
-
- const int32_t srcEnd = len * (sizeof (tonTyp) * antChn);
- int32_t srcIdx = 0;
-
- int32_t numChannels = antChn;
- if (numChannels > MAX_VOICES)
- numChannels = MAX_VOICES;
-
- const int32_t pitch = sizeof (tonTyp) * (MAX_VOICES - antChn);
- for (int32_t i = 0; i < len; i++)
- {
- for (j = 0; j < numChannels; j++)
- {
- if (srcIdx >= srcEnd)
- return; // error!
-
- const uint8_t note = *src++;
- if (note & 0x80)
- {
- *dst++ = (note & 0x01) ? *src++ : 0;
- *dst++ = (note & 0x02) ? *src++ : 0;
- *dst++ = (note & 0x04) ? *src++ : 0;
- *dst++ = (note & 0x08) ? *src++ : 0;
- *dst++ = (note & 0x10) ? *src++ : 0;
- }
- else
- {
- *dst++ = note;
- *dst++ = *src++;
- *dst++ = *src++;
- *dst++ = *src++;
- *dst++ = *src++;
- }
-
- // if note is overflowing (>97), remove it
- if (*(dst-5) > 97)
- *(dst-5) = 0;
-
- // non-FT2 security fix: if effect is above 35 (Z), clear effect and parameter
- if (*(dst-2) > 35)
- {
- *(dst-2) = 0;
- *(dst-1) = 0;
- }
-
- srcIdx += sizeof (tonTyp);
- }
-
- // if more than 32 channels, skip rest of the channels for this row
- for (; j < antChn; j++)
- {
- if (srcIdx >= srcEnd)
- return; // error!
-
- const uint8_t note = *src++;
- if (note & 0x80)
- {
- if (note & 0x01) src++;
- if (note & 0x02) src++;
- if (note & 0x04) src++;
- if (note & 0x08) src++;
- if (note & 0x10) src++;
- }
- else
- {
- src++;
- src++;
- src++;
- src++;
- }
-
- srcIdx += sizeof (tonTyp);
- }
-
- // if song has <32 channels, align pointer to next row (skip unused channels)
- if (antChn < MAX_VOICES)
- dst += pitch;
- }
-}
-
-static bool tmpPatternEmpty(uint16_t nr)
-{
if (pattTmp[nr] == NULL)
return true;
@@ -2396,97 +358,6 @@
memset(ptr, 0, width);
}
-static bool loadPatterns(FILE *f, uint16_t antPtn, bool externalThreadFlag)
-{
- uint8_t tmpLen;
- patternHeaderTyp ph;
- int16_t (*showMsg)(int16_t, const char *, const char *);
-
- showMsg = externalThreadFlag ? okBoxThreadSafe : okBox;
-
- bool pattLenWarn = false;
- for (uint16_t i = 0; i < antPtn; i++)
- {
- if (fread(&ph.patternHeaderSize, 4, 1, f) != 1)
- goto pattCorrupt;
-
- if (fread(&ph.typ, 1, 1, f) != 1)
- goto pattCorrupt;
-
- ph.pattLen = 0;
- if (songTmp.ver == 0x0102)
- {
- if (fread(&tmpLen, 1, 1, f) != 1)
- goto pattCorrupt;
-
- if (fread(&ph.dataLen, 2, 1, f) != 1)
- goto pattCorrupt;
-
- ph.pattLen = tmpLen + 1; // +1 in v1.02
-
- if (ph.patternHeaderSize > 8)
- fseek(f, ph.patternHeaderSize - 8, SEEK_CUR);
- }
- else
- {
- if (fread(&ph.pattLen, 2, 1, f) != 1)
- goto pattCorrupt;
-
- if (fread(&ph.dataLen, 2, 1, f) != 1)
- goto pattCorrupt;
-
- if (ph.patternHeaderSize > 9)
- fseek(f, ph.patternHeaderSize - 9, SEEK_CUR);
- }
-
- if (feof(f))
- goto pattCorrupt;
-
- pattLensTmp[i] = ph.pattLen;
- if (pattLensTmp[i] > MAX_PATT_LEN)
- {
- pattLensTmp[i] = MAX_PATT_LEN;
- pattLenWarn = true;
- }
-
- if (ph.dataLen > 0)
- {
- pattTmp[i] = (tonTyp *)calloc((MAX_PATT_LEN * TRACK_WIDTH) + 16, 1);
- if (pattTmp[i] == NULL)
- {
- showMsg(0, "System message", "Not enough memory!");
- return false;
- }
-
- if (fread(packedPattData, 1, ph.dataLen, f) != ph.dataLen)
- goto pattCorrupt;
-
- unpackPatt((uint8_t *)pattTmp[i], packedPattData, pattLensTmp[i], songTmp.antChn);
- clearUnusedChannels(pattTmp[i], pattLensTmp[i], songTmp.antChn);
- }
-
- if (tmpPatternEmpty(i))
- {
- if (pattTmp[i] != NULL)
- {
- free(pattTmp[i]);
- pattTmp[i] = NULL;
- }
-
- pattLensTmp[i] = 64;
- }
- }
-
- if (pattLenWarn)
- showMsg(0, "System message", "This module contains pattern(s) with a length above 256! They will be truncated.");
-
- return true;
-
-pattCorrupt:
- showMsg(0, "System message", "Error loading XM: This file is corrupt!");
- return false;
-}
-
// called from input/video thread after the module was done loading
static void setupLoadedModule(void)
{
@@ -2513,17 +384,29 @@
pattLens[i] = pattLensTmp[i];
}
+ // copy over song struct
+ memcpy(&song, &songTmp, sizeof (songTyp));
+ fixSongName();
+
// copy over new instruments (includes sample pointers)
for (int16_t i = 1; i <= MAX_INST; i++)
{
instr[i] = instrTmp[i];
- fixSampleName(i);
- }
+ fixInstrAndSampleNames(i);
- // copy over song struct
- memcpy(&song, &songTmp, sizeof (songTyp));
- fixSongName();
+ if (instr[i] != NULL)
+ {
+ for (int32_t j = 0; j < MAX_SMP_PER_INST; j++)
+ {
+ sampleTyp *s = &instr[i]->samp[j];
+ checkSampleRepeat(s);
+ if (s->pek != NULL)
+ fixSample(s); // prepare sample for branchless linear interpolation
+ }
+ }
+ }
+
// we are the owners of the allocated memory ptrs set by the loader thread now
// support non-even channel numbers
@@ -2555,10 +438,7 @@
editor.timer = song.timer;
editor.globalVol = song.globVol;
- if (loadedFormat == FORMAT_XM)
- setFrqTab(linearFreqTable);
- else
- setFrqTab(false);
+ setFrqTab(tmpLinearPeriodsFlag);
unlockMixerCallback();
@@ -2639,14 +519,9 @@
UNICHAR_CHDIR(editor.binaryPathU);
const int32_t filesize = getFileSize(filenameU);
- if (filesize == -1 || filesize >= 512L*1024*1024) // >=2GB or >=512MB
+ if (filesize == -1 || filesize >= 512L*1024*1024) // 1) >=2GB 2) >=512MB
{
okBox(0, "System message", "Error: The module is too big to be loaded!");
- /* This is not really true, but let's add this check to prevent accidentally
- ** passing really big files to the program. And how often do you really
- ** see a >=512MB .XM/.S3M module?
- */
-
free(filenameU);
UNICHAR_CHDIR(tmpPathU); // set old path back
return false;
@@ -2659,6 +534,64 @@
return result;
}
+static bool fileIsModule(UNICHAR *pathU)
+{
+ FILE *f = UNICHAR_FOPEN(pathU, "rb");
+ if (f == NULL)
+ return false;
+
+ int8_t modFormat = detectModule(f);
+ fclose(f);
+
+ /* If the module was not identified (possibly STK type),
+ ** check the file extension and handle it as a module only
+ ** if it starts with "mod."/"stk." or ends with ".mod"/".stk" (case insensitive).
+ */
+ if (modFormat == FORMAT_POSSIBLY_STK)
+ {
+ char *path = unicharToCp437(pathU, false);
+ if (path == NULL)
+ return false;
+
+ int32_t pathLen = (int32_t)strlen(path);
+
+ // get filename from path
+ int32_t i = pathLen;
+ while (i--)
+ {
+ if (path[i] == DIR_DELIMITER)
+ break;
+ }
+
+ char *filename = path;
+ if (i > 0)
+ filename += i + 1;
+
+ int32_t filenameLen = (int32_t)strlen(filename);
+ // --------------------------
+
+ if (filenameLen > 5)
+ {
+ if (!_strnicmp("mod.", filename, 4) || !_strnicmp("stk.", filename, 4))
+ {
+ free(path);
+ return true;
+ }
+
+ if (!_strnicmp(".mod", &filename[filenameLen-4], 4) || !_strnicmp(".stk", &filename[filenameLen-4], 4))
+ {
+ free(path);
+ return true;
+ }
+ }
+
+ free(path);
+ return false;
+ }
+
+ return (modFormat != FORMAT_UNKNOWN);
+}
+
void loadDroppedFile(char *fullPathUTF8, bool songModifiedCheck)
{
if (ui.sysReqShown || fullPathUTF8 == NULL)
@@ -2701,16 +634,12 @@
// pass UTF8 to these tests so that we can test file ending in ASCII/ANSI
- if (fileIsInstrument(fullPathUTF8))
+ if (fileIsInstr(fullPathU))
{
loadInstr(fullPathU);
}
- else if (fileIsSample(fullPathUTF8))
+ else if (fileIsModule(fullPathU))
{
- loadSample(fullPathU, editor.curSmp, false);
- }
- else
- {
SDL_RestoreWindow(video.window);
if (songModifiedCheck && song.isModified)
@@ -2728,6 +657,10 @@
editor.loadMusicEvent = EVENT_LOADMUSIC_DRAGNDROP;
loadMusic(fullPathU);
+ }
+ else
+ {
+ loadSample(fullPathU, editor.curSmp, false);
}
free(fullPathU);
--- a/src/ft2_module_loader.h
+++ b/src/ft2_module_loader.h
@@ -2,12 +2,24 @@
#include <stdint.h>
#include <stdbool.h>
+#include "ft2_header.h"
#include "ft2_unicode.h"
+bool tmpPatternEmpty(uint16_t nr);
+void clearUnusedChannels(tonTyp *p, int16_t pattLen, int32_t antChn);
+bool allocateTmpInstr(int16_t nr);
+bool allocateTmpPatt(int32_t nr, uint16_t rows);
void loadMusic(UNICHAR *filenameU);
bool loadMusicUnthreaded(UNICHAR *filenameU, bool autoPlay);
bool handleModuleLoadFromArg(int argc, char **argv);
void loadDroppedFile(char *fullPathUTF8, bool songModifiedCheck);
void handleLoadMusicEvents(void);
-void clearUnusedChannels(tonTyp *p, int16_t pattLen, int32_t antChn);
-void checkSampleRepeat(sampleTyp *s);
+
+// file extensions accepted by Disk Op. in module mode
+extern char *supportedModExtensions[];
+
+extern volatile bool tmpLinearPeriodsFlag;
+extern int16_t pattLensTmp[MAX_PATTERNS];
+extern tonTyp *pattTmp[MAX_PATTERNS];
+extern instrTyp *instrTmp[1+256];
+extern songTyp songTmp;
--- a/src/ft2_replayer.c
+++ b/src/ft2_replayer.c
@@ -27,9 +27,7 @@
** If something looks to be off, it probably isn't!
*/
-// non-FT2 precalced stuff (these are kinda big...)
-static double dPeriod2HzTab[65536], dLogTab[768], dExp2MulTab[32], dHz2MixDeltaMul;
-static uint32_t revMixDeltaTab[65536];
+static double dLogTab[768], dExp2MulTab[32];
static bool bxxOverflow;
static tonTyp nilPatternLine[MAX_VOICES];
@@ -49,41 +47,31 @@
tonTyp *patt[MAX_PATTERNS];
// ----------------------------------
-void fixSongName(void) // removes spaces from right side of song name
+void fixString(char *str, int32_t lastChrPos) // removes leading spaces and 0x1A chars
{
- for (int32_t i = 20; i >= 0; i--)
+ for (int32_t i = lastChrPos; i >= 0; i--)
{
- if (song.name[i] == ' ')
- song.name[i] = '\0';
- else
+ if (str[i] == ' ' || str[i] == 0x1A)
+ str[i] = '\0';
+ else if (str[i] != '\0')
break;
}
+ str[lastChrPos+1] = '\0';
}
-void fixSampleName(int16_t nr) // removes spaces from right side of ins/smp names
+void fixSongName(void)
{
- for (int32_t i = 21; i >= 0; i--)
- {
- if (song.instrName[nr][i] == ' ')
- song.instrName[nr][i] = '\0';
- else
- break;
- }
+ fixString(song.name, 19);
+}
+void fixInstrAndSampleNames(int16_t nr)
+{
+ fixString(song.instrName[nr], 21);
if (instr[nr] != NULL)
{
sampleTyp *s = instr[nr]->samp;
for (int32_t i = 0; i < MAX_SMP_PER_INST; i++, s++)
- {
- for (int16_t j = 21; j >= 0; j--)
- {
- if (s->name[j] == ' ')
- s->name[j] = '\0';
- else
- break;
- }
- s->name[22] = '\0'; // just in case (for tracker, not present in sample header when saving)
- }
+ fixString(s->name, 21);
}
}
@@ -130,7 +118,7 @@
#define MIN_PERIOD (0)
#define MAX_PERIOD (((10*12*16)-1)-1) /* -1 (because of bugged amigaPeriods table values) */
- double (*dGetHzFromPeriod)(int32_t) = linearPeriodsFlag ? &linearPeriod2Hz : &amigaPeriod2Hz;
+ double (*dGetHzFromPeriod)(int32_t) = linearPeriodsFlag ? dLinearPeriod2Hz : dAmigaPeriod2Hz;
const uint16_t *periodTab = linearPeriodsFlag ? linearPeriods : amigaPeriods;
if (midCFreq <= 0 || periodTab == NULL)
@@ -260,66 +248,32 @@
return i+1;
}
-double linearPeriod2Hz(int32_t period)
+double dLinearPeriod2Hz(int32_t period)
{
if (period == 0)
- return 0.0; // in FT2, a period of 0 gives 0Hz
+ return 0.0; // in FT2, a period of 0 results in 0Hz
- const uint16_t invPeriod = (uint16_t)(12 * 192 * 4) - (uint16_t)period; // this intentionally 16-bit-underflows to be accurate to FT2
+ const uint16_t invPeriod = (12 * 192 * 4) - (uint16_t)period; // intentionally underflows (uint16_t) to be FT2-accurate
const int32_t quotient = invPeriod / 768;
const int32_t remainder = invPeriod % 768;
- return dLogTab[remainder] * dExp2MulTab[(14-quotient) & 31]; // x = y >> ((14-octave) & 31)
+ return dLogTab[remainder] * dExp2MulTab[(14-quotient) & 31]; // x = y / 2^((14-quotient) & 31)
}
-double amigaPeriod2Hz(int32_t period)
+double dAmigaPeriod2Hz(int32_t period)
{
if (period == 0)
- return 0.0; // in FT2, a period of 0 gives 0Hz
+ return 0.0; // in FT2, a period of 0 results in 0Hz
- return (double)(8363*1712) / period;
+ return (double)(8363 * 1712) / period;
}
-static void calcPeriod2HzTable(void) // called every time "linear/amiga frequency" mode is changed
+double dPeriod2Hz(int32_t period)
{
- if (audio.linearPeriodsFlag)
- {
- // linear periods
- for (int32_t i = 0; i < 65536; i++)
- dPeriod2HzTab[i] = linearPeriod2Hz(i);
- }
- else
- {
- // Amiga periods
- for (int32_t i = 0; i < 65536; i++)
- dPeriod2HzTab[i] = amigaPeriod2Hz(i);
- }
+ return audio.linearPeriodsFlag ? dLinearPeriod2Hz(period) : dAmigaPeriod2Hz(period);
}
-/* Called every time "linear/amiga frequency" mode or audio frequency is changed.
-**
-** Used to replace a DIV with a MUL in the outside audio mixer loop. This can actually
-** be beneficial if you are playing VERY tightly looped samples, and/or if the CPU has
-** no DIV instruction (certain ARM CPUs, for instance).
-**
-** A bit hackish and extreme considering it's 65536*4 bytes long, but why not.
-*/
-void calcRevMixDeltaTable(void)
-{
- for (int32_t i = 0; i < 65536; i++)
- {
- const uint16_t period = (uint16_t)i;
- const uint64_t delta = getMixerDelta(period);
-
- uint32_t revDelta = UINT32_MAX;
- if (delta != 0)
- revDelta = (uint32_t)((UINT64_MAX / delta) >> 16); // MUST be truncated, not rounded!
-
- revMixDeltaTab[i] = revDelta;
- }
-}
-
-// returns *exact* FT2 C-4 voice rate (depending on finetune, relative note and Amiga/linear mode)
+// returns *exact* FT2 C-4 voice rate (depending on finetune, relative note and linear/Amiga period mode)
double getSampleC4Rate(sampleTyp *s)
{
int32_t note = (96/2) + s->relTon;
@@ -343,16 +297,14 @@
else
note2Period = amigaPeriods;
- calcPeriod2HzTable();
- calcRevMixDeltaTable();
-
resumeAudio();
- // update "frequency table" radiobutton, if it's shown
if (ui.configScreenShown && editor.currConfigScreen == CONFIG_SCREEN_IO_DEVICES)
{
- setConfigIORadioButtonStates();
+ // update "frequency table" radiobutton, if it's shown
+ setConfigIORadioButtonStates();
+ // update mid-C freq. in instr. editor (it can slightly differ between Amiga/linear)
if (ui.instEditorShown)
drawC4Rate();
}
@@ -452,7 +404,7 @@
if (audioFreq <= 0)
return;
- dHz2MixDeltaMul = (double)MIXER_FRAC_SCALE / audioFreq;
+ audio.dHz2MixDeltaMul = (double)MIXER_FRAC_SCALE / audioFreq;
audio.quickVolRampSamples = (int32_t)((audioFreq / 200.0) + 0.5); // rounded
audio.dRampQuickVolMul = 1.0 / audio.quickVolRampSamples;
@@ -481,35 +433,27 @@
}
}
-double dPeriod2Hz(uint16_t period) // uses LUT for fast operation
+int32_t getPianoKey(uint16_t period, int8_t finetune, int8_t relativeNote) // for piano in Instr. Ed.
{
- return dPeriod2HzTab[period];
-}
+ assert(note2Period != NULL);
-int64_t getMixerDelta(uint16_t period)
-{
- /* Precision has been tested for most extreme case (Amiga period 1, 44100Hz),
- ** and there is no precision loss using 64-bit double-precision here, even
- ** though we can get VERY big numbers.
- */
- return (int64_t)((dPeriod2Hz(period) * dHz2MixDeltaMul) + 0.5); // Hz -> rounded 32.32 fixed-point mixer delta
-}
+ if (period > note2Period[0])
+ return -1; // out of lower range on piano
-// used for calculating the max safe amount of samples to mix before entering inner mix loop
-uint32_t getRevMixerDelta(uint16_t period)
-{
- return revMixDeltaTab[period];
-}
+ if (audio.linearPeriodsFlag)
+ {
+ int32_t note = ((10*12*16*4+64) - (period + 16*2)) >> 2;
+ note -= ((int8_t)finetune >> 3) + 16;
+ note = ((note >> 4) + 1) - relativeNote;
-int32_t getPianoKey(uint16_t period, int8_t finetune, int8_t relativeNote) // for piano in Instr. Ed.
-{
- if (period > note2Period[0]) // don't show periods below C-0 (w/ lowest finetune) on piano
- return -1;
+ return note;
+ }
+ /* Amiga periods require a slower method...
+ ** This is not 100% accurate for all periods, but should be faster
+ ** than using log2() and floating-point arithmetics.
+ */
finetune = ((int8_t)finetune >> 3) + 16;
-
- // this is not 100% accurate for all periods, but should be faster than using log2() and floating-point arithmetics
-
int32_t hiPeriod = (10*12*16)+16;
int32_t loPeriod = 0;
@@ -1561,10 +1505,12 @@
dVol = 1.0;
ch->dFinalVol = dVol;
+ ch->finalVol = (uint8_t)(int32_t)((ch->dFinalVol * 255) + 0.5); // 0.0 .. 1.0 -> 0..255 rounded, used for visuals
}
else
{
ch->dFinalVol = 0.0;
+ ch->finalVol = 0;
}
// *** PANNING ENVELOPE ***
@@ -2865,8 +2811,6 @@
return false;
}
- calcPeriod2HzTable();
- calcRevMixDeltaTable();
calcPanningTable();
setPos(0, 0, true);
--- a/src/ft2_replayer.h
+++ b/src/ft2_replayer.h
@@ -100,17 +100,6 @@
#endif
songMODInstrHeaderTyp;
-typedef struct songMOD15HeaderTyp_t
-{
- char name[20];
- songMODInstrHeaderTyp instr[15];
- uint8_t len, repS, songTab[128];
-}
-#ifdef __GNUC__
-__attribute__ ((packed))
-#endif
-songMOD15HeaderTyp;
-
typedef struct songMOD31HeaderTyp_t
{
char name[20];
@@ -214,11 +203,12 @@
int16_t midiPitch;
uint16_t outPeriod, realPeriod, finalPeriod, tonTyp, wantPeriod, portaSpeed;
uint16_t envVCnt, envPCnt, eVibAmp, eVibSweep;
- uint16_t fadeOutAmp, fadeOutSpeed, midiVibDepth;
+ uint16_t fadeOutAmp, fadeOutSpeed, midiVibDepth;
int32_t envVIPValue, envPIPValue, envVAmp, envPAmp;
int32_t oldFinalPeriod, smpStartPos;
- double dFinalVol;
+ uint8_t finalVol; // 0..255 (for visuals)
+ double dFinalVol; // 0.0 .. 1.0 (for mixer)
sampleTyp *smpPtr;
instrTyp *instrPtr;
@@ -241,38 +231,48 @@
uint8_t ton, instr, vol, effTyp, eff;
} tonTyp;
+#ifdef _MSC_VER
+#pragma pack(push)
+#pragma pack(1)
+#endif
+
typedef struct syncedChannel_t // used for audio/video sync queue
{
- bool envSustainActive;
- int8_t fineTune, relTonNr;
- uint8_t status, sampleNr, instrNr;
- uint16_t finalPeriod;
- int32_t smpStartPos;
- double dFinalVol;
-} syncedChannel_t;
+ uint8_t status;
+ uint8_t pianoNoteNr;
+ uint8_t sampleNr, instrNr;
+ uint16_t smpStartPos;
+ uint8_t vol;
+ double dHz;
+}
+#ifdef __GNUC__
+__attribute__ ((packed))
+#endif
+syncedChannel_t;
+#ifdef _MSC_VER
+#pragma pack(pop)
+#endif
+
double getSampleC4Rate(sampleTyp *s);
void setNewSongPos(int32_t pos);
void resetReplayerState(void);
-void fixSongName(void); // removes spaces from right side of song name
-void fixSampleName(int16_t nr); // removes spaces from right side of ins/smp names
+void fixString(char *str, int32_t lastChrPos); // removes leading spaces and 0x1A chars
+void fixSongName(void);
+void fixInstrAndSampleNames(int16_t nr);
+
void calcReplayerVars(int32_t rate);
// used on external sample load and during sample loading in some module formats
void tuneSample(sampleTyp *s, const int32_t midCFreq, bool linearPeriodsFlag);
-void calcRevMixDeltaTable(void);
void calcReplayerLogTab(void);
-double linearPeriod2Hz(int32_t period);
-double amigaPeriod2Hz(int32_t period);
-
-double dPeriod2Hz(uint16_t period); // uses LUT for fast operation
-
-int64_t getMixerDelta(uint16_t period);
-uint32_t getRevMixerDelta(uint16_t period);
+double dLinearPeriod2Hz(int32_t period);
+double dAmigaPeriod2Hz(int32_t period);
+double dPeriod2Hz(int32_t period);
int32_t getPianoKey(uint16_t period, int8_t finetune, int8_t relativeNote); // for piano in Instr. Ed.
--- a/src/ft2_sample_ed.c
+++ b/src/ft2_sample_ed.c
@@ -47,6 +47,37 @@
// globals
int32_t smpEd_Rx1 = 0, smpEd_Rx2 = 0;
+// allocs sample with proper alignment and padding for branchless resampling interpolation
+bool allocateTmpSmpData(sampleTyp *s, int32_t length)
+{
+ s->origPek = (int8_t *)malloc(length + LOOP_FIX_LEN);
+ if (s->origPek == NULL)
+ {
+ s->pek = NULL;
+ return false;
+ }
+
+ s->pek = s->origPek + SMP_DAT_OFFSET;
+ return true;
+}
+
+// reallocs sample with proper alignment and padding for branchless resampling interpolation
+bool reallocateTmpSmpData(sampleTyp *s, int32_t length)
+{
+ if (s->origPek == NULL)
+ return allocateTmpSmpData(s, length);
+
+ s->origPek = (int8_t *)realloc(s->origPek, length + LOOP_FIX_LEN);
+ if (s->origPek == NULL)
+ {
+ s->pek = NULL;
+ return false;
+ }
+
+ s->pek = s->origPek + SMP_DAT_OFFSET;
+ return true;
+}
+
sampleTyp *getCurSample(void)
{
if (editor.curInstr == 0 || instr[editor.curInstr] == NULL)
@@ -53,6 +84,20 @@
return NULL;
return &instr[editor.curInstr]->samp[editor.curSmp];
+}
+
+void checkSampleRepeat(sampleTyp *s)
+{
+ if (s->repS < 0) s->repS = 0;
+ if (s->repL < 0) s->repL = 0;
+ if (s->repS > s->len) s->repS = s->len;
+ if (s->repS+s->repL > s->len) s->repL = s->len - s->repS;
+
+ if (s->repL == 0) // non-FT2 fix: disable loop if loop length is 0
+ {
+ s->repS = 0;
+ s->typ &= ~3;
+ }
}
// modifies samples before index 0, and after loop/end (for branchless mixer interpolation (kinda))
--- a/src/ft2_sample_ed.h
+++ b/src/ft2_sample_ed.h
@@ -7,7 +7,14 @@
#define SAMPLE_AREA_WIDTH 632
#define SAMPLE_AREA_Y_CENTER 250
+// allocs sample with proper alignment and padding for branchless resampling interpolation
+bool allocateTmpSmpData(sampleTyp *s, int32_t length);
+
+// reallocs sample with proper alignment and padding for branchless resampling interpolation
+bool reallocateTmpSmpData(sampleTyp *s, int32_t length);
+
sampleTyp *getCurSample(void);
+void checkSampleRepeat(sampleTyp *s);
void fixSample(sampleTyp *s); // modifies samples before index 0, and after loop/end (for branchless mixer interpolation)
void restoreSample(sampleTyp *s); // restores samples after loop/end
void clearSample(void);
--- a/src/ft2_sample_loader.c
+++ b/src/ft2_sample_loader.c
@@ -16,943 +16,124 @@
#include "ft2_diskop.h"
#include "ft2_structs.h"
-/* All of these routines were written from scratch and were not present
-** in original FT2.
-*/
+bool loadAIFF(FILE *f, uint32_t filesize);
+bool loadIFF(FILE *f, uint32_t filesize);
+bool loadRAW(FILE *f, uint32_t filesize);
+bool loadWAV(FILE *f, uint32_t filesize);
enum
{
- STEREO_SAMPLE_READ_LEFT = 1,
- STEREO_SAMPLE_READ_RIGHT = 2,
- STEREO_SAMPLE_CONVERT = 3,
-
- WAV_FORMAT_PCM = 0x0001,
- WAV_FORMAT_IEEE_FLOAT = 0x0003
+ FORMAT_UNKNOWN = 0,
+ FORMAT_IFF = 1,
+ FORMAT_WAV = 2,
+ FORMAT_AIFF = 3
};
-static volatile bool sampleIsLoading;
-static bool loadAsInstrFlag;
-static uint8_t sampleSlot;
-static int16_t stereoSampleLoadMode;
-static SDL_Thread *thread;
-
-static void normalize32bitSigned(int32_t *sampleData, uint32_t sampleLength);
-static void normalize16bitFloatSigned(float *fSampleData, uint32_t sampleLength);
-static void normalize64bitDoubleSigned(double *dSampleData, uint32_t sampleLength);
-
-void freeTmpSample(sampleTyp *s)
+// file extensions accepted by Disk Op. in sample mode
+char *supportedSmpExtensions[] =
{
- if (s->origPek != NULL)
- {
- free(s->origPek);
- s->origPek = NULL;
- s->pek = NULL;
- }
+ "iff", "raw", "wav", "snd", "smp", "sam", "aif", "pat", "aiff",
- memset(s, 0, sizeof (sampleTyp));
-}
+ "END_OF_LIST" // do NOT move, remove or edit this line!
+};
-void removeSampleIsLoadingFlag(void)
-{
- sampleIsLoading = false;
-}
+// globals for sample loaders
+bool loadAsInstrFlag, smpFilenameSet;
+char *smpFilename;
+uint8_t sampleSlot;
+sampleTyp tmpSmp;
+// --------------------------
-static int32_t getAIFFRate(uint8_t *in)
-{
- int32_t exp = (int32_t)(((in[0] & 0x7F) << 8) | in[1]);
- uint32_t lo = (in[2] << 24) | (in[3] << 16) | (in[4] << 8) | in[5];
- uint32_t hi = (in[6] << 24) | (in[7] << 16) | (in[8] << 8) | in[9];
+static volatile bool sampleIsLoading;
+static SDL_Thread *thread;
- if (exp == 0 && lo == 0 && hi == 0)
- return 0;
+static void freeTmpSample(sampleTyp *s);
- exp -= 16383;
-
- double dOut = ldexp(lo, -31 + exp) + ldexp(hi, -63 + exp);
- return (int32_t)(dOut + 0.5); // rounded
-}
-
-static bool aiffIsStereo(FILE *f) // only ran on files that are confirmed to be AIFFs
+// Crude sample detection routine. These aren't always accurate detections!
+static int8_t detectSample(FILE *f)
{
- uint16_t numChannels;
- uint32_t chunkID, chunkSize;
+ uint8_t D[256];
uint32_t oldPos = ftell(f);
+ rewind(f);
+ memset(D, 0, sizeof (D));
+ fread(D, 1, sizeof (D), f);
+ fseek(f, oldPos, SEEK_SET);
- fseek(f, 0, SEEK_END);
- int32_t filesize = ftell(f);
+ if (!memcmp("FORM", &D[0], 4) && (!memcmp("8SVX", &D[8], 4) || !memcmp("16SV", &D[8], 4)))
+ return FORMAT_IFF;
- if (filesize < 12)
- {
- fseek(f, oldPos, SEEK_SET);
- return false;
- }
+ if (!memcmp("RIFF", &D[0], 4) && !memcmp("WAVE", &D[8], 4))
+ return FORMAT_WAV;
- fseek(f, 12, SEEK_SET);
+ if (!memcmp("FORM", &D[0], 4) && (!memcmp("AIFF", &D[8], 4) || !memcmp("AIFC", &D[8], 4)))
+ return FORMAT_AIFF;
- uint32_t commPtr = 0;
- uint32_t commLen = 0;
-
- int32_t bytesRead = 0;
- while (!feof(f) && bytesRead < filesize-12)
- {
- fread(&chunkID, 4, 1, f); chunkID = SWAP32(chunkID); if (feof(f)) break;
- fread(&chunkSize, 4, 1, f); chunkSize = SWAP32(chunkSize); if (feof(f)) break;
-
- int32_t endOfChunk = (ftell(f) + chunkSize) + (chunkSize & 1);
- switch (chunkID)
- {
- case 0x434F4D4D: // "COMM"
- {
- commPtr = ftell(f);
- commLen = chunkSize;
- }
- break;
-
- default: break;
- }
-
- bytesRead += (chunkSize + (chunkSize & 1));
- fseek(f, endOfChunk, SEEK_SET);
- }
-
- if (commPtr == 0 || commLen < 2)
- {
- fseek(f, oldPos, SEEK_SET);
- return false;
- }
-
- fseek(f, commPtr, SEEK_SET);
- fread(&numChannels, 2, 1, f); numChannels = SWAP16(numChannels);
- fseek(f, oldPos, SEEK_SET);
-
- return (numChannels == 2);
+ return FORMAT_UNKNOWN;
}
-static bool wavIsStereo(FILE *f) // only ran on files that are confirmed to be WAVs
+static int32_t SDLCALL loadSampleThread(void *ptr)
{
- uint16_t numChannels;
- uint32_t chunkID, chunkSize;
-
- uint32_t oldPos = ftell(f);
-
- fseek(f, 0, SEEK_END);
- int32_t filesize = ftell(f);
-
- if (filesize < 12)
- {
- fseek(f, oldPos, SEEK_SET);
- return false;
- }
-
- fseek(f, 12, SEEK_SET);
-
- uint32_t fmtPtr = 0;
- uint32_t fmtLen = 0;
-
- int32_t bytesRead = 0;
- while (!feof(f) && bytesRead < filesize-12)
+ if (editor.tmpFilenameU == NULL)
{
- fread(&chunkID, 4, 1, f); if (feof(f)) break;
- fread(&chunkSize, 4, 1, f); if (feof(f)) break;
-
- int32_t endOfChunk = (ftell(f) + chunkSize) + (chunkSize & 1);
- switch (chunkID)
- {
- case 0x20746D66: // "fmt "
- {
- fmtPtr = ftell(f);
- fmtLen = chunkSize;
- }
- break;
-
- default: break;
- }
-
- bytesRead += (chunkSize + (chunkSize & 1));
- fseek(f, endOfChunk, SEEK_SET);
- }
-
- if (fmtPtr == 0 || fmtLen < 4)
- {
- fseek(f, oldPos, SEEK_SET);
+ loaderMsgBox("General I/O error during loading!");
return false;
}
- fseek(f, fmtPtr + 2, SEEK_SET);
- fread(&numChannels, 2, 1, f);
- fseek(f, oldPos, SEEK_SET);
-
- return (numChannels == 2);
-}
-
-static int32_t SDLCALL loadAIFFSample(void *ptr)
-{
- char compType[4];
- int8_t *audioDataS8;
- uint8_t sampleRateBytes[10], *audioDataU8;
- int16_t *audioDataS16, *audioDataS16_2, smp16;
- uint16_t numChannels, bitDepth;
- int32_t j, smp32, *audioDataS32;
- uint32_t i, blockName, blockSize;
- uint32_t offset, len32;
- int64_t smp64;
- sampleTyp tmpSmp;
-
- // this is important for the "goto" on load error
- FILE *f = NULL;
- memset(&tmpSmp, 0, sizeof (tmpSmp));
-
- if (editor.tmpFilenameU == NULL)
- {
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto aiffLoadError;
- }
-
- UNICHAR *filename = editor.tmpFilenameU;
-
- f = UNICHAR_FOPEN(filename, "rb");
+ FILE *f = UNICHAR_FOPEN(editor.tmpFilenameU, "rb");
if (f == NULL)
{
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto aiffLoadError;
+ loaderMsgBox("General I/O error during loading! Is the file in use?");
+ return false;
}
+ int8_t format = detectSample(f);
fseek(f, 0, SEEK_END);
- int32_t filesize = ftell(f);
- if (filesize < 12)
- {
- okBoxThreadSafe(0, "System message", "Error loading sample: The sample is not supported or is invalid!");
- goto aiffLoadError;
- }
+ uint32_t filesize = ftell(f);
- // handle chunks
-
- uint32_t commPtr = 0;
- uint32_t commLen = 0;
- uint32_t ssndPtr = 0;
- uint32_t ssndLen = 0;
-
- fseek(f, 12, SEEK_SET);
- while (!feof(f) && ftell(f) < filesize-12)
+ if (filesize == 0)
{
- fread(&blockName, 4, 1, f); if (feof(f)) break;
- fread(&blockSize, 4, 1, f); if (feof(f)) break;
-
- blockName = SWAP32(blockName);
- blockSize = SWAP32(blockSize);
-
- switch (blockName)
- {
- case 0x434F4D4D: // "COMM"
- {
- commPtr = ftell(f);
- commLen = blockSize;
- }
- break;
-
- case 0x53534E44: // "SSND"
- {
- ssndPtr = ftell(f);
- ssndLen = blockSize;
- }
- break;
-
- default: break;
- }
-
- fseek(f, blockSize + (blockSize & 1), SEEK_CUR);
+ fclose(f);
+ loaderMsgBox("Error loading sample: The file is empty!");
+ return false;
}
- if (commPtr == 0 || commLen < 18 || ssndPtr == 0)
- {
- okBoxThreadSafe(0, "System message", "Error loading sample: The sample is not supported or is invalid!");
- goto aiffLoadError;
- }
+ bool sampleLoaded = false;
- // kludge for some really strange AIFFs
- if (ssndLen == 0)
- ssndLen = filesize - ssndPtr;
-
- if (ssndPtr+ssndLen > (uint32_t)filesize)
- ssndLen = filesize - ssndPtr;
-
- fseek(f, commPtr, SEEK_SET);
- fread(&numChannels, 2, 1, f); numChannels = SWAP16(numChannels);
- fseek(f, 4, SEEK_CUR);
- fread(&bitDepth, 2, 1, f); bitDepth = SWAP16(bitDepth);
- fread(sampleRateBytes, 1, 10, f);
-
- if (numChannels != 1 && numChannels != 2)
+ rewind(f);
+ switch (format)
{
- okBoxThreadSafe(0, "System message", "Error loading sample: Unsupported amounts of channels!");
- goto aiffLoadError;
+ case FORMAT_IFF: sampleLoaded = loadIFF(f, filesize); break;
+ case FORMAT_WAV: sampleLoaded = loadWAV(f, filesize); break;
+ case FORMAT_AIFF: sampleLoaded = loadAIFF(f, filesize); break;
+ default: sampleLoaded = loadRAW(f, filesize); break;
}
-
- if (bitDepth != 8 && bitDepth != 16 && bitDepth != 24 && bitDepth != 32)
- {
- okBoxThreadSafe(0, "System message", "Error loading sample: Unsupported bitdepth!");
- goto aiffLoadError;
- }
-
- // read compression type (if present)
- if (commLen > 18)
- {
- fread(&compType, 1, 4, f);
- if (memcmp(compType, "NONE", 4))
- {
- okBoxThreadSafe(0, "System message", "Error loading sample: The sample is not supported or is invalid!");
- goto aiffLoadError;
- }
- }
-
- uint32_t sampleRate = getAIFFRate(sampleRateBytes);
-
- // sample data chunk
-
- fseek(f, ssndPtr, SEEK_SET);
-
- fread(&offset, 4, 1, f);
- if (offset > 0)
- {
- okBoxThreadSafe(0, "System message", "Error loading sample: The sample is not supported or is invalid!");
- goto aiffLoadError;
- }
-
- fseek(f, 4, SEEK_CUR);
-
- ssndLen -= 8; // don't include offset and blockSize datas
-
- uint32_t sampleLength = ssndLen;
- if (sampleLength > MAX_SAMPLE_LEN)
- sampleLength = MAX_SAMPLE_LEN;
-
- freeTmpSample(&tmpSmp);
-
- // read sample data
-
- if (bitDepth == 8)
- {
- // 8-BIT SIGNED PCM
-
- tmpSmp.origPek = (int8_t *)malloc(sampleLength + LOOP_FIX_LEN);
- if (tmpSmp.origPek == NULL)
- {
- okBoxThreadSafe(0, "System message", "Not enough memory!");
- goto aiffLoadError;
- }
-
- tmpSmp.pek = tmpSmp.origPek + SMP_DAT_OFFSET;
-
- if (fread(tmpSmp.pek, sampleLength, 1, f) != 1)
- {
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto aiffLoadError;
- }
-
- audioDataS8 = (int8_t *)tmpSmp.pek;
-
- // stereo conversion
- if (numChannels == 2)
- {
- sampleLength /= 2;
-
- switch (stereoSampleLoadMode)
- {
- case STEREO_SAMPLE_READ_LEFT:
- {
- for (i = 1; i < sampleLength; i++)
- audioDataS8[i] = audioDataS8[(i * 2) + 0];
- }
- break;
-
- case STEREO_SAMPLE_READ_RIGHT:
- {
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- audioDataS8[i] = audioDataS8[(i * 2) + 1];
-
- audioDataS8[i] = 0;
- }
- break;
-
- default:
- case STEREO_SAMPLE_CONVERT:
- {
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- {
- smp16 = (audioDataS8[(i * 2) + 0] + audioDataS8[(i * 2) + 1]) >> 1;
- audioDataS8[i] = (int8_t)smp16;
- }
-
- audioDataS8[i] = 0;
- }
- break;
- }
- }
- }
- else if (bitDepth == 16)
- {
- // 16-BIT SIGNED PCM
-
- sampleLength /= 2;
-
- tmpSmp.origPek = (int8_t *)malloc((sampleLength * 2) + LOOP_FIX_LEN);
- if (tmpSmp.origPek == NULL)
- {
- okBoxThreadSafe(0, "System message", "Not enough memory!");
- goto aiffLoadError;
- }
-
- tmpSmp.pek = tmpSmp.origPek + SMP_DAT_OFFSET;
-
- if (fread(tmpSmp.pek, sampleLength, 2, f) != 2)
- {
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto aiffLoadError;
- }
-
- // fix endianness
- audioDataS16 = (int16_t *)tmpSmp.pek;
- for (i = 0; i < sampleLength; i++)
- audioDataS16[i] = SWAP16(audioDataS16[i]);
-
- // stereo conversion
- if (numChannels == 2)
- {
- sampleLength /= 2;
-
- switch (stereoSampleLoadMode)
- {
- case STEREO_SAMPLE_READ_LEFT:
- {
- for (i = 1; i < sampleLength; i++)
- audioDataS16[i] = audioDataS16[(i * 2) + 0];
- }
- break;
-
- case STEREO_SAMPLE_READ_RIGHT:
- {
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- audioDataS16[i] = audioDataS16[(i * 2) + 1];
-
- audioDataS16[i] = 0;
- }
- break;
-
- default:
- case STEREO_SAMPLE_CONVERT:
- {
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- {
- smp32 = (audioDataS16[(i * 2) + 0] + audioDataS16[(i * 2) + 1]) >> 1;
- audioDataS16[i] = (int16_t)smp32;
- }
-
- audioDataS16[i] = 0;
- }
- break;
- }
- }
-
- sampleLength *= 2;
- tmpSmp.typ |= 16;
- }
- else if (bitDepth == 24)
- {
- // 24-BIT SIGNED PCM
-
- sampleLength /= 3;
-
- tmpSmp.origPek = (int8_t *)malloc(((sampleLength * 4) * 2) + LOOP_FIX_LEN);
- if (tmpSmp.origPek == NULL)
- {
- okBoxThreadSafe(0, "System message", "Not enough memory!");
- goto aiffLoadError;
- }
-
- tmpSmp.pek = tmpSmp.origPek + SMP_DAT_OFFSET;
-
- if (fread(&tmpSmp.pek[sampleLength], sampleLength, 3, f) != 3)
- {
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto aiffLoadError;
- }
-
- audioDataS32 = (int32_t *)tmpSmp.pek;
-
- // convert to 32-bit
- audioDataU8 = (uint8_t *)tmpSmp.pek + sampleLength;
- for (i = 0; i < sampleLength; i++)
- {
- audioDataS32[i] = (audioDataU8[0] << 24) | (audioDataU8[1] << 16) | (audioDataU8[2] << 8);
- audioDataU8 += 3;
- }
-
- // stereo conversion
- if (numChannels == 2)
- {
- sampleLength /= 2;
-
- switch (stereoSampleLoadMode)
- {
- case STEREO_SAMPLE_READ_LEFT:
- {
- for (i = 1; i < sampleLength; i++)
- audioDataS32[i] = audioDataS32[(i * 2) + 0];
- }
- break;
-
- case STEREO_SAMPLE_READ_RIGHT:
- {
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- audioDataS32[i] = audioDataS32[(i * 2) + 1];
-
- audioDataS32[i] = 0;
- }
- break;
-
- default:
- case STEREO_SAMPLE_CONVERT:
- {
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- {
- smp64 = audioDataS32[(i * 2) + 0];
- smp64 += audioDataS32[(i * 2) + 1];
- smp64 >>= 1;
-
- audioDataS32[i] = (int32_t)smp64;
- }
-
- audioDataS32[i] = 0;
- }
- break;
- }
- }
-
- normalize32bitSigned(audioDataS32, sampleLength);
-
- // downscale to 16-bit (ultra fast method!)
-
- audioDataS16 = (int16_t *)tmpSmp.pek;
- audioDataS16_2 = (int16_t *)tmpSmp.pek + 1;
-
- for (i = 0; i < sampleLength; i++)
- {
- audioDataS16[i] = audioDataS16_2[i];
- audioDataS16_2++;
- }
-
- sampleLength *= 2;
- tmpSmp.typ |= 16;
- }
- else if (bitDepth == 32)
- {
- // 32-BIT SIGNED PCM
-
- sampleLength /= 4;
-
- tmpSmp.origPek = (int8_t *)malloc((sampleLength * 4) + LOOP_FIX_LEN);
- if (tmpSmp.origPek == NULL)
- {
- okBoxThreadSafe(0, "System message", "Not enough memory!");
- goto aiffLoadError;
- }
-
- tmpSmp.pek = tmpSmp.origPek + SMP_DAT_OFFSET;
-
- if (fread(tmpSmp.pek, sampleLength, 4, f) != 4)
- {
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto aiffLoadError;
- }
-
- // fix endianness
- audioDataS32 = (int32_t *)tmpSmp.pek;
- for (i = 0; i < sampleLength; i++)
- audioDataS32[i] = SWAP32(audioDataS32[i]);
-
- // stereo conversion
- if (numChannels == 2)
- {
- sampleLength /= 2;
-
- switch (stereoSampleLoadMode)
- {
- case STEREO_SAMPLE_READ_LEFT:
- {
- for (i = 1; i < sampleLength; i++)
- audioDataS32[i] = audioDataS32[(i * 2) + 0];
- }
- break;
-
- case STEREO_SAMPLE_READ_RIGHT:
- {
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- audioDataS32[i] = audioDataS32[(i * 2) + 1];
-
- audioDataS32[i] = 0;
- }
- break;
-
- default:
- case STEREO_SAMPLE_CONVERT:
- {
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- {
- smp64 = audioDataS32[(i * 2) + 0];
- smp64 += audioDataS32[(i * 2) + 1];
- smp64 >>= 1;
-
- audioDataS32[i] = (int32_t)smp64;
- }
-
- audioDataS32[i] = 0;
- }
- break;
- }
- }
-
- normalize32bitSigned(audioDataS32, sampleLength);
-
- // downscale to 16-bit (ultra fast method!)
-
- audioDataS16 = (int16_t *)tmpSmp.pek;
- audioDataS16_2 = (int16_t *)tmpSmp.pek + 1;
-
- for (i = 0; i < sampleLength; i++)
- {
- audioDataS16[i] = audioDataS16_2[i];
- audioDataS16_2++;
- }
-
- sampleLength *= 2;
- tmpSmp.typ |= 16;
- }
-
- // adjust memory needed
- int8_t *newPtr = (int8_t *)realloc(tmpSmp.origPek, sampleLength + LOOP_FIX_LEN);
- if (newPtr != NULL)
- {
- tmpSmp.origPek = newPtr;
- tmpSmp.pek = tmpSmp.origPek + SMP_DAT_OFFSET;
- }
-
- // set sample attributes
- tmpSmp.len = sampleLength;
- tmpSmp.vol = 64;
- tmpSmp.pan = 128;
-
- tuneSample(&tmpSmp, sampleRate, audio.linearPeriodsFlag);
-
- // set sample name
- char *tmpFilename = unicharToCp437(filename, true);
- if (tmpFilename != NULL)
- {
- j = (int32_t)strlen(tmpFilename);
- while (j--)
- {
- if (tmpFilename[j] == DIR_DELIMITER)
- break;
- }
-
- char *tmpPtr = tmpFilename;
- if (j > 0)
- tmpPtr += j + 1;
-
- sanitizeFilename(tmpPtr);
-
- uint32_t filenameLen = (uint32_t)strlen(tmpPtr);
- for (i = 0; i < 22; i++)
- {
- if (i < filenameLen)
- tmpSmp.name[i] = tmpPtr[i];
- else
- tmpSmp.name[i] = '\0';
- }
-
- free(tmpFilename);
- }
-
fclose(f);
- lockMixerCallback();
- if (loadAsInstrFlag) // if loaded in instrument mode
- {
- freeInstr(editor.curInstr);
- memset(song.instrName[editor.curInstr], 0, 23);
- }
+ if (!sampleLoaded)
+ goto loadError;
- if (instr[editor.curInstr] == NULL)
- allocateInstr(editor.curInstr);
-
- if (instr[editor.curInstr] != NULL)
+ // sample loaded successfully!
+
+ if (!smpFilenameSet) // if we didn't set a custom sample name in the loader, set it to its filename
{
- sampleTyp *s = &instr[editor.curInstr]->samp[sampleSlot];
-
- freeSample(editor.curInstr, sampleSlot);
- memcpy(s, &tmpSmp, sizeof (sampleTyp));
- fixSample(s);
- }
- else
- {
- okBoxThreadSafe(0, "System message", "Not enough memory!");
- goto aiffLoadError;
- }
- unlockMixerCallback();
-
- fixSampleName(editor.curInstr);
- setSongModifiedFlag();
- stereoSampleLoadMode = -1;
-
- // also sets mouse busy to false when done
- editor.updateCurSmp = true;
-
- return true;
-
-aiffLoadError:
- if (f != NULL) fclose(f);
- if (tmpSmp.origPek != NULL) free(tmpSmp.origPek);
-
- stereoSampleLoadMode = -1;
- sampleIsLoading = false;
-
- return false;
-
- (void)ptr;
-}
-
-static int32_t SDLCALL loadIFFSample(void *ptr)
-{
- char hdr[4+1];
- uint8_t i;
- int32_t j;
- uint32_t blockName, blockSize;
- sampleTyp tmpSmp;
-
- // this is important for the "goto" on load error
- FILE *f = NULL;
- memset(&tmpSmp, 0, sizeof (tmpSmp));
-
- if (editor.tmpFilenameU == NULL)
- {
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto iffLoadError;
- }
-
- UNICHAR *filename = editor.tmpFilenameU;
-
- f = UNICHAR_FOPEN(filename, "rb");
- if (f == NULL)
- {
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto iffLoadError;
- }
-
- fseek(f, 0, SEEK_END);
- int32_t filesize = ftell(f);
- if (filesize < 12)
- {
- okBoxThreadSafe(0, "System message", "Error loading sample: The sample is not supported or is invalid!");
- goto iffLoadError;
- }
-
- fseek(f, 8, SEEK_SET);
- fread(hdr, 1, 4, f);
- hdr[4] = '\0';
- bool is16Bit = !strncmp(hdr, "16SV", 4);
-
- uint32_t sampleLength = 0;
- uint32_t sampleVol = 64;
- uint32_t sampleLoopStart = 0;
- uint32_t sampleLoopLength = 0;
- uint16_t sampleRate = 16726;
-
- uint32_t vhdrPtr = 0;
- uint32_t vhdrLen = 0;
- uint32_t bodyPtr = 0;
- uint32_t bodyLen = 0;
- uint32_t namePtr = 0;
- uint32_t nameLen = 0;
-
- fseek(f, 12, SEEK_SET);
- while (!feof(f) && ftell(f) < filesize-12)
- {
- fread(&blockName, 4, 1, f); if (feof(f)) break;
- fread(&blockSize, 4, 1, f); if (feof(f)) break;
-
- blockName = SWAP32(blockName);
- blockSize = SWAP32(blockSize);
-
- switch (blockName)
- {
- case 0x56484452: // VHDR
- {
- vhdrPtr = ftell(f);
- vhdrLen = blockSize;
- }
- break;
-
- case 0x4E414D45: // NAME
- {
- namePtr = ftell(f);
- nameLen = blockSize;
- }
- break;
-
- case 0x424F4459: // BODY
- {
- bodyPtr = ftell(f);
- bodyLen = blockSize;
- }
- break;
-
- default: break;
- }
-
- fseek(f, blockSize + (blockSize & 1), SEEK_CUR);
- }
-
- if (vhdrPtr == 0 || vhdrLen < 20 || bodyPtr == 0)
- {
- okBoxThreadSafe(0, "System message", "Error loading sample: The sample is not supported or is invalid!");
- goto iffLoadError;
- }
-
- // kludge for some really strange IFFs
- if (bodyLen == 0)
- bodyLen = filesize - bodyPtr;
-
- if (bodyPtr+bodyLen > (uint32_t)filesize)
- bodyLen = filesize - bodyPtr;
-
- fseek(f, vhdrPtr, SEEK_SET);
- fread(&sampleLoopStart, 4, 1, f); sampleLoopStart = SWAP32(sampleLoopStart);
- fread(&sampleLoopLength, 4, 1, f); sampleLoopLength = SWAP32(sampleLoopLength);
- fseek(f, 4, SEEK_CUR);
- fread(&sampleRate, 2, 1, f); sampleRate = SWAP16(sampleRate);
- fseek(f, 1, SEEK_CUR);
-
- if (fgetc(f) != 0) // sample type
- {
- okBoxThreadSafe(0, "System message", "Error loading sample: The sample is not supported!");
- goto iffLoadError;
- }
-
- fread(&sampleVol, 4, 1, f); sampleVol = SWAP32(sampleVol);
- if (sampleVol > 65535)
- sampleVol = 65535;
-
- sampleVol = (int32_t)((sampleVol / 1024.0) + 0.5);
- if (sampleVol > 64)
- sampleVol = 64;
-
- sampleLength = bodyLen;
- if (sampleLength > MAX_SAMPLE_LEN)
- sampleLength = MAX_SAMPLE_LEN;
-
- if (sampleLoopStart >= MAX_SAMPLE_LEN || sampleLoopLength > MAX_SAMPLE_LEN)
- {
- sampleLoopStart = 0;
- sampleLoopLength = 0;
- }
-
- if (sampleLoopStart+sampleLoopLength > sampleLength)
- {
- sampleLoopStart = 0;
- sampleLoopLength = 0;
- }
-
- if (sampleLoopStart > sampleLength-2)
- {
- sampleLoopStart = 0;
- sampleLoopLength = 0;
- }
-
- tmpSmp.pan = 128;
- tmpSmp.vol = 64;
-
- tmpSmp.origPek = (int8_t *)malloc(sampleLength + LOOP_FIX_LEN);
- if (tmpSmp.origPek == NULL)
- {
- okBoxThreadSafe(0, "System message", "Not enough memory!");
- goto iffLoadError;
- }
-
- tmpSmp.pek = tmpSmp.origPek + SMP_DAT_OFFSET;
-
- fseek(f, bodyPtr, SEEK_SET);
- if (fread(tmpSmp.pek, sampleLength, 1, f) != 1)
- {
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto iffLoadError;
- }
-
- // set sample attributes
- tmpSmp.len = sampleLength;
-
- if (sampleLoopLength > 2)
- {
- tmpSmp.repS = sampleLoopStart;
- tmpSmp.repL = sampleLoopLength;
- tmpSmp.typ |= 1;
- }
-
- if (is16Bit)
- {
- tmpSmp.len &= 0xFFFFFFFE;
- tmpSmp.repS &= 0xFFFFFFFE;
- tmpSmp.repL &= 0xFFFFFFFE;
- tmpSmp.typ |= 16;
- }
-
- tmpSmp.vol = (uint8_t)sampleVol;
- tmpSmp.pan = 128;
-
- tuneSample(&tmpSmp, sampleRate, audio.linearPeriodsFlag);
-
- // set name
- if (namePtr != 0 && nameLen > 0)
- {
- fseek(f, namePtr, SEEK_SET);
- if (nameLen > 21)
- {
- tmpSmp.name[21] = '\0';
- fread(tmpSmp.name, 1, 21, f);
- }
- else
- {
- memset(tmpSmp.name, 0, 22);
- fread(tmpSmp.name, 1, nameLen, f);
- }
- }
- else
- {
- // set sample name from filename if we didn't load name from .wav
- char *tmpFilename = unicharToCp437(filename, true);
+ char *tmpFilename = unicharToCp437(editor.tmpFilenameU, true);
if (tmpFilename != NULL)
{
- j = (int32_t)strlen(tmpFilename);
- while (j--)
+ int32_t i = (int32_t)strlen(tmpFilename);
+ while (i--)
{
- if (tmpFilename[j] == DIR_DELIMITER)
+ if (tmpFilename[i] == DIR_DELIMITER)
break;
}
char *tmpPtr = tmpFilename;
- if (j > 0)
- tmpPtr += j + 1;
+ if (i > 0)
+ tmpPtr += i+1;
sanitizeFilename(tmpPtr);
- uint32_t filenameLen = (uint32_t)strlen(tmpPtr);
+ int32_t filenameLen = (int32_t)strlen(tmpPtr);
for (i = 0; i < 22; i++)
{
if (i < filenameLen)
@@ -965,7 +146,7 @@
}
}
- fclose(f);
+ fixString(tmpSmp.name, 21); // remove leading spaces from sample filename
lockMixerCallback();
if (loadAsInstrFlag) // if loaded in instrument mode
@@ -977,1114 +158,82 @@
if (instr[editor.curInstr] == NULL)
allocateInstr(editor.curInstr);
- if (instr[editor.curInstr] != NULL)
+ if (instr[editor.curInstr] == NULL)
{
- sampleTyp *s = &instr[editor.curInstr]->samp[sampleSlot];
-
- freeSample(editor.curInstr, sampleSlot);
- memcpy(s, &tmpSmp, sizeof (sampleTyp));
- fixSample(s);
+ loaderMsgBox("Not enough memory!");
+ goto loadError;
}
- else
- {
- okBoxThreadSafe(0, "System message", "Not enough memory!");
- goto iffLoadError;
- }
- unlockMixerCallback();
- fixSampleName(editor.curInstr);
- setSongModifiedFlag();
- stereoSampleLoadMode = -1;
+ sampleTyp *s = &instr[editor.curInstr]->samp[sampleSlot];
- // also sets mouse busy to false when done
- editor.updateCurSmp = true;
+ freeSample(editor.curInstr, sampleSlot);
+ memcpy(s, &tmpSmp, sizeof (sampleTyp));
+ fixSample(s); // prepares sample for branchless resampling interpolation
+ fixInstrAndSampleNames(editor.curInstr);
- return true;
-
-iffLoadError:
- if (f != NULL) fclose(f);
- if (tmpSmp.origPek != NULL) free(tmpSmp.origPek);
-
- stereoSampleLoadMode = -1;
- sampleIsLoading = false;
-
- return false;
-
- (void)ptr;
-}
-
-static int32_t SDLCALL loadRawSample(void *ptr)
-{
- int32_t j;
- uint32_t i;
- sampleTyp tmpSmp;
-
- // this is important for the "goto" on load error
- FILE *f = NULL;
- memset(&tmpSmp, 0, sizeof (tmpSmp));
-
- if (editor.tmpFilenameU == NULL)
- {
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto rawLoadError;
- }
-
- UNICHAR *filename = editor.tmpFilenameU;
-
- f = UNICHAR_FOPEN(filename, "rb");
- if (f == NULL)
- {
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto rawLoadError;
- }
-
- fseek(f, 0, SEEK_END);
- uint32_t filesize = ftell(f);
- rewind(f);
-
- if (filesize > MAX_SAMPLE_LEN)
- filesize = MAX_SAMPLE_LEN;
-
- if (filesize == 0)
- {
- okBoxThreadSafe(0, "System message", "Error loading sample: The sample is not supported or is invalid!");
- goto rawLoadError;
- }
-
- tmpSmp.pan = 128;
- tmpSmp.vol = 64;
-
- tmpSmp.origPek = (int8_t *)malloc(filesize + LOOP_FIX_LEN);
- if (tmpSmp.origPek == NULL)
- {
- okBoxThreadSafe(0, "System message", "Not enough memory!");
- goto rawLoadError;
- }
-
- tmpSmp.pek = tmpSmp.origPek + SMP_DAT_OFFSET;
-
- if (fread(tmpSmp.pek, filesize, 1, f) != 1)
- {
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto rawLoadError;
- }
-
- fclose(f);
-
- char *tmpFilename = unicharToCp437(filename, true);
- if (tmpFilename != NULL)
- {
- j = (int32_t)strlen(tmpFilename);
- while (j--)
- {
- if (tmpFilename[j] == DIR_DELIMITER)
- break;
- }
-
- char *tmpPtr = tmpFilename;
- if (j > 0)
- tmpPtr += j + 1;
-
- sanitizeFilename(tmpPtr);
-
- uint32_t filenameLen = (uint32_t)strlen(tmpPtr);
- for (i = 0; i < 22; i++)
- {
- if (i < filenameLen)
- tmpSmp.name[i] = tmpPtr[i];
- else
- tmpSmp.name[i] = '\0';
- }
-
- free(tmpFilename);
- }
-
- tmpSmp.len = filesize;
- tmpSmp.vol = 64;
- tmpSmp.pan = 128;
-
- lockMixerCallback();
- if (loadAsInstrFlag) // if loaded in instrument mode
- {
- freeInstr(editor.curInstr);
- memset(song.instrName[editor.curInstr], 0, 23);
- }
-
- if (instr[editor.curInstr] == NULL)
- allocateInstr(editor.curInstr);
-
- if (instr[editor.curInstr] != NULL)
- {
- sampleTyp *s = &instr[editor.curInstr]->samp[sampleSlot];
-
- freeSample(editor.curInstr, sampleSlot);
- memcpy(s, &tmpSmp, sizeof (sampleTyp));
- fixSample(s);
- }
- else
- {
- okBoxThreadSafe(0, "System message", "Not enough memory!");
- goto rawLoadError;
- }
unlockMixerCallback();
- fixSampleName(editor.curInstr);
setSongModifiedFlag();
- stereoSampleLoadMode = -1;
- // also sets mouse busy to false when done
+ // when caught in main/video thread, it disables busy mouse and sets sampleIsLoading to true
editor.updateCurSmp = true;
return true;
-rawLoadError:
- if (f != NULL) fclose(f);
- if (tmpSmp.origPek != NULL) free(tmpSmp.origPek);
-
- stereoSampleLoadMode = -1;
+loadError:
+ setMouseBusy(false);
+ freeTmpSample(&tmpSmp);
sampleIsLoading = false;
-
return false;
(void)ptr;
}
-static int32_t SDLCALL loadWAVSample(void *ptr)
+static void freeTmpSample(sampleTyp *s)
{
- char chr, *tmpFilename, *tmpPtr;
- int8_t *newPtr;
- uint8_t *audioDataU8;
- int16_t *audioDataS16, *audioDataS16_2, *ptr16;
- uint16_t audioFormat, numChannels, bitsPerSample, tempPan, tempVol;
- int32_t j, *audioDataS32, smp32;
- uint32_t filenameLen, i, sampleRate, chunkID, chunkSize, sampleLength, filesize;
- uint32_t numLoops, loopType, loopStart, loopEnd, bytesRead, endOfChunk, dataPtr, dataLen, fmtPtr;
- uint32_t fmtLen, inamPtr, inamLen, smplPtr, smplLen, xtraPtr, xtraLen, xtraFlags, len32;
- int64_t smp64;
- float *fAudioDataFloat;
- double *dAudioDataDouble;
- sampleTyp tmpSmp, *s;
-
- // this is important for the "goto" on load error
- FILE *f = NULL;
- memset(&tmpSmp, 0, sizeof (tmpSmp));
-
- // zero out chunk pointers and lengths
- fmtPtr = 0; fmtLen = 0;
- dataPtr = 0; dataLen = 0;
- inamPtr = 0; inamLen = 0;
- xtraPtr = 0; xtraLen = 0;
- smplPtr = 0; smplLen = 0;
-
- if (editor.tmpFilenameU == NULL)
+ if (s->origPek != NULL)
{
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto wavLoadError;
+ free(s->origPek);
+ s->origPek = NULL;
}
- UNICHAR *filename = editor.tmpFilenameU;
+ s->pek = NULL;
+}
- f = UNICHAR_FOPEN(filename, "rb");
- if (f == NULL)
- {
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto wavLoadError;
- }
-
- // get and check filesize
- fseek(f, 0, SEEK_END);
- filesize = ftell(f);
- if (filesize < 12)
- {
- okBoxThreadSafe(0, "System message", "Error loading sample: The sample is not supported or is invalid!");
- goto wavLoadError;
- }
-
- // look for wanted chunks and set up pointers + lengths
- fseek(f, 12, SEEK_SET);
-
- bytesRead = 0;
- while (!feof(f) && bytesRead < filesize-12)
- {
- fread(&chunkID, 4, 1, f); if (feof(f)) break;
- fread(&chunkSize, 4, 1, f); if (feof(f)) break;
-
- endOfChunk = (ftell(f) + chunkSize) + (chunkSize & 1);
- switch (chunkID)
- {
- case 0x20746D66: // "fmt "
- {
- fmtPtr = ftell(f);
- fmtLen = chunkSize;
- }
- break;
-
- case 0x61746164: // "data"
- {
- dataPtr = ftell(f);
- dataLen = chunkSize;
- }
- break;
-
- case 0x5453494C: // "LIST"
- {
- if (chunkSize >= 4)
- {
- fread(&chunkID, 4, 1, f);
- if (chunkID == 0x4F464E49) // "INFO"
- {
- bytesRead = 0;
- while (!feof(f) && bytesRead < chunkSize)
- {
- fread(&chunkID, 4, 1, f);
- fread(&chunkSize, 4, 1, f);
-
- switch (chunkID)
- {
- case 0x4D414E49: // "INAM"
- {
- inamPtr = ftell(f);
- inamLen = chunkSize;
- }
- break;
-
- default: break;
- }
-
- bytesRead += (chunkSize + (chunkSize & 1));
- }
- }
- }
- }
- break;
-
- case 0x61727478: // "xtra"
- {
- xtraPtr = ftell(f);
- xtraLen = chunkSize;
- }
- break;
-
- case 0x6C706D73: // "smpl"
- {
- smplPtr = ftell(f);
- smplLen = chunkSize;
- }
- break;
-
- default: break;
- }
-
- bytesRead += (chunkSize + (chunkSize & 1));
- fseek(f, endOfChunk, SEEK_SET);
- }
-
- // we need at least "fmt " and "data" - check if we found them sanely
- if ((fmtPtr == 0 || fmtLen < 16) || (dataPtr == 0 || dataLen == 0))
- {
- okBoxThreadSafe(0, "System message", "Error loading sample: The sample is not supported or is invalid!");
- goto wavLoadError;
- }
-
- // ---- READ "fmt " CHUNK ----
- fseek(f, fmtPtr, SEEK_SET);
- fread(&audioFormat, 2, 1, f);
- fread(&numChannels, 2, 1, f);
- fread(&sampleRate, 4, 1, f);
- fseek(f, 6, SEEK_CUR); // unneeded
- fread(&bitsPerSample, 2, 1, f);
- sampleLength = dataLen;
- // ---------------------------
-
- // test if the WAV is compatible with our loader
-
- if (sampleRate == 0 || sampleLength == 0 || sampleLength >= filesize)
- {
- okBoxThreadSafe(0, "System message", "Error loading sample: The sample is not supported or is invalid!");
- goto wavLoadError;
- }
-
- if (audioFormat != WAV_FORMAT_PCM && audioFormat != WAV_FORMAT_IEEE_FLOAT)
- {
- okBoxThreadSafe(0, "System message", "Error loading sample: The sample is not supported!");
- goto wavLoadError;
- }
-
- if (numChannels == 0 || numChannels > 2)
- {
- okBoxThreadSafe(0, "System message", "Error loading sample: Unsupported number of channels!");
- goto wavLoadError;
- }
-
- if (audioFormat == WAV_FORMAT_IEEE_FLOAT && bitsPerSample != 32 && bitsPerSample != 64)
- {
- okBoxThreadSafe(0, "System message", "Error loading sample: Unsupported bitdepth!");
- goto wavLoadError;
- }
-
- if (bitsPerSample != 8 && bitsPerSample != 16 && bitsPerSample != 24 && bitsPerSample != 32 && bitsPerSample != 64)
- {
- okBoxThreadSafe(0, "System message", "Error loading sample: Unsupported bitdepth!");
- goto wavLoadError;
- }
-
- // ---- READ SAMPLE DATA ----
- fseek(f, dataPtr, SEEK_SET);
-
- s = &instr[editor.curInstr]->samp[editor.curSmp];
- tmpSmp.pan = 128;
- tmpSmp.vol = 64;
-
- if (sampleLength > MAX_SAMPLE_LEN)
- sampleLength = MAX_SAMPLE_LEN;
-
- if (bitsPerSample == 8) // 8-BIT INTEGER SAMPLE
- {
- tmpSmp.origPek = (int8_t *)malloc(sampleLength + LOOP_FIX_LEN);
- if (tmpSmp.origPek == NULL)
- {
- okBoxThreadSafe(0, "System message", "Not enough memory!");
- goto wavLoadError;
- }
-
- tmpSmp.pek = tmpSmp.origPek + SMP_DAT_OFFSET;
-
- if (fread(tmpSmp.pek, sampleLength, 1, f) != 1)
- {
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto wavLoadError;
- }
-
- audioDataU8 = (uint8_t *)tmpSmp.pek;
-
- // stereo conversion
- if (numChannels == 2)
- {
- sampleLength /= 2;
- switch (stereoSampleLoadMode)
- {
- case STEREO_SAMPLE_READ_LEFT:
- {
- // remove right channel data
- for (i = 1; i < sampleLength; i++)
- audioDataU8[i] = audioDataU8[(i * 2) + 0];
- }
- break;
-
- case STEREO_SAMPLE_READ_RIGHT:
- {
- // remove left channel data
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- audioDataU8[i] = audioDataU8[(i * 2) + 1];
-
- audioDataU8[i] = 128;
- }
- break;
-
- default:
- case STEREO_SAMPLE_CONVERT:
- {
- // mix stereo to mono
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- audioDataU8[i] = (audioDataU8[(i * 2) + 0] + audioDataU8[(i * 2) + 1]) >> 1;
-
- audioDataU8[i] = 128;
- }
- break;
- }
- }
-
- // convert from unsigned to signed
- for (i = 0; i < sampleLength; i++)
- tmpSmp.pek[i] ^= 0x80;
-
- tmpSmp.typ &= ~16; // 8-bit
- }
- else if (bitsPerSample == 16) // 16-BIT INTEGER SAMPLE
- {
- sampleLength /= 2;
-
- tmpSmp.origPek = (int8_t *)malloc((sampleLength * 2) + LOOP_FIX_LEN);
- if (tmpSmp.origPek == NULL)
- {
- okBoxThreadSafe(0, "System message", "Not enough memory!");
- goto wavLoadError;
- }
-
- tmpSmp.pek = tmpSmp.origPek + SMP_DAT_OFFSET;
-
- if (fread(tmpSmp.pek, sampleLength, 2, f) != 2)
- {
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto wavLoadError;
- }
-
- audioDataS16 = (int16_t *)tmpSmp.pek;
-
- // stereo conversion
- if (numChannels == 2)
- {
- sampleLength /= 2;
-
- switch (stereoSampleLoadMode)
- {
- case STEREO_SAMPLE_READ_LEFT:
- {
- // remove right channel data
- for (i = 1; i < sampleLength; i++)
- audioDataS16[i] = audioDataS16[(i * 2) + 0];
- }
- break;
-
- case STEREO_SAMPLE_READ_RIGHT:
- {
- // remove left channel data
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- audioDataS16[i] = audioDataS16[(i * 2) + 1];
-
- audioDataS16[i] = 0;
- }
- break;
-
- default:
- case STEREO_SAMPLE_CONVERT:
- {
- // mix stereo to mono
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- {
- smp32 = audioDataS16[(i * 2) + 0] + audioDataS16[(i * 2) + 1];
- audioDataS16[i] = (int16_t)(smp32 >> 1);
- }
-
- audioDataS16[i] = 0;
- }
- break;
- }
- }
-
- sampleLength *= 2;
- tmpSmp.typ |= 16; // 16-bit
- }
- else if (bitsPerSample == 24) // 24-BIT INTEGER SAMPLE
- {
- sampleLength /= 3;
-
- tmpSmp.origPek = (int8_t *)malloc(((sampleLength * 4) * 2) + LOOP_FIX_LEN);
- if (tmpSmp.origPek == NULL)
- {
- okBoxThreadSafe(0, "System message", "Not enough memory!");
- goto wavLoadError;
- }
-
- tmpSmp.pek = tmpSmp.origPek + SMP_DAT_OFFSET;
-
- if (fread(&tmpSmp.pek[sampleLength], sampleLength, 3, f) != 3)
- {
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto wavLoadError;
- }
-
- audioDataS32 = (int32_t *)tmpSmp.pek;
-
- // convert to 32-bit
- audioDataU8 = (uint8_t *)tmpSmp.pek + sampleLength;
- for (i = 0; i < sampleLength; i++)
- {
- audioDataS32[i] = (audioDataU8[2] << 24) | (audioDataU8[1] << 16) | (audioDataU8[0] << 8);
- audioDataU8 += 3;
- }
-
- // stereo conversion
- if (numChannels == 2)
- {
- sampleLength /= 2;
- switch (stereoSampleLoadMode)
- {
- case STEREO_SAMPLE_READ_LEFT:
- {
- // remove right channel data
- for (i = 1; i < sampleLength; i++)
- audioDataS32[i] = audioDataS32[(i * 2) + 0];
- }
- break;
-
- case STEREO_SAMPLE_READ_RIGHT:
- {
- // remove left channel data
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- audioDataS32[i] = audioDataS32[(i * 2) + 1];
-
- audioDataS32[i] = 0;
- }
- break;
-
- default:
- case STEREO_SAMPLE_CONVERT:
- {
- // mix stereo to mono
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- {
- smp64 = audioDataS32[(i * 2) + 0];
- smp64 += audioDataS32[(i * 2) + 1];
- smp64 >>= 1;
-
- audioDataS32[i] = (int32_t)smp64;
- }
-
- audioDataS32[i] = 0;
- }
- break;
- }
- }
-
- normalize32bitSigned(audioDataS32, sampleLength);
-
- // downscale to 16-bit (ultra fast method!)
-
- audioDataS16 = (int16_t *)tmpSmp.pek;
- audioDataS16_2 = (int16_t *)tmpSmp.pek + 1;
-
- for (i = 0; i < sampleLength; i++)
- {
- audioDataS16[i] = audioDataS16_2[i];
- audioDataS16_2++;
- }
-
- sampleLength *= 2;
- tmpSmp.typ |= 16; // 16-bit
- }
- else if (audioFormat == WAV_FORMAT_PCM && bitsPerSample == 32) // 32-BIT INTEGER SAMPLE
- {
- sampleLength /= 4;
-
- tmpSmp.origPek = (int8_t *)malloc((sampleLength * 4) + LOOP_FIX_LEN);
- if (tmpSmp.origPek == NULL)
- {
- okBoxThreadSafe(0, "System message", "Not enough memory!");
- goto wavLoadError;
- }
-
- tmpSmp.pek = tmpSmp.origPek + SMP_DAT_OFFSET;
-
- if (fread(tmpSmp.pek, sampleLength, 4, f) != 4)
- {
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto wavLoadError;
- }
-
- audioDataS32 = (int32_t *)tmpSmp.pek;
-
- // stereo conversion
- if (numChannels == 2)
- {
- sampleLength /= 2;
- switch (stereoSampleLoadMode)
- {
- case STEREO_SAMPLE_READ_LEFT:
- {
- // remove right channel data
- for (i = 1; i < sampleLength; i++)
- audioDataS32[i] = audioDataS32[(i * 2) + 0];
- }
- break;
-
- case STEREO_SAMPLE_READ_RIGHT:
- {
- // remove left channel data
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- audioDataS32[i] = audioDataS32[(i * 2) + 1];
-
- audioDataS32[i] = 0;
- }
- break;
-
- default:
- case STEREO_SAMPLE_CONVERT:
- {
- // mix stereo to mono
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- {
- smp64 = audioDataS32[(i * 2) + 0];
- smp64 += audioDataS32[(i * 2) + 1];
- smp64 >>= 1;
-
- audioDataS32[i] = (int32_t)smp64;
- }
-
- audioDataS32[i] = 0;
- }
- break;
- }
- }
-
- normalize32bitSigned(audioDataS32, sampleLength);
-
- // downscale to 16-bit (ultra fast method!)
-
- audioDataS16 = (int16_t *)tmpSmp.pek;
- audioDataS16_2 = (int16_t *)tmpSmp.pek + 1;
-
- for (i = 0; i < sampleLength; i++)
- {
- audioDataS16[i] = audioDataS16_2[i];
- audioDataS16_2++;
- }
-
- sampleLength *= 2;
- tmpSmp.typ |= 16; // 16-bit
- }
- else if (audioFormat == WAV_FORMAT_IEEE_FLOAT && bitsPerSample == 32) // 32-BIT FLOATING POINT SAMPLE
- {
- sampleLength /= 4;
-
- tmpSmp.origPek = (int8_t *)malloc((sampleLength * 4) + LOOP_FIX_LEN);
- if (tmpSmp.origPek == NULL)
- {
- okBoxThreadSafe(0, "System message", "Not enough memory!");
- goto wavLoadError;
- }
-
- tmpSmp.pek = tmpSmp.origPek + SMP_DAT_OFFSET;
-
- if (fread(tmpSmp.pek, sampleLength, 4, f) != 4)
- {
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto wavLoadError;
- }
-
- fAudioDataFloat = (float *)tmpSmp.pek;
-
- // stereo conversion
- if (numChannels == 2)
- {
- sampleLength /= 2;
- switch (stereoSampleLoadMode)
- {
- case STEREO_SAMPLE_READ_LEFT:
- {
- // remove right channel data
- for (i = 1; i < sampleLength; i++)
- fAudioDataFloat[i] = fAudioDataFloat[(i * 2) + 0];
- }
- break;
-
- case STEREO_SAMPLE_READ_RIGHT:
- {
- // remove left channel data
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- fAudioDataFloat[i] = fAudioDataFloat[(i * 2) + 1];
-
- fAudioDataFloat[i] = 0.0f;
- }
- break;
-
- default:
- case STEREO_SAMPLE_CONVERT:
- {
- // mix stereo to mono
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- fAudioDataFloat[i] = (fAudioDataFloat[(i * 2) + 0] + fAudioDataFloat[(i * 2) + 1]) * 0.5f;
-
- fAudioDataFloat[i] = 0.0f;
- }
- break;
- }
- }
-
- normalize16bitFloatSigned(fAudioDataFloat, sampleLength);
-
- ptr16 = (int16_t *)tmpSmp.pek;
- for (i = 0; i < sampleLength; i++)
- ptr16[i] = (int16_t)fAudioDataFloat[i]; // should use SIMD if available
-
- sampleLength *= 2;
- tmpSmp.typ |= 16; // 16-bit
- }
- else if (audioFormat == WAV_FORMAT_IEEE_FLOAT && bitsPerSample == 64) // 64-BIT FLOATING POINT SAMPLE
- {
- sampleLength /= 8;
-
- tmpSmp.origPek = (int8_t *)malloc((sampleLength * 8) + LOOP_FIX_LEN);
- if (tmpSmp.origPek == NULL)
- {
- okBoxThreadSafe(0, "System message", "Not enough memory!");
- goto wavLoadError;
- }
-
- tmpSmp.pek = tmpSmp.origPek + SMP_DAT_OFFSET;
-
- if (fread(tmpSmp.pek, sampleLength, 8, f) != 8)
- {
- okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
- goto wavLoadError;
- }
-
- dAudioDataDouble = (double *)tmpSmp.pek;
-
- // stereo conversion
- if (numChannels == 2)
- {
- sampleLength /= 2;
- switch (stereoSampleLoadMode)
- {
- case STEREO_SAMPLE_READ_LEFT:
- {
- // remove right channel data
- for (i = 1; i < sampleLength; i++)
- dAudioDataDouble[i] = dAudioDataDouble[(i * 2) + 0];
- }
- break;
-
- case STEREO_SAMPLE_READ_RIGHT:
- {
- // remove left channel data
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- dAudioDataDouble[i] = dAudioDataDouble[(i * 2) + 1];
-
- dAudioDataDouble[i] = 0.0;
- }
- break;
-
- default:
- case STEREO_SAMPLE_CONVERT:
- {
- // mix stereo to mono
- len32 = sampleLength - 1;
- for (i = 0; i < len32; i++)
- dAudioDataDouble[i] = (dAudioDataDouble[(i * 2) + 0] + dAudioDataDouble[(i * 2) + 1]) * 0.5;
-
- dAudioDataDouble[i] = 0.0;
- }
- break;
- }
- }
-
- normalize64bitDoubleSigned(dAudioDataDouble, sampleLength);
-
- ptr16 = (int16_t *)tmpSmp.pek;
- for (i = 0; i < sampleLength; i++)
- ptr16[i] = (int16_t)dAudioDataDouble[i]; // should use SIMD if available
-
- sampleLength *= 2;
- tmpSmp.typ |= 16; // 16-bit
- }
-
- // adjust memory needed
- newPtr = (int8_t *)realloc(tmpSmp.origPek, sampleLength + LOOP_FIX_LEN);
- if (newPtr != NULL)
- {
- tmpSmp.origPek = newPtr;
- tmpSmp.pek = tmpSmp.origPek + SMP_DAT_OFFSET;
- }
-
- tuneSample(&tmpSmp, sampleRate, audio.linearPeriodsFlag);
-
- tmpSmp.vol = 64;
- tmpSmp.pan = 128;
- tmpSmp.len = sampleLength;
-
- // ---- READ "smpl" chunk ----
- if (smplPtr != 0 && smplLen > 52)
- {
- fseek(f, smplPtr + 28, SEEK_SET); // seek to first wanted byte
-
- fread(&numLoops, 4, 1, f);
- if (numLoops == 1)
- {
- fseek(f, 4 + 4, SEEK_CUR); // skip "samplerData" and "identifier"
-
- fread(&loopType, 4, 1, f);
- fread(&loopStart, 4, 1, f);
- fread(&loopEnd, 4, 1, f);
-
- loopEnd++;
-
- if (tmpSmp.typ & 16)
- {
- loopStart *= 2;
- loopEnd *= 2;
- }
-
- if (loopEnd <= sampleLength)
- {
- tmpSmp.repS = loopStart;
- tmpSmp.repL = loopEnd - loopStart;
- tmpSmp.typ |= ((loopType == 0) ? 1 : 2);
- }
- }
- }
- // ---------------------------
-
- // ---- READ "xtra" chunk ----
- if (xtraPtr != 0 && xtraLen >= 8)
- {
- fseek(f, xtraPtr, SEEK_SET);
-
- fread(&xtraFlags, 4, 1, f); // flags
-
- // panning (0..256)
- if (xtraFlags & 0x20) // set panning flag
- {
- fread(&tempPan, 2, 1, f);
- if (tempPan > 255)
- tempPan = 255;
-
- tmpSmp.pan = (uint8_t)tempPan;
- }
- else
- {
- // don't read panning, skip it
- fseek(f, 2, SEEK_CUR);
- }
-
- // volume (0..256)
- fread(&tempVol, 2, 1, f);
- if (tempVol > 256)
- tempVol = 256;
-
- tmpSmp.vol = (uint8_t)(tempVol / 4); // 0..256 -> 0..64
- }
- // ---------------------------
-
- // ---- READ "INAM" chunk ----
- if (inamPtr != 0 && inamLen > 0)
- {
- fseek(f, inamPtr, SEEK_SET);
-
- memset(tmpSmp.name, 0, sizeof (tmpSmp.name));
- for (i = 0; i < 22; i++)
- {
- if (i < inamLen)
- {
- chr = (char)fgetc(f);
- if (chr == '\0')
- break;
-
- tmpSmp.name[i] = chr;
- }
- }
- }
- else
- {
- // set sample name from filename if we didn't load name from .wav
- tmpFilename = unicharToCp437(filename, true);
- if (tmpFilename != NULL)
- {
- j = (int32_t)strlen(tmpFilename);
- while (j--)
- {
- if (tmpFilename[j] == DIR_DELIMITER)
- break;
- }
-
- tmpPtr = tmpFilename;
- if (j > 0)
- tmpPtr += j + 1;
-
- sanitizeFilename(tmpPtr);
-
- filenameLen = (uint32_t)strlen(tmpPtr);
- for (i = 0; i < 22; i++)
- {
- if (i < filenameLen)
- tmpSmp.name[i] = tmpPtr[i];
- else
- tmpSmp.name[i] = '\0';
- }
-
- free(tmpFilename);
- }
- }
-
- fclose(f);
-
- lockMixerCallback();
- if (loadAsInstrFlag) // if loaded in instrument mode
- {
- freeInstr(editor.curInstr);
- memset(song.instrName[editor.curInstr], 0, 23);
- }
-
- if (instr[editor.curInstr] == NULL)
- allocateInstr(editor.curInstr);
-
- if (instr[editor.curInstr] != NULL)
- {
- s = &instr[editor.curInstr]->samp[sampleSlot];
-
- freeSample(editor.curInstr, sampleSlot);
- memcpy(s, &tmpSmp, sizeof (sampleTyp));
- fixSample(s);
- }
- else
- {
- okBoxThreadSafe(0, "System message", "Not enough memory!");
- goto wavLoadError;
- }
- unlockMixerCallback();
-
- fixSampleName(editor.curInstr);
- setSongModifiedFlag();
- stereoSampleLoadMode = -1;
-
- // also sets mouse busy to false when done
- editor.updateCurSmp = true;
-
- return true;
-
-wavLoadError:
- if (f != NULL) fclose(f);
- if (tmpSmp.origPek != NULL) free(tmpSmp.origPek);
-
- stereoSampleLoadMode = -1;
+void removeSampleIsLoadingFlag(void)
+{
sampleIsLoading = false;
-
- return false;
-
- (void)ptr;
}
bool loadSample(UNICHAR *filenameU, uint8_t smpNr, bool instrFlag)
{
- char tmpBuffer[16+1];
-
- if (sampleIsLoading)
+ if (sampleIsLoading || filenameU == NULL)
return false;
- stereoSampleLoadMode = 0;
+ // setup message box functions
+ loaderMsgBox = myLoaderMsgBoxThreadSafe;
+ loaderSysReq = okBoxThreadSafe;
- sampleSlot = smpNr;
- loadAsInstrFlag = instrFlag;
-
if (editor.curInstr == 0)
{
- okBox(0, "System message", "The zero-instrument cannot hold intrument data.");
+ loaderMsgBox("The zero-instrument cannot hold intrument data.");
return false;
}
- FILE *f = UNICHAR_FOPEN(filenameU, "rb");
- if (f == NULL)
- {
- okBox(0, "System message", "General I/O error during loading! Is the file in use?");
- return false;
- }
-
- memset(tmpBuffer, 0, sizeof (tmpBuffer));
- if (fread(tmpBuffer, sizeof (tmpBuffer) - 1, 1, f) == 1)
- {
- tmpBuffer[sizeof (tmpBuffer) - 1] = '\0';
-
- // detect what sample format this is...
-
- // WAV
- if (!strncmp("RIFF", tmpBuffer, 4) && !strncmp("WAVE", tmpBuffer + 8, 4))
- {
- // let the user pick what to do with stereo samples...
- if (wavIsStereo(f))
- stereoSampleLoadMode = okBox(5, "System request", "This is a stereo sample...");
-
- sampleIsLoading = true;
-
- fclose(f);
- UNICHAR_STRCPY(editor.tmpFilenameU, filenameU);
-
- mouseAnimOn();
- thread = SDL_CreateThread(loadWAVSample, NULL, NULL);
- if (thread == NULL)
- {
- okBox(0, "System message", "Couldn't create thread!");
- sampleIsLoading = false;
- return false;
- }
-
- SDL_DetachThread(thread);
- return true;
- }
-
- // AIFF or IFF
- if (!strncmp("FORM", tmpBuffer, 4))
- {
- if (!strncmp("AIFC", tmpBuffer + 8, 4))
- {
- // AIFC (not supported)
-
- fclose(f);
- okBox(0, "System message", "Error loading sample: This AIFF type (AIFC) is not supported!");
- return true;
- }
- else if (!strncmp("AIFF", tmpBuffer + 8, 4))
- {
- // AIFF
-
- // let the user pick what to do with stereo samples...
- if (aiffIsStereo(f))
- stereoSampleLoadMode = okBox(5, "System request", "This is a stereo sample...");
-
- sampleIsLoading = true;
-
- fclose(f);
- UNICHAR_STRCPY(editor.tmpFilenameU, filenameU);
-
- mouseAnimOn();
- thread = SDL_CreateThread(loadAIFFSample, NULL, NULL);
- if (thread == NULL)
- {
- okBox(0, "System message", "Couldn't create thread!");
- sampleIsLoading = false;
- return false;
- }
-
- SDL_DetachThread(thread);
- return true;
- }
- else if (!strncmp("8SVX", tmpBuffer + 8, 4) || !strncmp("16SV", tmpBuffer + 8, 4))
- {
- // IFF
-
- sampleIsLoading = true;
-
- fclose(f);
- UNICHAR_STRCPY(editor.tmpFilenameU, filenameU);
-
- mouseAnimOn();
- thread = SDL_CreateThread(loadIFFSample, NULL, NULL);
- if (thread == NULL)
- {
- okBox(0, "System message", "Couldn't create thread!");
- sampleIsLoading = false;
- return false;
- }
-
- SDL_DetachThread(thread);
- return true;
- }
- }
- }
-
- // load as RAW sample
-
+ sampleSlot = smpNr;
+ loadAsInstrFlag = instrFlag;
sampleIsLoading = true;
+ smpFilenameSet = false;
- fclose(f);
+ memset(&tmpSmp, 0, sizeof (tmpSmp));
UNICHAR_STRCPY(editor.tmpFilenameU, filenameU);
mouseAnimOn();
- thread = SDL_CreateThread(loadRawSample, NULL, NULL);
+ thread = SDL_CreateThread(loadSampleThread, NULL, NULL);
if (thread == NULL)
{
- okBox(0, "System message", "Couldn't create thread!");
sampleIsLoading = false;
+ loaderMsgBox("Couldn't create thread!");
return false;
}
@@ -2092,7 +241,7 @@
return true;
}
-static void normalize32bitSigned(int32_t *sampleData, uint32_t sampleLength)
+void normalizeSigned32Bit(int32_t *sampleData, uint32_t sampleLength)
{
uint32_t i;
@@ -2112,7 +261,7 @@
sampleData[i] = (int32_t)(sampleData[i] * dGain);
}
-static void normalize16bitFloatSigned(float *fSampleData, uint32_t sampleLength)
+void normalize32BitFloatToSigned16Bit(float *fSampleData, uint32_t sampleLength)
{
uint32_t i;
@@ -2132,7 +281,7 @@
fSampleData[i] *= fGain;
}
-static void normalize64bitDoubleSigned(double *dSampleData, uint32_t sampleLength)
+void normalize64BitFloatToSigned16Bit(double *dSampleData, uint32_t sampleLength)
{
uint32_t i;
@@ -2150,99 +299,4 @@
const double dGain = (double)INT16_MAX / dSampleVolPeak;
for (i = 0; i < sampleLength; i++)
dSampleData[i] *= dGain;
-}
-
-bool fileIsInstrument(char *fullPath)
-{
- int32_t i, len;
-
- // this assumes that fullPath is not empty
-
- len = (int32_t)strlen(fullPath);
-
- // get filename from path
- i = len;
- while (i--)
- {
- if (fullPath[i] == DIR_DELIMITER)
- break;
- }
-
- char *filename = fullPath;
- if (i > 0)
- filename += i + 1;
- // --------------------------
-
- len = (int32_t)strlen(filename);
- if (len < 4)
- return true; // can't be an instrument
-
- if (!_strnicmp("xi.", filename, 3) || (len >= 4 && !_strnicmp("pat.", filename, 4)))
- return true;
-
- int32_t extOffset = getExtOffset(filename, len);
- if (extOffset != -1)
- {
- if ((extOffset <= len-4) && !_strnicmp(".pat", &filename[extOffset], 4)) return true;
- if ((extOffset <= len-3) && !_strnicmp(".xi", &filename[extOffset], 3)) return true;
- }
-
- return false;
-}
-
-bool fileIsSample(char *fullPath)
-{
- int32_t i, len;
-
- // this assumes that fullPath is not empty
-
- len = (int32_t)strlen(fullPath);
-
- // get filename from path
- i = len;
- while (i--)
- {
- if (fullPath[i] == DIR_DELIMITER)
- break;
- }
-
- char *filename = fullPath;
- if (i > 0)
- filename += i + 1;
- // --------------------------
-
- len = (int32_t)strlen(filename);
- if (len < 4)
- return true; // can't be a module
-
- if (!_strnicmp("xm.", filename, 3) || !_strnicmp("ft.", filename, 3) ||
- !_strnicmp("mod.", filename, 4) || !_strnicmp("nst.", filename, 4) ||
- !_strnicmp("s3m.", filename, 4) || !_strnicmp("stm.", filename, 4) ||
- !_strnicmp("fst.", filename, 4) || !_strnicmp("it.", filename, 3))
- {
- return false; // definitely a module
- }
-
- int32_t extOffset = getExtOffset(filename, len);
- if (extOffset != -1)
- {
- if (extOffset <= len-4)
- {
- filename = &filename[extOffset];
- if (!_strnicmp(".mod", filename, 4) || !_strnicmp(".nst", filename, 4) ||
- !_strnicmp(".s3m", filename, 4) || !_strnicmp(".stm", filename, 4) ||
- !_strnicmp(".fst", filename, 4))
- {
- return false; // definitely a module
- }
- }
- else if (extOffset <= len-3)
- {
- filename = &filename[extOffset];
- if (!_strnicmp(".xm", filename, 3) || !_strnicmp(".ft", filename, 3) || !_strnicmp(".it", filename, 3))
- return false; // definitely a module
- }
- }
-
- return true; // let's assume it's a sample
}
--- a/src/ft2_sample_loader.h
+++ b/src/ft2_sample_loader.h
@@ -2,9 +2,29 @@
#include <stdint.h>
#include <stdbool.h>
+#include "ft2_header.h"
#include "ft2_unicode.h"
+enum
+{
+ STEREO_SAMPLE_READ_LEFT = 1,
+ STEREO_SAMPLE_READ_RIGHT = 2,
+ STEREO_SAMPLE_CONVERT = 3,
+};
+
+void normalizeSigned32Bit(int32_t *sampleData, uint32_t sampleLength);
+void normalize32BitFloatToSigned16Bit(float *fSampleData, uint32_t sampleLength);
+void normalize64BitFloatToSigned16Bit(double *dSampleData, uint32_t sampleLength);
+
bool loadSample(UNICHAR *filenameU, uint8_t sampleSlot, bool loadAsInstrFlag);
-bool fileIsInstrument(char *fullPath);
-bool fileIsSample(char *fullPath);
void removeSampleIsLoadingFlag(void);
+
+// globals for sample loaders
+extern bool loadAsInstrFlag, smpFilenameSet;
+extern char *smpFilename;
+extern uint8_t sampleSlot;
+extern sampleTyp tmpSmp;
+// --------------------------
+
+// file extensions accepted by Disk Op. in sample mode
+extern char *supportedSmpExtensions[];
--- a/src/ft2_scopes.c
+++ b/src/ft2_scopes.c
@@ -23,8 +23,6 @@
#include "ft2_tables.h"
#include "ft2_structs.h"
-#define SCOPE_HEIGHT 36
-
static volatile bool scopesUpdatingFlag, scopesDisplayingFlag;
static uint32_t scopeTimeLen, scopeTimeLenFrac;
static uint64_t timeNext64, timeNext64Frac;
@@ -38,9 +36,9 @@
volatile scope_t *sc = scope;
for (int32_t i = 0; i < MAX_VOICES; i++, sc++)
{
- sc->oldPeriod = -1;
- sc->oldDrawDelta = 0;
+ sc->dOldHz = -1.0;
sc->oldDelta = 0;
+ sc->oldDrawDelta = 0;
}
}
@@ -353,10 +351,13 @@
return;
}
- // these has to be read
+ // these has to be copied so that they are not lost
tempState.wasCleared = sc->wasCleared;
tempState.delta = sc->delta;
+ tempState.oldDelta = sc->oldDelta;
tempState.drawDelta = sc->drawDelta;
+ tempState.oldDrawDelta = sc->oldDrawDelta;
+ tempState.dOldHz = sc->dOldHz;
tempState.vol = sc->vol;
tempState.active = true;
@@ -367,6 +368,7 @@
** the trigger never happens. So far I have never seen it happen,
** so it's probably very rare. Yes, this is not good coding...
*/
+
*sc = tempState;
}
@@ -386,8 +388,8 @@
// scope position update
s.posFrac += s.delta;
- const int32_t wholeSamples = (int32_t)(s.posFrac >> SCOPE_FRAC_BITS);
- s.posFrac &= SCOPE_FRAC_MASK;
+ const int32_t wholeSamples = s.posFrac >> 32;
+ s.posFrac &= 0xFFFFFFFF;
if (s.direction == 1)
s.pos += wholeSamples; // forwards
@@ -522,23 +524,20 @@
const uint8_t status = scopeUpdateStatus[i];
if (status & IS_Vol)
- sc->vol = (int32_t)((ch->dFinalVol * SCOPE_HEIGHT) + 0.5); // rounded
+ sc->vol = ((ch->vol * SCOPE_HEIGHT) + 128) >> 8; // rounded
if (status & IS_Period)
{
- // use cached values if possible
-
- const uint16_t period = ch->finalPeriod;
- if (period != sc->oldPeriod)
+ // use cached values when possible
+ if (ch->dHz != sc->dOldHz)
{
- sc->oldPeriod = period;
- const double dHz = dPeriod2Hz(period);
+ sc->dOldHz = ch->dHz;
- const double dScopeRateFactor = SCOPE_FRAC_SCALE / (double)SCOPE_HZ;
- sc->oldDelta = (int64_t)((dHz * dScopeRateFactor) + 0.5); // Hz -> rounded fixed-point delta
+ const double dHz2ScopeDeltaMul = SCOPE_FRAC_SCALE / (double)SCOPE_HZ;
+ sc->oldDelta = (int64_t)((ch->dHz * dHz2ScopeDeltaMul) + 0.5); // Hz -> 32.32fp delta (rounded)
- const double dRelativeHz = dHz * (1.0 / (8363.0 / 2.0));
- sc->oldDrawDelta = (int32_t)((dRelativeHz * SCOPE_DRAW_FRAC_SCALE) + 0.5); // Hz -> rounded fixed-point draw delta
+ const double dRelativeHz = ch->dHz * (1.0 / (8363.0 / 2.0));
+ sc->oldDrawDelta = (int32_t)((dRelativeHz * SCOPE_DRAW_FRAC_SCALE) + 0.5); // Hz -> 13.19fp draw delta (rounded)
}
sc->delta = sc->oldDelta;
--- a/src/ft2_scopes.h
+++ b/src/ft2_scopes.h
@@ -5,6 +5,8 @@
#include "ft2_header.h"
#include "ft2_audio.h"
+#define SCOPE_HEIGHT 36
+
#define SCOPE_FRAC_BITS 32
#define SCOPE_FRAC_SCALE (1ULL << SCOPE_FRAC_BITS)
#define SCOPE_FRAC_MASK (SCOPE_FRAC_SCALE-1)
@@ -31,9 +33,11 @@
const int16_t *base16;
bool wasCleared, sampleIs16Bit;
uint8_t loopType;
- int32_t vol, loopStart, loopLength, end, pos, direction, oldPeriod;
+ int32_t vol, loopStart, loopLength, end, pos, direction;
uint32_t drawDelta, oldDrawDelta;
- uint64_t delta, posFrac, oldDelta;
+ uint64_t delta, oldDelta, posFrac;
+
+ double dOldHz;
} scope_t;
typedef struct lastChInstr_t
--- a/src/ft2_sysreqs.c
+++ b/src/ft2_sysreqs.c
@@ -1,3 +1,4 @@
+#include <stdio.h> // vsnprintf()
#include <stdint.h>
#include <stdbool.h>
#include "ft2_config.h"
@@ -16,7 +17,11 @@
#define NUM_SYSREQ_TYPES 10
-okBoxData_t okBoxData; // globalized
+// globalized
+okBoxData_t okBoxData;
+void (*loaderMsgBox)(const char *, ...);
+int16_t (*loaderSysReq)(int16_t, const char *, const char *);
+// ----------------
static char *buttonText[NUM_SYSREQ_TYPES][5] =
{
@@ -69,6 +74,32 @@
{ "Are we at the end of a Fasttracker round?", 2 },
{ "Hope you're doing the compulsory \"Exit ceremony\" before pressing >OK<.", 1 },
};
+
+void myLoaderMsgBoxThreadSafe(const char *fmt, ...)
+{
+ char strBuf[512];
+ va_list args;
+
+ // format the text string
+ va_start(args, fmt);
+ vsnprintf(strBuf, sizeof (strBuf), fmt, args);
+ va_end(args);
+
+ okBoxThreadSafe(0, "System message", fmt);
+}
+
+void myLoaderMsgBox(const char *fmt, ...)
+{
+ char strBuf[512];
+ va_list args;
+
+ // format the text string
+ va_start(args, fmt);
+ vsnprintf(strBuf, sizeof (strBuf), fmt, args);
+ va_end(args);
+
+ okBox(0, "System message", fmt);
+}
static void drawWindow(uint16_t w)
{
--- a/src/ft2_sysreqs.h
+++ b/src/ft2_sysreqs.h
@@ -3,11 +3,11 @@
#include <stdint.h>
#include <stdbool.h>
-int16_t okBoxThreadSafe(int16_t typ, const char *headline, const char *text);
-int16_t okBox(int16_t typ, const char *headline, const char *text);
-int16_t quitBox(bool skipQuitMsg);
-int16_t inputBox(int16_t typ, const char *headline, char *edText, uint16_t maxStrLen);
-bool askUnsavedChanges(uint8_t type);
+enum
+{
+ ASK_TYPE_QUIT = 0,
+ ASK_TYPE_LOAD_SONG = 1,
+};
// for thread-safe version of okBox()
typedef struct okBoxData_t
@@ -17,10 +17,17 @@
const char *headline, *text;
} okBoxData_t;
-extern okBoxData_t okBoxData; // ft2_sysreqs.c
+int16_t okBoxThreadSafe(int16_t typ, const char *headline, const char *text);
+int16_t okBox(int16_t typ, const char *headline, const char *text);
+int16_t quitBox(bool skipQuitMsg);
+int16_t inputBox(int16_t typ, const char *headline, char *edText, uint16_t maxStrLen);
+bool askUnsavedChanges(uint8_t type);
-enum
-{
- ASK_TYPE_QUIT = 0,
- ASK_TYPE_LOAD_SONG = 1,
-};
+void myLoaderMsgBoxThreadSafe(const char *fmt, ...);
+void myLoaderMsgBox(const char *fmt, ...);
+
+ // ft2_sysreqs.c
+extern okBoxData_t okBoxData;
+extern void (*loaderMsgBox)(const char *, ...);
+extern int16_t (*loaderSysReq)(int16_t, const char *, const char *);
+// ---------------
--- a/src/ft2_tables.c
+++ b/src/ft2_tables.c
@@ -10,6 +10,13 @@
/* REPLAYER TABLES */
/* ----------------------------------------------------------------------- */
+const uint16_t ptPeriods[3 * 12] =
+{
+ 856,808,762,720,678,640,604,570,538,508,480,453,
+ 428,404,381,360,339,320,302,285,269,254,240,226,
+ 214,202,190,180,170,160,151,143,135,127,120,113
+};
+
const uint8_t arpTab[256] =
{
0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,
@@ -60,7 +67,7 @@
255,253,250,244,235,224,212,197,180,161,141,120, 97, 74, 49, 24
};
-const uint16_t amigaPeriod[12 * 8] = // used for .MOD loading/saving
+const uint16_t amigaPeriod[8 * 12] = // used for .MOD loading/saving
{
6848, 6464, 6096, 5760, 5424, 5120, 4832, 4560, 4304, 4064, 3840, 3624,
3424, 3232, 3048, 2880, 2712, 2560, 2416, 2280, 2152, 2032, 1920, 1812,
--- a/src/ft2_tables.h
+++ b/src/ft2_tables.h
@@ -10,10 +10,12 @@
#define KEY2EFX_ENTRIES (signed)(sizeof (key2EfxTab) / sizeof (SDL_Keycode))
#define KEY2HEX_ENTRIES (signed)(sizeof (key2HexTab) / sizeof (SDL_Keycode))
+extern const uint16_t ptPeriods[3 * 12];
+
extern const uint8_t arpTab[256];
extern const int8_t vibSineTab[256]; // for auto-vibrato
extern const uint8_t vibTab[32];
-extern const uint16_t amigaPeriod[12 * 8];
+extern const uint16_t amigaPeriod[8 * 12];
extern const uint16_t linearPeriods[1936];
extern const uint16_t amigaPeriods[1936];
--- a/src/helpdata/FT2.HLP
+++ b/src/helpdata/FT2.HLP
@@ -20,21 +20,27 @@
>- Full screen edit mode.
>- Improved editing facilities.
-@X040@C001FT2 supports the following file formats:
+@X040@C001The FT2 clone supports the following file formats:
@X040@C001Modules:
>@X060@C002
->- Standard modules (15- > 31-instruments). (MOD,NST)
->- Fasttracker v1.0 2,4,6,8..32-channel formats. (MOD)
->- ScreamTracker modules. (STM,S3M)
+>- Standard modules (15/31 samples). (MOD,NST,STK)
+>- Fasttracker II modules. (XM,MOD)
+>- Fasttracker modules. (MOD/FST)
>
+@X040@C001Experimental module support:
+>@X060@C002
+>- Scream Tracker 3 modules. (S3M)
+>- Scream Tracker 2 modules. (STM)
+>- DIGI Booster (non-Pro) modules. (DIGI)
+>
@X040@C001Samples:
>@X060@C002
>- Gravis Ultrasound Patches, PAT.
>- SMP/SAM/RAW/SND data files, signed and unsigned.
->- Windows WAV-files.
->- Amiga IFF-files. (Interchange File Format)
->- Apple AIFF-files.
+>- WAV files.
+>- Amiga IFF.
+>- Apple AIFF.
@X040@C001FT2 introduces several new file formats:
>@X060@C002
--- a/src/helpdata/ft2_help_data.h
+++ b/src/helpdata/ft2_help_data.h
@@ -3,9 +3,9 @@
#include <stdint.h>
-#define HELP_DATA_LEN 27371
+#define HELP_DATA_LEN 27476
-const uint8_t helpData[27371] =
+const uint8_t helpData[27476] =
{
0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
@@ -63,2231 +63,2240 @@
0x64,0x65,0x2E,0x1F,0x3E,0x2D,0x20,0x49,0x6D,0x70,0x72,0x6F,
0x76,0x65,0x64,0x20,0x65,0x64,0x69,0x74,0x69,0x6E,0x67,0x20,
0x66,0x61,0x63,0x69,0x6C,0x69,0x74,0x69,0x65,0x73,0x2E,0x00,
- 0x32,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x46,
- 0x54,0x32,0x20,0x73,0x75,0x70,0x70,0x6F,0x72,0x74,0x73,0x20,
- 0x74,0x68,0x65,0x20,0x66,0x6F,0x6C,0x6C,0x6F,0x77,0x69,0x6E,
- 0x67,0x20,0x66,0x69,0x6C,0x65,0x20,0x66,0x6F,0x72,0x6D,0x61,
- 0x74,0x73,0x3A,0x00,0x12,0x40,0x58,0x30,0x34,0x30,0x40,0x43,
- 0x30,0x30,0x31,0x4D,0x6F,0x64,0x75,0x6C,0x65,0x73,0x3A,0x0B,
- 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x35,
- 0x3E,0x2D,0x20,0x53,0x74,0x61,0x6E,0x64,0x61,0x72,0x64,0x20,
- 0x6D,0x6F,0x64,0x75,0x6C,0x65,0x73,0x20,0x28,0x31,0x35,0x2D,
- 0x20,0x3E,0x20,0x33,0x31,0x2D,0x69,0x6E,0x73,0x74,0x72,0x75,
- 0x6D,0x65,0x6E,0x74,0x73,0x29,0x2E,0x20,0x28,0x4D,0x4F,0x44,
- 0x2C,0x4E,0x53,0x54,0x29,0x36,0x3E,0x2D,0x20,0x46,0x61,0x73,
- 0x74,0x74,0x72,0x61,0x63,0x6B,0x65,0x72,0x20,0x76,0x31,0x2E,
- 0x30,0x20,0x32,0x2C,0x34,0x2C,0x36,0x2C,0x38,0x2E,0x2E,0x33,
- 0x32,0x2D,0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x20,0x66,0x6F,
- 0x72,0x6D,0x61,0x74,0x73,0x2E,0x20,0x28,0x4D,0x4F,0x44,0x29,
- 0x23,0x3E,0x2D,0x20,0x53,0x63,0x72,0x65,0x61,0x6D,0x54,0x72,
- 0x61,0x63,0x6B,0x65,0x72,0x20,0x6D,0x6F,0x64,0x75,0x6C,0x65,
- 0x73,0x2E,0x20,0x28,0x53,0x54,0x4D,0x2C,0x53,0x33,0x4D,0x29,
- 0x01,0x3E,0x12,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
- 0x31,0x53,0x61,0x6D,0x70,0x6C,0x65,0x73,0x3A,0x0B,0x3E,0x40,
- 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x22,0x3E,0x2D,
- 0x20,0x47,0x72,0x61,0x76,0x69,0x73,0x20,0x55,0x6C,0x74,0x72,
- 0x61,0x73,0x6F,0x75,0x6E,0x64,0x20,0x50,0x61,0x74,0x63,0x68,
- 0x65,0x73,0x2C,0x20,0x50,0x41,0x54,0x2E,0x33,0x3E,0x2D,0x20,
- 0x53,0x4D,0x50,0x2F,0x53,0x41,0x4D,0x2F,0x52,0x41,0x57,0x2F,
- 0x53,0x4E,0x44,0x20,0x64,0x61,0x74,0x61,0x20,0x66,0x69,0x6C,
- 0x65,0x73,0x2C,0x20,0x73,0x69,0x67,0x6E,0x65,0x64,0x20,0x61,
- 0x6E,0x64,0x20,0x75,0x6E,0x73,0x69,0x67,0x6E,0x65,0x64,0x2E,
- 0x15,0x3E,0x2D,0x20,0x57,0x69,0x6E,0x64,0x6F,0x77,0x73,0x20,
- 0x57,0x41,0x56,0x2D,0x66,0x69,0x6C,0x65,0x73,0x2E,0x2D,0x3E,
- 0x2D,0x20,0x41,0x6D,0x69,0x67,0x61,0x20,0x49,0x46,0x46,0x2D,
- 0x66,0x69,0x6C,0x65,0x73,0x2E,0x20,0x28,0x49,0x6E,0x74,0x65,
- 0x72,0x63,0x68,0x61,0x6E,0x67,0x65,0x20,0x46,0x69,0x6C,0x65,
- 0x20,0x46,0x6F,0x72,0x6D,0x61,0x74,0x29,0x14,0x3E,0x2D,0x20,
- 0x41,0x70,0x70,0x6C,0x65,0x20,0x41,0x49,0x46,0x46,0x2D,0x66,
- 0x69,0x6C,0x65,0x73,0x2E,0x00,0x32,0x40,0x58,0x30,0x34,0x30,
- 0x40,0x43,0x30,0x30,0x31,0x46,0x54,0x32,0x20,0x69,0x6E,0x74,
- 0x72,0x6F,0x64,0x75,0x63,0x65,0x73,0x20,0x73,0x65,0x76,0x65,
- 0x72,0x61,0x6C,0x20,0x6E,0x65,0x77,0x20,0x66,0x69,0x6C,0x65,
- 0x20,0x66,0x6F,0x72,0x6D,0x61,0x74,0x73,0x3A,0x0B,0x3E,0x40,
- 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x1C,0x3E,0x2D,
- 0x20,0x58,0x4D,0x20,0x20,0x40,0x54,0x31,0x31,0x30,0x45,0x78,
- 0x74,0x65,0x6E,0x64,0x65,0x64,0x20,0x6D,0x6F,0x64,0x75,0x6C,
- 0x65,0x2E,0x20,0x3E,0x2D,0x20,0x58,0x49,0x20,0x20,0x40,0x54,
+ 0x3C,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x54,
+ 0x68,0x65,0x20,0x46,0x54,0x32,0x20,0x63,0x6C,0x6F,0x6E,0x65,
+ 0x20,0x73,0x75,0x70,0x70,0x6F,0x72,0x74,0x73,0x20,0x74,0x68,
+ 0x65,0x20,0x66,0x6F,0x6C,0x6C,0x6F,0x77,0x69,0x6E,0x67,0x20,
+ 0x66,0x69,0x6C,0x65,0x20,0x66,0x6F,0x72,0x6D,0x61,0x74,0x73,
+ 0x3A,0x00,0x12,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
+ 0x31,0x4D,0x6F,0x64,0x75,0x6C,0x65,0x73,0x3A,0x0B,0x3E,0x40,
+ 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x32,0x3E,0x2D,
+ 0x20,0x53,0x74,0x61,0x6E,0x64,0x61,0x72,0x64,0x20,0x6D,0x6F,
+ 0x64,0x75,0x6C,0x65,0x73,0x20,0x28,0x31,0x35,0x2F,0x33,0x31,
+ 0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x73,0x29,0x2E,0x20,0x28,
+ 0x4D,0x4F,0x44,0x2C,0x4E,0x53,0x54,0x2C,0x53,0x54,0x4B,0x29,
+ 0x23,0x3E,0x2D,0x20,0x46,0x61,0x73,0x74,0x74,0x72,0x61,0x63,
+ 0x6B,0x65,0x72,0x20,0x49,0x49,0x20,0x6D,0x6F,0x64,0x75,0x6C,
+ 0x65,0x73,0x2E,0x20,0x28,0x58,0x4D,0x2C,0x4D,0x4F,0x44,0x29,
+ 0x21,0x3E,0x2D,0x20,0x46,0x61,0x73,0x74,0x74,0x72,0x61,0x63,
+ 0x6B,0x65,0x72,0x20,0x6D,0x6F,0x64,0x75,0x6C,0x65,0x73,0x2E,
+ 0x20,0x28,0x4D,0x4F,0x44,0x2F,0x46,0x53,0x54,0x29,0x01,0x3E,
+ 0x26,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x45,
+ 0x78,0x70,0x65,0x72,0x69,0x6D,0x65,0x6E,0x74,0x61,0x6C,0x20,
+ 0x6D,0x6F,0x64,0x75,0x6C,0x65,0x20,0x73,0x75,0x70,0x70,0x6F,
+ 0x72,0x74,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
+ 0x30,0x30,0x32,0x22,0x3E,0x2D,0x20,0x53,0x63,0x72,0x65,0x61,
+ 0x6D,0x20,0x54,0x72,0x61,0x63,0x6B,0x65,0x72,0x20,0x33,0x20,
+ 0x6D,0x6F,0x64,0x75,0x6C,0x65,0x73,0x2E,0x20,0x28,0x53,0x33,
+ 0x4D,0x29,0x22,0x3E,0x2D,0x20,0x53,0x63,0x72,0x65,0x61,0x6D,
+ 0x20,0x54,0x72,0x61,0x63,0x6B,0x65,0x72,0x20,0x32,0x20,0x6D,
+ 0x6F,0x64,0x75,0x6C,0x65,0x73,0x2E,0x20,0x28,0x53,0x54,0x4D,
+ 0x29,0x29,0x3E,0x2D,0x20,0x44,0x49,0x47,0x49,0x20,0x42,0x6F,
+ 0x6F,0x73,0x74,0x65,0x72,0x20,0x28,0x6E,0x6F,0x6E,0x2D,0x50,
+ 0x72,0x6F,0x29,0x20,0x6D,0x6F,0x64,0x75,0x6C,0x65,0x73,0x2E,
+ 0x20,0x28,0x44,0x49,0x47,0x49,0x29,0x01,0x3E,0x12,0x40,0x58,
+ 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x61,0x6D,0x70,
+ 0x6C,0x65,0x73,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
+ 0x43,0x30,0x30,0x32,0x22,0x3E,0x2D,0x20,0x47,0x72,0x61,0x76,
+ 0x69,0x73,0x20,0x55,0x6C,0x74,0x72,0x61,0x73,0x6F,0x75,0x6E,
+ 0x64,0x20,0x50,0x61,0x74,0x63,0x68,0x65,0x73,0x2C,0x20,0x50,
+ 0x41,0x54,0x2E,0x33,0x3E,0x2D,0x20,0x53,0x4D,0x50,0x2F,0x53,
+ 0x41,0x4D,0x2F,0x52,0x41,0x57,0x2F,0x53,0x4E,0x44,0x20,0x64,
+ 0x61,0x74,0x61,0x20,0x66,0x69,0x6C,0x65,0x73,0x2C,0x20,0x73,
+ 0x69,0x67,0x6E,0x65,0x64,0x20,0x61,0x6E,0x64,0x20,0x75,0x6E,
+ 0x73,0x69,0x67,0x6E,0x65,0x64,0x2E,0x0D,0x3E,0x2D,0x20,0x57,
+ 0x41,0x56,0x20,0x66,0x69,0x6C,0x65,0x73,0x2E,0x0D,0x3E,0x2D,
+ 0x20,0x41,0x6D,0x69,0x67,0x61,0x20,0x49,0x46,0x46,0x2E,0x0E,
+ 0x3E,0x2D,0x20,0x41,0x70,0x70,0x6C,0x65,0x20,0x41,0x49,0x46,
+ 0x46,0x2E,0x00,0x32,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
+ 0x30,0x31,0x46,0x54,0x32,0x20,0x69,0x6E,0x74,0x72,0x6F,0x64,
+ 0x75,0x63,0x65,0x73,0x20,0x73,0x65,0x76,0x65,0x72,0x61,0x6C,
+ 0x20,0x6E,0x65,0x77,0x20,0x66,0x69,0x6C,0x65,0x20,0x66,0x6F,
+ 0x72,0x6D,0x61,0x74,0x73,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,
+ 0x30,0x40,0x43,0x30,0x30,0x32,0x1C,0x3E,0x2D,0x20,0x58,0x4D,
+ 0x20,0x20,0x40,0x54,0x31,0x31,0x30,0x45,0x78,0x74,0x65,0x6E,
+ 0x64,0x65,0x64,0x20,0x6D,0x6F,0x64,0x75,0x6C,0x65,0x2E,0x20,
+ 0x3E,0x2D,0x20,0x58,0x49,0x20,0x20,0x40,0x54,0x31,0x31,0x30,
+ 0x45,0x78,0x74,0x65,0x6E,0x64,0x65,0x64,0x20,0x69,0x6E,0x73,
+ 0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x2E,0x1D,0x3E,0x2D,0x20,
+ 0x58,0x50,0x20,0x20,0x40,0x54,0x31,0x31,0x30,0x45,0x78,0x74,
+ 0x65,0x6E,0x64,0x65,0x64,0x20,0x70,0x61,0x74,0x74,0x65,0x72,
+ 0x6E,0x2E,0x1B,0x3E,0x2D,0x20,0x58,0x54,0x20,0x20,0x40,0x54,
0x31,0x31,0x30,0x45,0x78,0x74,0x65,0x6E,0x64,0x65,0x64,0x20,
- 0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x2E,0x1D,
- 0x3E,0x2D,0x20,0x58,0x50,0x20,0x20,0x40,0x54,0x31,0x31,0x30,
- 0x45,0x78,0x74,0x65,0x6E,0x64,0x65,0x64,0x20,0x70,0x61,0x74,
- 0x74,0x65,0x72,0x6E,0x2E,0x1B,0x3E,0x2D,0x20,0x58,0x54,0x20,
- 0x20,0x40,0x54,0x31,0x31,0x30,0x45,0x78,0x74,0x65,0x6E,0x64,
- 0x65,0x64,0x20,0x74,0x72,0x61,0x63,0x6B,0x2E,0x00,0x03,0x45,
- 0x4E,0x44,0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
+ 0x74,0x72,0x61,0x63,0x6B,0x2E,0x00,0x03,0x45,0x4E,0x44,0x4C,
+ 0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
- 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x4C,0x3B,0x2A,0x2A,0x2A,
+ 0x2A,0x2A,0x2A,0x2A,0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
- 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
- 0x09,0x40,0x4C,0x45,0x66,0x66,0x65,0x63,0x74,0x73,0x00,0x18,
- 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x68,
- 0x6F,0x72,0x74,0x20,0x73,0x75,0x6D,0x6D,0x61,0x72,0x79,0x3A,
- 0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
- 0x0B,0x3E,0x30,0x20,0x41,0x72,0x70,0x65,0x67,0x67,0x69,0x6F,
- 0x10,0x3E,0x31,0x20,0x50,0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,
- 0x74,0x6F,0x20,0x75,0x70,0x12,0x3E,0x32,0x20,0x50,0x6F,0x72,
- 0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,0x64,0x6F,0x77,0x6E,
- 0x12,0x3E,0x33,0x20,0x54,0x6F,0x6E,0x65,0x20,0x70,0x6F,0x72,
- 0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x0A,0x3E,0x34,0x20,0x56,
- 0x69,0x62,0x72,0x61,0x74,0x6F,0x1C,0x3E,0x35,0x20,0x50,0x6F,
- 0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,0x2B,0x20,0x56,
- 0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,0x19,
- 0x3E,0x36,0x20,0x56,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x2B,
- 0x20,0x56,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,
- 0x65,0x0A,0x3E,0x37,0x20,0x54,0x72,0x65,0x6D,0x6F,0x6C,0x6F,
- 0x17,0x3E,0x38,0x20,0x53,0x65,0x74,0x20,0x70,0x61,0x6E,0x6E,
- 0x69,0x6E,0x67,0x20,0x70,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,
- 0x10,0x3E,0x39,0x20,0x53,0x61,0x6D,0x70,0x6C,0x65,0x20,0x6F,
- 0x66,0x66,0x73,0x65,0x74,0x0F,0x3E,0x41,0x20,0x56,0x6F,0x6C,
- 0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,0x10,0x3E,0x42,
- 0x20,0x50,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x20,0x6A,0x75,
- 0x6D,0x70,0x0D,0x3E,0x43,0x20,0x53,0x65,0x74,0x20,0x76,0x6F,
- 0x6C,0x75,0x6D,0x65,0x10,0x3E,0x44,0x20,0x50,0x61,0x74,0x74,
- 0x65,0x72,0x6E,0x20,0x62,0x72,0x65,0x61,0x6B,0x04,0x3E,0x45,
- 0x20,0x2B,0x23,0x3E,0x40,0x58,0x30,0x38,0x30,0x30,0x20,0x46,
- 0x69,0x6C,0x74,0x65,0x72,0x20,0x6F,0x6E,0x2F,0x6F,0x66,0x66,
- 0x20,0x28,0x41,0x6D,0x69,0x67,0x61,0x20,0x6F,0x6E,0x6C,0x79,
- 0x21,0x29,0x15,0x3E,0x31,0x20,0x46,0x69,0x6E,0x65,0x20,0x70,
- 0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,0x75,0x70,
- 0x17,0x3E,0x32,0x20,0x46,0x69,0x6E,0x65,0x20,0x70,0x6F,0x72,
- 0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,0x64,0x6F,0x77,0x6E,
- 0x18,0x3E,0x33,0x20,0x53,0x65,0x74,0x20,0x67,0x6C,0x69,0x73,
- 0x73,0x61,0x6E,0x64,0x6F,0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F,
- 0x6C,0x16,0x3E,0x34,0x20,0x53,0x65,0x74,0x20,0x76,0x69,0x62,
- 0x72,0x61,0x74,0x6F,0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,
- 0x10,0x3E,0x35,0x20,0x53,0x65,0x74,0x20,0x66,0x69,0x6E,0x65,
- 0x2D,0x74,0x75,0x6E,0x65,0x0C,0x3E,0x36,0x20,0x4A,0x75,0x6D,
- 0x70,0x20,0x6C,0x6F,0x6F,0x70,0x16,0x3E,0x37,0x20,0x53,0x65,
- 0x74,0x20,0x74,0x72,0x65,0x6D,0x6F,0x6C,0x6F,0x20,0x63,0x6F,
- 0x6E,0x74,0x72,0x6F,0x6C,0x09,0x3E,0x38,0x20,0x55,0x6E,0x75,
- 0x73,0x65,0x64,0x0E,0x3E,0x39,0x20,0x52,0x65,0x74,0x72,0x69,
- 0x67,0x20,0x6E,0x6F,0x74,0x65,0x17,0x3E,0x41,0x20,0x46,0x69,
- 0x6E,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,0x6C,
- 0x69,0x64,0x65,0x20,0x75,0x70,0x19,0x3E,0x42,0x20,0x46,0x69,
- 0x6E,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,0x6C,
- 0x69,0x64,0x65,0x20,0x64,0x6F,0x77,0x6E,0x0B,0x3E,0x43,0x20,
- 0x4E,0x6F,0x74,0x65,0x20,0x63,0x75,0x74,0x0D,0x3E,0x44,0x20,
- 0x4E,0x6F,0x74,0x65,0x20,0x64,0x65,0x6C,0x61,0x79,0x10,0x3E,
- 0x45,0x20,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x64,0x65,
- 0x6C,0x61,0x79,0x1D,0x3E,0x46,0x20,0x46,0x75,0x6E,0x6B,0x20,
- 0x69,0x74,0x21,0x20,0x28,0x4E,0x6F,0x74,0x20,0x69,0x6D,0x70,
- 0x6C,0x65,0x6D,0x65,0x6E,0x74,0x65,0x64,0x29,0x06,0x3E,0x40,
- 0x58,0x30,0x36,0x30,0x0B,0x46,0x20,0x53,0x65,0x74,0x20,0x73,
- 0x70,0x65,0x65,0x64,0x14,0x3E,0x47,0x20,0x53,0x65,0x74,0x20,
- 0x67,0x6C,0x6F,0x62,0x61,0x6C,0x20,0x76,0x6F,0x6C,0x75,0x6D,
- 0x65,0x16,0x3E,0x48,0x20,0x47,0x6C,0x6F,0x62,0x61,0x6C,0x20,
+ 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x09,0x40,0x4C,
+ 0x45,0x66,0x66,0x65,0x63,0x74,0x73,0x00,0x18,0x40,0x58,0x30,
+ 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x68,0x6F,0x72,0x74,
+ 0x20,0x73,0x75,0x6D,0x6D,0x61,0x72,0x79,0x3A,0x0B,0x3E,0x40,
+ 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x0B,0x3E,0x30,
+ 0x20,0x41,0x72,0x70,0x65,0x67,0x67,0x69,0x6F,0x10,0x3E,0x31,
+ 0x20,0x50,0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,
+ 0x75,0x70,0x12,0x3E,0x32,0x20,0x50,0x6F,0x72,0x74,0x61,0x6D,
+ 0x65,0x6E,0x74,0x6F,0x20,0x64,0x6F,0x77,0x6E,0x12,0x3E,0x33,
+ 0x20,0x54,0x6F,0x6E,0x65,0x20,0x70,0x6F,0x72,0x74,0x61,0x6D,
+ 0x65,0x6E,0x74,0x6F,0x0A,0x3E,0x34,0x20,0x56,0x69,0x62,0x72,
+ 0x61,0x74,0x6F,0x1C,0x3E,0x35,0x20,0x50,0x6F,0x72,0x74,0x61,
+ 0x6D,0x65,0x6E,0x74,0x6F,0x20,0x2B,0x20,0x56,0x6F,0x6C,0x75,
+ 0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,0x19,0x3E,0x36,0x20,
+ 0x56,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x2B,0x20,0x56,0x6F,
+ 0x6C,0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,0x0A,0x3E,
+ 0x37,0x20,0x54,0x72,0x65,0x6D,0x6F,0x6C,0x6F,0x17,0x3E,0x38,
+ 0x20,0x53,0x65,0x74,0x20,0x70,0x61,0x6E,0x6E,0x69,0x6E,0x67,
+ 0x20,0x70,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x10,0x3E,0x39,
+ 0x20,0x53,0x61,0x6D,0x70,0x6C,0x65,0x20,0x6F,0x66,0x66,0x73,
+ 0x65,0x74,0x0F,0x3E,0x41,0x20,0x56,0x6F,0x6C,0x75,0x6D,0x65,
+ 0x20,0x73,0x6C,0x69,0x64,0x65,0x10,0x3E,0x42,0x20,0x50,0x6F,
+ 0x73,0x69,0x74,0x69,0x6F,0x6E,0x20,0x6A,0x75,0x6D,0x70,0x0D,
+ 0x3E,0x43,0x20,0x53,0x65,0x74,0x20,0x76,0x6F,0x6C,0x75,0x6D,
+ 0x65,0x10,0x3E,0x44,0x20,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,
+ 0x20,0x62,0x72,0x65,0x61,0x6B,0x04,0x3E,0x45,0x20,0x2B,0x23,
+ 0x3E,0x40,0x58,0x30,0x38,0x30,0x30,0x20,0x46,0x69,0x6C,0x74,
+ 0x65,0x72,0x20,0x6F,0x6E,0x2F,0x6F,0x66,0x66,0x20,0x28,0x41,
+ 0x6D,0x69,0x67,0x61,0x20,0x6F,0x6E,0x6C,0x79,0x21,0x29,0x15,
+ 0x3E,0x31,0x20,0x46,0x69,0x6E,0x65,0x20,0x70,0x6F,0x72,0x74,
+ 0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,0x75,0x70,0x17,0x3E,0x32,
+ 0x20,0x46,0x69,0x6E,0x65,0x20,0x70,0x6F,0x72,0x74,0x61,0x6D,
+ 0x65,0x6E,0x74,0x6F,0x20,0x64,0x6F,0x77,0x6E,0x18,0x3E,0x33,
+ 0x20,0x53,0x65,0x74,0x20,0x67,0x6C,0x69,0x73,0x73,0x61,0x6E,
+ 0x64,0x6F,0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x16,0x3E,
+ 0x34,0x20,0x53,0x65,0x74,0x20,0x76,0x69,0x62,0x72,0x61,0x74,
+ 0x6F,0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x10,0x3E,0x35,
+ 0x20,0x53,0x65,0x74,0x20,0x66,0x69,0x6E,0x65,0x2D,0x74,0x75,
+ 0x6E,0x65,0x0C,0x3E,0x36,0x20,0x4A,0x75,0x6D,0x70,0x20,0x6C,
+ 0x6F,0x6F,0x70,0x16,0x3E,0x37,0x20,0x53,0x65,0x74,0x20,0x74,
+ 0x72,0x65,0x6D,0x6F,0x6C,0x6F,0x20,0x63,0x6F,0x6E,0x74,0x72,
+ 0x6F,0x6C,0x09,0x3E,0x38,0x20,0x55,0x6E,0x75,0x73,0x65,0x64,
+ 0x0E,0x3E,0x39,0x20,0x52,0x65,0x74,0x72,0x69,0x67,0x20,0x6E,
+ 0x6F,0x74,0x65,0x17,0x3E,0x41,0x20,0x46,0x69,0x6E,0x65,0x20,
0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,
- 0x0A,0x3E,0x4B,0x20,0x4B,0x65,0x79,0x20,0x6F,0x66,0x66,0x18,
- 0x3E,0x4C,0x20,0x53,0x65,0x74,0x20,0x65,0x6E,0x76,0x65,0x6C,
- 0x6F,0x70,0x65,0x20,0x70,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,
- 0x10,0x3E,0x50,0x20,0x50,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,
- 0x73,0x6C,0x69,0x64,0x65,0x14,0x3E,0x52,0x20,0x4D,0x75,0x6C,
- 0x74,0x69,0x20,0x72,0x65,0x74,0x72,0x69,0x67,0x20,0x6E,0x6F,
- 0x74,0x65,0x09,0x3E,0x54,0x20,0x54,0x72,0x65,0x6D,0x6F,0x72,
- 0x04,0x3E,0x58,0x20,0x2B,0x20,0x3E,0x40,0x58,0x30,0x38,0x30,
- 0x31,0x20,0x45,0x78,0x74,0x72,0x61,0x20,0x66,0x69,0x6E,0x65,
- 0x20,0x70,0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,
- 0x75,0x70,0x1D,0x3E,0x32,0x20,0x45,0x78,0x74,0x72,0x61,0x20,
- 0x66,0x69,0x6E,0x65,0x20,0x70,0x6F,0x72,0x74,0x61,0x6D,0x65,
- 0x6E,0x74,0x6F,0x20,0x64,0x6F,0x77,0x6E,0x00,0x18,0x40,0x58,
- 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x56,0x6F,0x6C,0x75,
- 0x6D,0x65,0x20,0x63,0x6F,0x6C,0x75,0x6D,0x6E,0x3A,0x0B,0x3E,
- 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x17,0x30,
- 0x30,0x2E,0x2E,0x34,0x30,0x20,0x40,0x54,0x31,0x36,0x30,0x53,
- 0x65,0x74,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x2E,0x01,0x3E,
- 0x1A,0x3E,0x2D,0x20,0x40,0x54,0x31,0x36,0x30,0x56,0x6F,0x6C,
- 0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,0x20,0x64,0x6F,
- 0x77,0x6E,0x2E,0x18,0x3E,0x2B,0x20,0x40,0x54,0x31,0x36,0x30,
- 0x56,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,
- 0x20,0x75,0x70,0x2E,0x35,0x3E,0x44,0x20,0x40,0x54,0x31,0x36,
- 0x30,0x46,0x69,0x6E,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,
- 0x20,0x73,0x6C,0x69,0x64,0x65,0x20,0x64,0x6F,0x77,0x6E,0x2E,
- 0x20,0x28,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x65,0x64,0x20,
- 0x62,0x79,0x20,0x73,0x79,0x6D,0x62,0x6F,0x6C,0x29,0x33,0x3E,
- 0x55,0x20,0x40,0x54,0x31,0x36,0x30,0x46,0x69,0x6E,0x65,0x20,
+ 0x20,0x75,0x70,0x19,0x3E,0x42,0x20,0x46,0x69,0x6E,0x65,0x20,
0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,
- 0x20,0x75,0x70,0x2E,0x20,0x28,0x49,0x6E,0x64,0x69,0x63,0x61,
- 0x74,0x65,0x64,0x20,0x62,0x79,0x20,0x73,0x79,0x6D,0x62,0x6F,
- 0x6C,0x29,0x1A,0x3E,0x53,0x20,0x40,0x54,0x31,0x36,0x30,0x53,
- 0x65,0x74,0x20,0x76,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x73,
- 0x70,0x65,0x65,0x64,0x2E,0x10,0x3E,0x56,0x20,0x40,0x54,0x31,
- 0x36,0x30,0x56,0x69,0x62,0x72,0x61,0x74,0x6F,0x2E,0x1D,0x3E,
- 0x50,0x20,0x40,0x54,0x31,0x36,0x30,0x53,0x65,0x74,0x20,0x70,
- 0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x70,0x6F,0x73,0x69,0x74,
- 0x69,0x6F,0x6E,0x2E,0x32,0x3E,0x52,0x20,0x40,0x54,0x31,0x36,
- 0x30,0x50,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x73,0x6C,0x69,
- 0x64,0x65,0x20,0x72,0x69,0x67,0x68,0x74,0x2E,0x20,0x28,0x49,
+ 0x20,0x64,0x6F,0x77,0x6E,0x0B,0x3E,0x43,0x20,0x4E,0x6F,0x74,
+ 0x65,0x20,0x63,0x75,0x74,0x0D,0x3E,0x44,0x20,0x4E,0x6F,0x74,
+ 0x65,0x20,0x64,0x65,0x6C,0x61,0x79,0x10,0x3E,0x45,0x20,0x50,
+ 0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x64,0x65,0x6C,0x61,0x79,
+ 0x1D,0x3E,0x46,0x20,0x46,0x75,0x6E,0x6B,0x20,0x69,0x74,0x21,
+ 0x20,0x28,0x4E,0x6F,0x74,0x20,0x69,0x6D,0x70,0x6C,0x65,0x6D,
+ 0x65,0x6E,0x74,0x65,0x64,0x29,0x06,0x3E,0x40,0x58,0x30,0x36,
+ 0x30,0x0B,0x46,0x20,0x53,0x65,0x74,0x20,0x73,0x70,0x65,0x65,
+ 0x64,0x14,0x3E,0x47,0x20,0x53,0x65,0x74,0x20,0x67,0x6C,0x6F,
+ 0x62,0x61,0x6C,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x16,0x3E,
+ 0x48,0x20,0x47,0x6C,0x6F,0x62,0x61,0x6C,0x20,0x76,0x6F,0x6C,
+ 0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,0x0A,0x3E,0x4B,
+ 0x20,0x4B,0x65,0x79,0x20,0x6F,0x66,0x66,0x18,0x3E,0x4C,0x20,
+ 0x53,0x65,0x74,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,
+ 0x20,0x70,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x10,0x3E,0x50,
+ 0x20,0x50,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x73,0x6C,0x69,
+ 0x64,0x65,0x14,0x3E,0x52,0x20,0x4D,0x75,0x6C,0x74,0x69,0x20,
+ 0x72,0x65,0x74,0x72,0x69,0x67,0x20,0x6E,0x6F,0x74,0x65,0x09,
+ 0x3E,0x54,0x20,0x54,0x72,0x65,0x6D,0x6F,0x72,0x04,0x3E,0x58,
+ 0x20,0x2B,0x20,0x3E,0x40,0x58,0x30,0x38,0x30,0x31,0x20,0x45,
+ 0x78,0x74,0x72,0x61,0x20,0x66,0x69,0x6E,0x65,0x20,0x70,0x6F,
+ 0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,0x75,0x70,0x1D,
+ 0x3E,0x32,0x20,0x45,0x78,0x74,0x72,0x61,0x20,0x66,0x69,0x6E,
+ 0x65,0x20,0x70,0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,
+ 0x20,0x64,0x6F,0x77,0x6E,0x00,0x18,0x40,0x58,0x30,0x34,0x30,
+ 0x40,0x43,0x30,0x30,0x31,0x56,0x6F,0x6C,0x75,0x6D,0x65,0x20,
+ 0x63,0x6F,0x6C,0x75,0x6D,0x6E,0x3A,0x0B,0x3E,0x40,0x58,0x30,
+ 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x17,0x30,0x30,0x2E,0x2E,
+ 0x34,0x30,0x20,0x40,0x54,0x31,0x36,0x30,0x53,0x65,0x74,0x20,
+ 0x76,0x6F,0x6C,0x75,0x6D,0x65,0x2E,0x01,0x3E,0x1A,0x3E,0x2D,
+ 0x20,0x40,0x54,0x31,0x36,0x30,0x56,0x6F,0x6C,0x75,0x6D,0x65,
+ 0x20,0x73,0x6C,0x69,0x64,0x65,0x20,0x64,0x6F,0x77,0x6E,0x2E,
+ 0x18,0x3E,0x2B,0x20,0x40,0x54,0x31,0x36,0x30,0x56,0x6F,0x6C,
+ 0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,0x20,0x75,0x70,
+ 0x2E,0x35,0x3E,0x44,0x20,0x40,0x54,0x31,0x36,0x30,0x46,0x69,
+ 0x6E,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,0x6C,
+ 0x69,0x64,0x65,0x20,0x64,0x6F,0x77,0x6E,0x2E,0x20,0x28,0x49,
0x6E,0x64,0x69,0x63,0x61,0x74,0x65,0x64,0x20,0x62,0x79,0x20,
- 0x73,0x79,0x6D,0x62,0x6F,0x6C,0x29,0x31,0x3E,0x4C,0x20,0x40,
- 0x54,0x31,0x36,0x30,0x50,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,
- 0x73,0x6C,0x69,0x64,0x65,0x20,0x6C,0x65,0x66,0x74,0x2E,0x20,
- 0x28,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x65,0x64,0x20,0x62,
- 0x79,0x20,0x73,0x79,0x6D,0x62,0x6F,0x6C,0x29,0x18,0x3E,0x4D,
- 0x20,0x40,0x54,0x31,0x36,0x30,0x54,0x6F,0x6E,0x65,0x20,0x70,
- 0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x2E,0x00,0x00,
- 0x1B,0x40,0x4C,0x40,0x58,0x30,0x30,0x30,0x44,0x65,0x74,0x61,
- 0x69,0x6C,0x65,0x64,0x20,0x69,0x6E,0x66,0x6F,0x72,0x6D,0x61,
- 0x74,0x69,0x6F,0x6E,0x00,0x12,0x40,0x58,0x30,0x34,0x30,0x40,
- 0x43,0x30,0x30,0x31,0x41,0x72,0x70,0x65,0x67,0x67,0x69,0x6F,
- 0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
- 0x27,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x30,0x20,0x2B,
- 0x20,0x31,0x73,0x74,0x20,0x68,0x61,0x6C,0x66,0x74,0x6F,0x6E,
- 0x65,0x20,0x2B,0x20,0x32,0x6E,0x64,0x20,0x68,0x61,0x6C,0x66,
- 0x74,0x6F,0x6E,0x65,0x00,0x0D,0x45,0x78,0x2E,0x3A,0x20,0x43,
- 0x2D,0x31,0x20,0x20,0x30,0x33,0x37,0x00,0x16,0x3E,0x31,0x30,
- 0x20,0x50,0x6C,0x61,0x79,0x73,0x20,0x43,0x2D,0x31,0x20,0x74,
- 0x69,0x63,0x6B,0x20,0x23,0x31,0x2E,0x26,0x3E,0x32,0x30,0x20,
+ 0x73,0x79,0x6D,0x62,0x6F,0x6C,0x29,0x33,0x3E,0x55,0x20,0x40,
+ 0x54,0x31,0x36,0x30,0x46,0x69,0x6E,0x65,0x20,0x76,0x6F,0x6C,
+ 0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,0x20,0x75,0x70,
+ 0x2E,0x20,0x28,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x65,0x64,
+ 0x20,0x62,0x79,0x20,0x73,0x79,0x6D,0x62,0x6F,0x6C,0x29,0x1A,
+ 0x3E,0x53,0x20,0x40,0x54,0x31,0x36,0x30,0x53,0x65,0x74,0x20,
+ 0x76,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x73,0x70,0x65,0x65,
+ 0x64,0x2E,0x10,0x3E,0x56,0x20,0x40,0x54,0x31,0x36,0x30,0x56,
+ 0x69,0x62,0x72,0x61,0x74,0x6F,0x2E,0x1D,0x3E,0x50,0x20,0x40,
+ 0x54,0x31,0x36,0x30,0x53,0x65,0x74,0x20,0x70,0x61,0x6E,0x6E,
+ 0x69,0x6E,0x67,0x20,0x70,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,
+ 0x2E,0x32,0x3E,0x52,0x20,0x40,0x54,0x31,0x36,0x30,0x50,0x61,
+ 0x6E,0x6E,0x69,0x6E,0x67,0x20,0x73,0x6C,0x69,0x64,0x65,0x20,
+ 0x72,0x69,0x67,0x68,0x74,0x2E,0x20,0x28,0x49,0x6E,0x64,0x69,
+ 0x63,0x61,0x74,0x65,0x64,0x20,0x62,0x79,0x20,0x73,0x79,0x6D,
+ 0x62,0x6F,0x6C,0x29,0x31,0x3E,0x4C,0x20,0x40,0x54,0x31,0x36,
+ 0x30,0x50,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x73,0x6C,0x69,
+ 0x64,0x65,0x20,0x6C,0x65,0x66,0x74,0x2E,0x20,0x28,0x49,0x6E,
+ 0x64,0x69,0x63,0x61,0x74,0x65,0x64,0x20,0x62,0x79,0x20,0x73,
+ 0x79,0x6D,0x62,0x6F,0x6C,0x29,0x18,0x3E,0x4D,0x20,0x40,0x54,
+ 0x31,0x36,0x30,0x54,0x6F,0x6E,0x65,0x20,0x70,0x6F,0x72,0x74,
+ 0x61,0x6D,0x65,0x6E,0x74,0x6F,0x2E,0x00,0x00,0x1B,0x40,0x4C,
+ 0x40,0x58,0x30,0x30,0x30,0x44,0x65,0x74,0x61,0x69,0x6C,0x65,
+ 0x64,0x20,0x69,0x6E,0x66,0x6F,0x72,0x6D,0x61,0x74,0x69,0x6F,
+ 0x6E,0x00,0x12,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
+ 0x31,0x41,0x72,0x70,0x65,0x67,0x67,0x69,0x6F,0x0B,0x3E,0x40,
+ 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x27,0x53,0x79,
+ 0x6E,0x74,0x61,0x78,0x3A,0x20,0x30,0x20,0x2B,0x20,0x31,0x73,
+ 0x74,0x20,0x68,0x61,0x6C,0x66,0x74,0x6F,0x6E,0x65,0x20,0x2B,
+ 0x20,0x32,0x6E,0x64,0x20,0x68,0x61,0x6C,0x66,0x74,0x6F,0x6E,
+ 0x65,0x00,0x0D,0x45,0x78,0x2E,0x3A,0x20,0x43,0x2D,0x31,0x20,
+ 0x20,0x30,0x33,0x37,0x00,0x16,0x3E,0x31,0x30,0x20,0x50,0x6C,
+ 0x61,0x79,0x73,0x20,0x43,0x2D,0x31,0x20,0x74,0x69,0x63,0x6B,
+ 0x20,0x23,0x31,0x2E,0x26,0x3E,0x32,0x30,0x20,0x50,0x6C,0x61,
+ 0x79,0x73,0x20,0x43,0x2D,0x31,0x20,0x2B,0x20,0x33,0x20,0x4E,
+ 0x6F,0x74,0x65,0x73,0x20,0x3D,0x20,0x44,0x23,0x31,0x20,0x74,
+ 0x69,0x63,0x6B,0x20,0x23,0x32,0x2E,0x26,0x3E,0x33,0x30,0x20,
0x50,0x6C,0x61,0x79,0x73,0x20,0x43,0x2D,0x31,0x20,0x2B,0x20,
- 0x33,0x20,0x4E,0x6F,0x74,0x65,0x73,0x20,0x3D,0x20,0x44,0x23,
- 0x31,0x20,0x74,0x69,0x63,0x6B,0x20,0x23,0x32,0x2E,0x26,0x3E,
- 0x33,0x30,0x20,0x50,0x6C,0x61,0x79,0x73,0x20,0x43,0x2D,0x31,
- 0x20,0x2B,0x20,0x37,0x20,0x4E,0x6F,0x74,0x65,0x73,0x20,0x3D,
- 0x20,0x47,0x2D,0x31,0x20,0x74,0x69,0x63,0x6B,0x20,0x23,0x33,
- 0x2E,0x0B,0x3E,0x34,0x30,0x20,0x47,0x6F,0x74,0x6F,0x20,0x31,
- 0x30,0x00,0x1C,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
- 0x31,0x50,0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,
- 0x75,0x70,0x2F,0x64,0x6F,0x77,0x6E,0x0B,0x3E,0x40,0x58,0x30,
- 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x18,0x53,0x79,0x6E,0x74,
- 0x61,0x78,0x3A,0x20,0x28,0x31,0x20,0x6F,0x72,0x20,0x32,0x29,
- 0x20,0x2B,0x20,0x53,0x70,0x65,0x65,0x64,0x00,0x40,0x50,0x6F,
- 0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,0x69,0x73,0x20,
- 0x75,0x73,0x65,0x64,0x20,0x74,0x6F,0x20,0x73,0x6C,0x69,0x64,
- 0x65,0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,
- 0x20,0x70,0x69,0x74,0x63,0x68,0x20,0x75,0x70,0x20,0x6F,0x72,
- 0x20,0x64,0x6F,0x77,0x6E,0x2E,0x20,0x54,0x68,0x69,0x73,0x20,
- 0x69,0x73,0x42,0x64,0x6F,0x6E,0x65,0x20,0x75,0x73,0x69,0x6E,
- 0x67,0x20,0x74,0x68,0x65,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,
- 0x20,0x76,0x61,0x6C,0x75,0x65,0x2E,0x20,0x49,0x66,0x20,0x41,
- 0x6D,0x69,0x67,0x61,0x20,0x66,0x72,0x65,0x71,0x75,0x65,0x6E,
- 0x63,0x79,0x20,0x74,0x61,0x62,0x6C,0x65,0x20,0x69,0x73,0x20,
- 0x75,0x73,0x65,0x64,0x2C,0x20,0x74,0x68,0x65,0x40,0x73,0x6C,
- 0x69,0x64,0x69,0x6E,0x67,0x20,0x77,0x69,0x6C,0x6C,0x20,0x62,
- 0x65,0x20,0x6E,0x6F,0x6E,0x2D,0x6C,0x69,0x6E,0x65,0x61,0x72,
- 0x20,0x28,0x74,0x68,0x65,0x20,0x73,0x70,0x65,0x65,0x64,0x20,
- 0x64,0x65,0x70,0x65,0x6E,0x64,0x73,0x20,0x6F,0x6E,0x20,0x74,
- 0x68,0x65,0x20,0x66,0x72,0x65,0x71,0x75,0x65,0x6E,0x63,0x79,
- 0x29,0x2E,0x00,0x19,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
- 0x30,0x31,0x54,0x6F,0x6E,0x65,0x20,0x70,0x6F,0x72,0x74,0x61,
- 0x6D,0x65,0x6E,0x74,0x6F,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
- 0x40,0x43,0x30,0x30,0x32,0x11,0x53,0x79,0x6E,0x74,0x61,0x78,
- 0x3A,0x20,0x33,0x20,0x2B,0x20,0x53,0x70,0x65,0x65,0x64,0x00,
- 0x40,0x54,0x68,0x69,0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,
- 0x64,0x20,0x69,0x73,0x20,0x75,0x73,0x65,0x64,0x20,0x74,0x6F,
- 0x67,0x65,0x74,0x68,0x65,0x72,0x20,0x77,0x69,0x74,0x68,0x20,
- 0x61,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x61,0x6E,0x64,0x20,
- 0x77,0x69,0x6C,0x6C,0x20,0x73,0x6C,0x69,0x64,0x65,0x20,0x74,
- 0x6F,0x20,0x69,0x74,0x73,0x43,0x66,0x72,0x65,0x71,0x75,0x65,
- 0x6E,0x63,0x79,0x2E,0x20,0x49,0x66,0x20,0x67,0x6C,0x69,0x73,
- 0x73,0x61,0x6E,0x64,0x6F,0x20,0x28,0x45,0x33,0x29,0x20,0x69,
- 0x73,0x20,0x75,0x73,0x65,0x64,0x2C,0x20,0x74,0x68,0x65,0x20,
- 0x66,0x72,0x65,0x71,0x75,0x65,0x6E,0x63,0x79,0x20,0x77,0x69,
- 0x6C,0x6C,0x20,0x62,0x65,0x20,0x72,0x6F,0x75,0x6E,0x64,0x65,
- 0x64,0x18,0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x6E,0x65,0x61,
- 0x72,0x65,0x73,0x74,0x20,0x68,0x61,0x6C,0x66,0x74,0x6F,0x6E,
- 0x65,0x2E,0x00,0x11,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
- 0x30,0x31,0x56,0x69,0x62,0x72,0x61,0x74,0x6F,0x0B,0x3E,0x40,
- 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x18,0x53,0x79,
- 0x6E,0x74,0x61,0x78,0x3A,0x20,0x34,0x20,0x2B,0x20,0x52,0x61,
- 0x74,0x65,0x20,0x2B,0x20,0x44,0x65,0x70,0x74,0x68,0x00,0x3E,
- 0x41,0x64,0x64,0x73,0x20,0x76,0x69,0x62,0x72,0x61,0x74,0x6F,
- 0x20,0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x63,0x68,0x61,0x6E,
- 0x6E,0x65,0x6C,0x20,0x77,0x69,0x74,0x68,0x20,0x61,0x20,0x72,
- 0x61,0x74,0x65,0x20,0x61,0x6E,0x64,0x20,0x73,0x70,0x65,0x65,
- 0x64,0x2E,0x20,0x53,0x65,0x74,0x20,0x76,0x69,0x62,0x72,0x61,
- 0x74,0x6F,0x3D,0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x20,0x28,
- 0x45,0x34,0x29,0x20,0x63,0x61,0x6E,0x20,0x62,0x65,0x20,0x75,
- 0x73,0x65,0x64,0x20,0x74,0x6F,0x20,0x63,0x68,0x61,0x6E,0x67,
- 0x65,0x20,0x74,0x68,0x65,0x20,0x76,0x69,0x62,0x72,0x61,0x74,
- 0x6F,0x20,0x77,0x61,0x76,0x65,0x20,0x66,0x6F,0x72,0x6D,0x20,
- 0x28,0x73,0x65,0x65,0x07,0x62,0x65,0x6C,0x6F,0x77,0x29,0x2E,
- 0x00,0x28,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
- 0x54,0x6F,0x6E,0x65,0x20,0x70,0x6F,0x72,0x74,0x61,0x6D,0x65,
- 0x6E,0x74,0x6F,0x20,0x2B,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,
- 0x20,0x73,0x6C,0x69,0x64,0x65,0x0B,0x3E,0x40,0x58,0x30,0x36,
- 0x30,0x40,0x43,0x30,0x30,0x32,0x11,0x53,0x79,0x6E,0x74,0x61,
- 0x78,0x3A,0x20,0x35,0x20,0x2B,0x20,0x53,0x70,0x65,0x65,0x64,
- 0x00,0x40,0x54,0x68,0x69,0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,
- 0x6E,0x64,0x20,0x77,0x69,0x6C,0x6C,0x20,0x65,0x78,0x65,0x63,
- 0x75,0x74,0x65,0x20,0x62,0x6F,0x74,0x68,0x20,0x74,0x6F,0x6E,
- 0x65,0x20,0x70,0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,
- 0x20,0x61,0x6E,0x64,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,
- 0x73,0x6C,0x69,0x64,0x65,0x2E,0x27,0x54,0x68,0x65,0x20,0x73,
- 0x70,0x65,0x65,0x64,0x20,0x69,0x73,0x20,0x75,0x73,0x65,0x64,
- 0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x76,0x6F,0x6C,
- 0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,0x2E,0x00,0x20,
- 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x56,0x69,
- 0x62,0x72,0x61,0x74,0x6F,0x20,0x2B,0x20,0x76,0x6F,0x6C,0x75,
- 0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,0x0B,0x3E,0x40,0x58,
- 0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x11,0x53,0x79,0x6E,
- 0x74,0x61,0x78,0x3A,0x20,0x36,0x20,0x2B,0x20,0x53,0x70,0x65,
- 0x65,0x64,0x00,0x3C,0x54,0x68,0x69,0x73,0x20,0x63,0x6F,0x6D,
- 0x6D,0x61,0x6E,0x64,0x20,0x77,0x69,0x6C,0x6C,0x20,0x65,0x78,
- 0x65,0x63,0x75,0x74,0x65,0x20,0x62,0x6F,0x74,0x68,0x20,0x76,
- 0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x61,0x6E,0x64,0x20,0x76,
- 0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,0x2E,
- 0x20,0x54,0x68,0x65,0x23,0x73,0x70,0x65,0x65,0x64,0x20,0x69,
- 0x73,0x20,0x75,0x73,0x65,0x64,0x20,0x66,0x6F,0x72,0x20,0x74,
- 0x68,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,0x6C,
- 0x69,0x64,0x65,0x2E,0x00,0x11,0x40,0x58,0x30,0x34,0x30,0x40,
- 0x43,0x30,0x30,0x31,0x54,0x72,0x65,0x6D,0x6F,0x6C,0x6F,0x0B,
- 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x18,
- 0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x37,0x20,0x2B,0x20,
- 0x52,0x61,0x74,0x65,0x20,0x2B,0x20,0x44,0x65,0x70,0x74,0x68,
- 0x00,0x41,0x54,0x72,0x65,0x6D,0x6F,0x6C,0x6F,0x20,0x61,0x64,
- 0x64,0x73,0x20,0x76,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x74,
- 0x6F,0x20,0x74,0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,
- 0x74,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x2E,0x20,0x54,0x68,
- 0x65,0x20,0x73,0x79,0x6E,0x74,0x61,0x78,0x20,0x69,0x73,0x20,
- 0x65,0x78,0x61,0x63,0x74,0x6C,0x79,0x1B,0x61,0x73,0x20,0x66,
- 0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x76,0x69,0x62,0x72,0x61,
- 0x74,0x6F,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x2E,0x00,
- 0x1E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,
- 0x65,0x74,0x20,0x70,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x70,
- 0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x0B,0x3E,0x40,0x58,0x30,
- 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x14,0x53,0x79,0x6E,0x74,
- 0x61,0x78,0x3A,0x20,0x38,0x20,0x2B,0x20,0x50,0x6F,0x73,0x69,
- 0x74,0x69,0x6F,0x6E,0x00,0x3E,0x53,0x65,0x74,0x73,0x20,0x74,
- 0x68,0x65,0x20,0x70,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x70,
- 0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x20,0x66,0x6F,0x72,0x20,
- 0x74,0x68,0x65,0x20,0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x2E,
- 0x20,0x24,0x30,0x30,0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,
- 0x6C,0x65,0x66,0x74,0x6D,0x6F,0x73,0x74,0x3F,0x70,0x6F,0x73,
- 0x69,0x74,0x69,0x6F,0x6E,0x20,0x61,0x6E,0x64,0x20,0x24,0x46,
- 0x46,0x20,0x74,0x68,0x65,0x20,0x72,0x69,0x67,0x68,0x74,0x6D,
- 0x6F,0x73,0x74,0x2E,0x20,0x4E,0x6F,0x74,0x65,0x20,0x74,0x68,
- 0x61,0x74,0x20,0x73,0x6F,0x6D,0x65,0x20,0x73,0x6F,0x75,0x6E,
- 0x64,0x20,0x63,0x61,0x72,0x64,0x73,0x20,0x28,0x65,0x78,0x2E,
- 0x30,0x47,0x55,0x53,0x29,0x20,0x63,0x61,0x6E,0x27,0x74,0x20,
- 0x75,0x73,0x65,0x20,0x61,0x73,0x20,0x6D,0x61,0x6E,0x79,0x20,
- 0x61,0x73,0x20,0x32,0x35,0x36,0x20,0x70,0x61,0x6E,0x6E,0x69,
- 0x6E,0x67,0x20,0x70,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x73,
- 0x2E,0x00,0x17,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
- 0x31,0x53,0x61,0x6D,0x70,0x6C,0x65,0x20,0x6F,0x66,0x66,0x73,
- 0x65,0x74,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
- 0x30,0x32,0x12,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x39,
- 0x20,0x2B,0x20,0x4F,0x66,0x66,0x73,0x65,0x74,0x00,0x41,0x54,
- 0x68,0x69,0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x20,
- 0x73,0x68,0x6F,0x75,0x6C,0x64,0x20,0x62,0x65,0x20,0x75,0x73,
- 0x65,0x64,0x20,0x74,0x6F,0x67,0x65,0x74,0x68,0x65,0x72,0x20,
- 0x77,0x69,0x74,0x68,0x20,0x61,0x20,0x6E,0x6F,0x74,0x65,0x2E,
- 0x20,0x54,0x68,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,
- 0x77,0x69,0x6C,0x6C,0x2D,0x62,0x65,0x20,0x70,0x6C,0x61,0x79,
- 0x65,0x64,0x20,0x66,0x72,0x6F,0x6D,0x20,0x28,0x4F,0x66,0x66,
- 0x73,0x65,0x74,0x2A,0x24,0x31,0x30,0x30,0x29,0x20,0x69,0x6E,
- 0x73,0x74,0x65,0x61,0x64,0x20,0x6F,0x66,0x20,0x7A,0x65,0x72,
- 0x6F,0x2E,0x00,0x16,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
- 0x30,0x31,0x56,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,
- 0x64,0x65,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
- 0x30,0x32,0x21,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x41,
- 0x20,0x2B,0x20,0x55,0x70,0x20,0x73,0x70,0x65,0x65,0x64,0x20,
- 0x2B,0x20,0x44,0x6F,0x77,0x6E,0x20,0x73,0x70,0x65,0x65,0x64,
- 0x00,0x3D,0x53,0x6C,0x69,0x64,0x65,0x73,0x20,0x74,0x68,0x65,
- 0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x76,0x6F,0x6C,
- 0x75,0x6D,0x65,0x20,0x75,0x70,0x20,0x6F,0x72,0x20,0x64,0x6F,
- 0x77,0x6E,0x2E,0x20,0x45,0x69,0x74,0x68,0x65,0x72,0x20,0x75,
- 0x70,0x20,0x73,0x70,0x65,0x65,0x64,0x20,0x6F,0x72,0x20,0x64,
- 0x6F,0x77,0x6E,0x15,0x73,0x70,0x65,0x65,0x64,0x20,0x73,0x68,
- 0x6F,0x75,0x6C,0x64,0x20,0x62,0x65,0x20,0x7A,0x65,0x72,0x6F,
- 0x2E,0x00,0x17,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
- 0x31,0x50,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x20,0x6A,0x75,
- 0x6D,0x70,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
- 0x30,0x32,0x14,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x42,
- 0x20,0x2B,0x20,0x50,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x00,
- 0x41,0x54,0x68,0x69,0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,
- 0x64,0x20,0x77,0x69,0x6C,0x6C,0x20,0x6A,0x75,0x6D,0x70,0x20,
- 0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x73,0x65,0x6C,0x65,0x63,
- 0x74,0x65,0x64,0x20,0x73,0x6F,0x6E,0x67,0x20,0x70,0x6F,0x73,
- 0x69,0x74,0x69,0x6F,0x6E,0x20,0x61,0x6E,0x64,0x20,0x70,0x6C,
- 0x61,0x79,0x20,0x74,0x68,0x65,0x1B,0x70,0x61,0x74,0x74,0x65,
- 0x72,0x6E,0x20,0x66,0x72,0x6F,0x6D,0x20,0x74,0x68,0x65,0x20,
- 0x62,0x65,0x67,0x69,0x6E,0x6E,0x69,0x6E,0x67,0x2E,0x00,0x14,
- 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x65,
- 0x74,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x0B,0x3E,0x40,0x58,
- 0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x12,0x53,0x79,0x6E,
- 0x74,0x61,0x78,0x3A,0x20,0x43,0x20,0x2B,0x20,0x56,0x6F,0x6C,
- 0x75,0x6D,0x65,0x00,0x3E,0x53,0x65,0x74,0x73,0x20,0x74,0x68,
- 0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x76,0x6F,
- 0x6C,0x75,0x6D,0x65,0x2E,0x20,0x54,0x68,0x65,0x20,0x76,0x6F,
- 0x6C,0x75,0x6D,0x65,0x20,0x73,0x68,0x6F,0x75,0x6C,0x64,0x20,
- 0x6E,0x6F,0x74,0x20,0x62,0x65,0x20,0x67,0x72,0x65,0x61,0x74,
- 0x65,0x72,0x20,0x74,0x68,0x61,0x6E,0x04,0x24,0x34,0x30,0x2E,
- 0x00,0x17,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
- 0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x62,0x72,0x65,0x61,
- 0x6B,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,
- 0x32,0x1C,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x44,0x20,
- 0x2B,0x20,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x2D,0x70,0x6F,
- 0x73,0x69,0x74,0x69,0x6F,0x6E,0x00,0x3C,0x54,0x68,0x69,0x73,
- 0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x20,0x77,0x69,0x6C,
- 0x6C,0x20,0x6A,0x75,0x6D,0x70,0x20,0x74,0x6F,0x20,0x74,0x68,
- 0x65,0x20,0x6E,0x65,0x78,0x74,0x20,0x70,0x61,0x74,0x74,0x65,
- 0x72,0x6E,0x20,0x61,0x6E,0x64,0x20,0x70,0x6C,0x61,0x79,0x20,
- 0x66,0x72,0x6F,0x6D,0x20,0x74,0x68,0x65,0x13,0x73,0x70,0x65,
- 0x63,0x69,0x66,0x69,0x65,0x64,0x20,0x70,0x6F,0x73,0x69,0x74,
- 0x69,0x6F,0x6E,0x2E,0x00,0x22,0x40,0x58,0x30,0x34,0x30,0x40,
- 0x43,0x30,0x30,0x31,0x53,0x65,0x74,0x20,0x66,0x69,0x6C,0x74,
- 0x65,0x72,0x20,0x28,0x41,0x6D,0x69,0x67,0x61,0x20,0x6F,0x6E,
- 0x6C,0x79,0x21,0x29,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
- 0x43,0x30,0x30,0x32,0x13,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,
- 0x20,0x45,0x30,0x20,0x2B,0x20,0x53,0x74,0x61,0x74,0x75,0x73,
- 0x00,0x38,0x55,0x73,0x65,0x20,0x45,0x30,0x30,0x20,0x61,0x6E,
- 0x64,0x20,0x79,0x6F,0x75,0x72,0x20,0x74,0x75,0x6E,0x65,0x20,
- 0x77,0x69,0x6C,0x6C,0x20,0x73,0x6F,0x75,0x6E,0x64,0x20,0x72,
- 0x65,0x61,0x6C,0x6C,0x79,0x20,0x62,0x61,0x64,0x20,0x6F,0x6E,
- 0x20,0x61,0x6E,0x20,0x41,0x6D,0x69,0x67,0x61,0x21,0x00,0x21,
- 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x46,0x69,
- 0x6E,0x65,0x20,0x70,0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,
- 0x6F,0x20,0x75,0x70,0x2F,0x64,0x6F,0x77,0x6E,0x0B,0x3E,0x40,
- 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x19,0x53,0x79,
- 0x6E,0x74,0x61,0x78,0x3A,0x20,0x45,0x28,0x31,0x20,0x6F,0x72,
- 0x20,0x32,0x29,0x20,0x2B,0x20,0x53,0x70,0x65,0x65,0x64,0x00,
- 0x3F,0x54,0x68,0x69,0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,
- 0x64,0x20,0x77,0x6F,0x72,0x6B,0x73,0x20,0x61,0x73,0x20,0x70,
- 0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,0x75,0x70,
- 0x2F,0x64,0x6F,0x77,0x6E,0x2C,0x20,0x62,0x75,0x74,0x20,0x69,
- 0x74,0x20,0x6F,0x6E,0x6C,0x79,0x20,0x73,0x6C,0x69,0x64,0x65,
- 0x73,0x20,0x75,0x70,0x05,0x6F,0x6E,0x63,0x65,0x2E,0x00,0x1F,
- 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x65,
- 0x74,0x20,0x67,0x6C,0x69,0x73,0x73,0x61,0x6E,0x64,0x6F,0x20,
- 0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x0B,0x3E,0x40,0x58,0x30,
- 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x13,0x53,0x79,0x6E,0x74,
- 0x61,0x78,0x3A,0x20,0x45,0x33,0x20,0x2B,0x20,0x53,0x74,0x61,
- 0x74,0x75,0x73,0x00,0x41,0x49,0x66,0x20,0x53,0x74,0x61,0x74,
- 0x75,0x73,0x20,0x69,0x73,0x20,0x3D,0x31,0x2C,0x20,0x74,0x68,
- 0x65,0x20,0x66,0x72,0x65,0x71,0x75,0x65,0x6E,0x63,0x79,0x20,
- 0x77,0x68,0x65,0x6E,0x20,0x75,0x73,0x69,0x6E,0x67,0x20,0x74,
+ 0x37,0x20,0x4E,0x6F,0x74,0x65,0x73,0x20,0x3D,0x20,0x47,0x2D,
+ 0x31,0x20,0x74,0x69,0x63,0x6B,0x20,0x23,0x33,0x2E,0x0B,0x3E,
+ 0x34,0x30,0x20,0x47,0x6F,0x74,0x6F,0x20,0x31,0x30,0x00,0x1C,
+ 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x50,0x6F,
+ 0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,0x75,0x70,0x2F,
+ 0x64,0x6F,0x77,0x6E,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
+ 0x43,0x30,0x30,0x32,0x18,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,
+ 0x20,0x28,0x31,0x20,0x6F,0x72,0x20,0x32,0x29,0x20,0x2B,0x20,
+ 0x53,0x70,0x65,0x65,0x64,0x00,0x40,0x50,0x6F,0x72,0x74,0x61,
+ 0x6D,0x65,0x6E,0x74,0x6F,0x20,0x69,0x73,0x20,0x75,0x73,0x65,
+ 0x64,0x20,0x74,0x6F,0x20,0x73,0x6C,0x69,0x64,0x65,0x20,0x74,
+ 0x68,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x70,0x69,
+ 0x74,0x63,0x68,0x20,0x75,0x70,0x20,0x6F,0x72,0x20,0x64,0x6F,
+ 0x77,0x6E,0x2E,0x20,0x54,0x68,0x69,0x73,0x20,0x69,0x73,0x42,
+ 0x64,0x6F,0x6E,0x65,0x20,0x75,0x73,0x69,0x6E,0x67,0x20,0x74,
+ 0x68,0x65,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x20,0x76,0x61,
+ 0x6C,0x75,0x65,0x2E,0x20,0x49,0x66,0x20,0x41,0x6D,0x69,0x67,
+ 0x61,0x20,0x66,0x72,0x65,0x71,0x75,0x65,0x6E,0x63,0x79,0x20,
+ 0x74,0x61,0x62,0x6C,0x65,0x20,0x69,0x73,0x20,0x75,0x73,0x65,
+ 0x64,0x2C,0x20,0x74,0x68,0x65,0x40,0x73,0x6C,0x69,0x64,0x69,
+ 0x6E,0x67,0x20,0x77,0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x6E,
+ 0x6F,0x6E,0x2D,0x6C,0x69,0x6E,0x65,0x61,0x72,0x20,0x28,0x74,
+ 0x68,0x65,0x20,0x73,0x70,0x65,0x65,0x64,0x20,0x64,0x65,0x70,
+ 0x65,0x6E,0x64,0x73,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x20,
+ 0x66,0x72,0x65,0x71,0x75,0x65,0x6E,0x63,0x79,0x29,0x2E,0x00,
+ 0x19,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x54,
0x6F,0x6E,0x65,0x20,0x70,0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,
- 0x74,0x6F,0x20,0x77,0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x72,
- 0x6F,0x75,0x6E,0x64,0x65,0x64,0x20,0x74,0x6F,0x20,0x74,0x68,
- 0x65,0x20,0x6E,0x65,0x61,0x72,0x65,0x73,0x74,0x20,0x68,0x61,
- 0x6C,0x66,0x74,0x6F,0x6E,0x65,0x2E,0x00,0x1D,0x40,0x58,0x30,
- 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x65,0x74,0x20,0x76,
- 0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x63,0x6F,0x6E,0x74,0x72,
- 0x6F,0x6C,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
- 0x30,0x32,0x11,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x45,
- 0x34,0x20,0x2B,0x20,0x54,0x79,0x70,0x65,0x00,0x2C,0x54,0x68,
- 0x69,0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x20,0x63,
- 0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x73,0x20,0x74,0x68,0x65,0x20,
- 0x76,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x77,0x61,0x76,0x65,
- 0x20,0x66,0x6F,0x72,0x6D,0x2E,0x00,0x33,0x54,0x79,0x70,0x65,
- 0x3A,0x20,0x30,0x20,0x3D,0x20,0x53,0x69,0x6E,0x65,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x20,0x31,0x20,0x3D,0x20,0x52,0x61,0x6D,
- 0x70,0x20,0x64,0x6F,0x77,0x6E,0x20,0x20,0x20,0x20,0x20,0x20,
- 0x20,0x32,0x20,0x3D,0x20,0x53,0x71,0x75,0x61,0x72,0x65,0x00,
- 0x44,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x61,0x64,0x64,0x20,
- 0x34,0x20,0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x74,0x79,0x70,
- 0x65,0x2C,0x20,0x74,0x68,0x65,0x20,0x77,0x61,0x76,0x65,0x20,
- 0x66,0x6F,0x72,0x6D,0x20,0x77,0x69,0x6C,0x6C,0x20,0x6E,0x6F,
- 0x74,0x20,0x62,0x65,0x20,0x72,0x65,0x74,0x72,0x69,0x67,0x67,
- 0x65,0x64,0x20,0x77,0x68,0x65,0x6E,0x20,0x61,0x19,0x6E,0x65,
- 0x77,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,
- 0x20,0x69,0x73,0x20,0x70,0x6C,0x61,0x79,0x65,0x64,0x2E,0x00,
- 0x17,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,
- 0x65,0x74,0x20,0x66,0x69,0x6E,0x65,0x2D,0x74,0x75,0x6E,0x65,
- 0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
- 0x11,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x45,0x35,0x20,
- 0x2B,0x20,0x54,0x75,0x6E,0x65,0x00,0x3F,0x54,0x68,0x69,0x73,
+ 0x74,0x6F,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
+ 0x30,0x32,0x11,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x33,
+ 0x20,0x2B,0x20,0x53,0x70,0x65,0x65,0x64,0x00,0x40,0x54,0x68,
+ 0x69,0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x20,0x69,
+ 0x73,0x20,0x75,0x73,0x65,0x64,0x20,0x74,0x6F,0x67,0x65,0x74,
+ 0x68,0x65,0x72,0x20,0x77,0x69,0x74,0x68,0x20,0x61,0x20,0x6E,
+ 0x6F,0x74,0x65,0x2C,0x20,0x61,0x6E,0x64,0x20,0x77,0x69,0x6C,
+ 0x6C,0x20,0x73,0x6C,0x69,0x64,0x65,0x20,0x74,0x6F,0x20,0x69,
+ 0x74,0x73,0x43,0x66,0x72,0x65,0x71,0x75,0x65,0x6E,0x63,0x79,
+ 0x2E,0x20,0x49,0x66,0x20,0x67,0x6C,0x69,0x73,0x73,0x61,0x6E,
+ 0x64,0x6F,0x20,0x28,0x45,0x33,0x29,0x20,0x69,0x73,0x20,0x75,
+ 0x73,0x65,0x64,0x2C,0x20,0x74,0x68,0x65,0x20,0x66,0x72,0x65,
+ 0x71,0x75,0x65,0x6E,0x63,0x79,0x20,0x77,0x69,0x6C,0x6C,0x20,
+ 0x62,0x65,0x20,0x72,0x6F,0x75,0x6E,0x64,0x65,0x64,0x18,0x74,
+ 0x6F,0x20,0x74,0x68,0x65,0x20,0x6E,0x65,0x61,0x72,0x65,0x73,
+ 0x74,0x20,0x68,0x61,0x6C,0x66,0x74,0x6F,0x6E,0x65,0x2E,0x00,
+ 0x11,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x56,
+ 0x69,0x62,0x72,0x61,0x74,0x6F,0x0B,0x3E,0x40,0x58,0x30,0x36,
+ 0x30,0x40,0x43,0x30,0x30,0x32,0x18,0x53,0x79,0x6E,0x74,0x61,
+ 0x78,0x3A,0x20,0x34,0x20,0x2B,0x20,0x52,0x61,0x74,0x65,0x20,
+ 0x2B,0x20,0x44,0x65,0x70,0x74,0x68,0x00,0x3E,0x41,0x64,0x64,
+ 0x73,0x20,0x76,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x74,0x6F,
+ 0x20,0x74,0x68,0x65,0x20,0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,
+ 0x20,0x77,0x69,0x74,0x68,0x20,0x61,0x20,0x72,0x61,0x74,0x65,
+ 0x20,0x61,0x6E,0x64,0x20,0x73,0x70,0x65,0x65,0x64,0x2E,0x20,
+ 0x53,0x65,0x74,0x20,0x76,0x69,0x62,0x72,0x61,0x74,0x6F,0x3D,
+ 0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x20,0x28,0x45,0x34,0x29,
+ 0x20,0x63,0x61,0x6E,0x20,0x62,0x65,0x20,0x75,0x73,0x65,0x64,
+ 0x20,0x74,0x6F,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x20,0x74,
+ 0x68,0x65,0x20,0x76,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x77,
+ 0x61,0x76,0x65,0x20,0x66,0x6F,0x72,0x6D,0x20,0x28,0x73,0x65,
+ 0x65,0x07,0x62,0x65,0x6C,0x6F,0x77,0x29,0x2E,0x00,0x28,0x40,
+ 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x54,0x6F,0x6E,
+ 0x65,0x20,0x70,0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,
+ 0x20,0x2B,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,0x6C,
+ 0x69,0x64,0x65,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
+ 0x30,0x30,0x32,0x11,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,
+ 0x35,0x20,0x2B,0x20,0x53,0x70,0x65,0x65,0x64,0x00,0x40,0x54,
+ 0x68,0x69,0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x20,
+ 0x77,0x69,0x6C,0x6C,0x20,0x65,0x78,0x65,0x63,0x75,0x74,0x65,
+ 0x20,0x62,0x6F,0x74,0x68,0x20,0x74,0x6F,0x6E,0x65,0x20,0x70,
+ 0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,0x61,0x6E,
+ 0x64,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,
+ 0x64,0x65,0x2E,0x27,0x54,0x68,0x65,0x20,0x73,0x70,0x65,0x65,
+ 0x64,0x20,0x69,0x73,0x20,0x75,0x73,0x65,0x64,0x20,0x66,0x6F,
+ 0x72,0x20,0x74,0x68,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,
+ 0x20,0x73,0x6C,0x69,0x64,0x65,0x2E,0x00,0x20,0x40,0x58,0x30,
+ 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x56,0x69,0x62,0x72,0x61,
+ 0x74,0x6F,0x20,0x2B,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,
+ 0x73,0x6C,0x69,0x64,0x65,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
+ 0x40,0x43,0x30,0x30,0x32,0x11,0x53,0x79,0x6E,0x74,0x61,0x78,
+ 0x3A,0x20,0x36,0x20,0x2B,0x20,0x53,0x70,0x65,0x65,0x64,0x00,
+ 0x3C,0x54,0x68,0x69,0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,
+ 0x64,0x20,0x77,0x69,0x6C,0x6C,0x20,0x65,0x78,0x65,0x63,0x75,
+ 0x74,0x65,0x20,0x62,0x6F,0x74,0x68,0x20,0x76,0x69,0x62,0x72,
+ 0x61,0x74,0x6F,0x20,0x61,0x6E,0x64,0x20,0x76,0x6F,0x6C,0x75,
+ 0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,0x2E,0x20,0x54,0x68,
+ 0x65,0x23,0x73,0x70,0x65,0x65,0x64,0x20,0x69,0x73,0x20,0x75,
+ 0x73,0x65,0x64,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,
+ 0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,
+ 0x2E,0x00,0x11,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
+ 0x31,0x54,0x72,0x65,0x6D,0x6F,0x6C,0x6F,0x0B,0x3E,0x40,0x58,
+ 0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x18,0x53,0x79,0x6E,
+ 0x74,0x61,0x78,0x3A,0x20,0x37,0x20,0x2B,0x20,0x52,0x61,0x74,
+ 0x65,0x20,0x2B,0x20,0x44,0x65,0x70,0x74,0x68,0x00,0x41,0x54,
+ 0x72,0x65,0x6D,0x6F,0x6C,0x6F,0x20,0x61,0x64,0x64,0x73,0x20,
+ 0x76,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x74,0x6F,0x20,0x74,
+ 0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x76,
+ 0x6F,0x6C,0x75,0x6D,0x65,0x2E,0x20,0x54,0x68,0x65,0x20,0x73,
+ 0x79,0x6E,0x74,0x61,0x78,0x20,0x69,0x73,0x20,0x65,0x78,0x61,
+ 0x63,0x74,0x6C,0x79,0x1B,0x61,0x73,0x20,0x66,0x6F,0x72,0x20,
+ 0x74,0x68,0x65,0x20,0x76,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,
+ 0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x2E,0x00,0x1E,0x40,0x58,
+ 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x65,0x74,0x20,
+ 0x70,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x70,0x6F,0x73,0x69,
+ 0x74,0x69,0x6F,0x6E,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
+ 0x43,0x30,0x30,0x32,0x14,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,
+ 0x20,0x38,0x20,0x2B,0x20,0x50,0x6F,0x73,0x69,0x74,0x69,0x6F,
+ 0x6E,0x00,0x3E,0x53,0x65,0x74,0x73,0x20,0x74,0x68,0x65,0x20,
+ 0x70,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x70,0x6F,0x73,0x69,
+ 0x74,0x69,0x6F,0x6E,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,
+ 0x20,0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x2E,0x20,0x24,0x30,
+ 0x30,0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x6C,0x65,0x66,
+ 0x74,0x6D,0x6F,0x73,0x74,0x3F,0x70,0x6F,0x73,0x69,0x74,0x69,
+ 0x6F,0x6E,0x20,0x61,0x6E,0x64,0x20,0x24,0x46,0x46,0x20,0x74,
+ 0x68,0x65,0x20,0x72,0x69,0x67,0x68,0x74,0x6D,0x6F,0x73,0x74,
+ 0x2E,0x20,0x4E,0x6F,0x74,0x65,0x20,0x74,0x68,0x61,0x74,0x20,
+ 0x73,0x6F,0x6D,0x65,0x20,0x73,0x6F,0x75,0x6E,0x64,0x20,0x63,
+ 0x61,0x72,0x64,0x73,0x20,0x28,0x65,0x78,0x2E,0x30,0x47,0x55,
+ 0x53,0x29,0x20,0x63,0x61,0x6E,0x27,0x74,0x20,0x75,0x73,0x65,
+ 0x20,0x61,0x73,0x20,0x6D,0x61,0x6E,0x79,0x20,0x61,0x73,0x20,
+ 0x32,0x35,0x36,0x20,0x70,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,
+ 0x70,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x73,0x2E,0x00,0x17,
+ 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x61,
+ 0x6D,0x70,0x6C,0x65,0x20,0x6F,0x66,0x66,0x73,0x65,0x74,0x0B,
+ 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x12,
+ 0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x39,0x20,0x2B,0x20,
+ 0x4F,0x66,0x66,0x73,0x65,0x74,0x00,0x41,0x54,0x68,0x69,0x73,
0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x20,0x73,0x68,0x6F,
0x75,0x6C,0x64,0x20,0x62,0x65,0x20,0x75,0x73,0x65,0x64,0x20,
0x74,0x6F,0x67,0x65,0x74,0x68,0x65,0x72,0x20,0x77,0x69,0x74,
- 0x68,0x20,0x61,0x20,0x6E,0x6F,0x74,0x65,0x2E,0x20,0x49,0x74,
- 0x20,0x77,0x69,0x6C,0x6C,0x20,0x63,0x61,0x75,0x73,0x65,0x44,
- 0x61,0x6E,0x6F,0x74,0x68,0x65,0x72,0x20,0x66,0x69,0x6E,0x65,
- 0x2D,0x74,0x75,0x6E,0x65,0x20,0x76,0x61,0x6C,0x75,0x65,0x20,
- 0x74,0x6F,0x20,0x62,0x65,0x20,0x75,0x73,0x65,0x64,0x2E,0x20,
- 0x49,0x74,0x20,0x73,0x65,0x65,0x6D,0x73,0x20,0x71,0x75,0x69,
- 0x74,0x65,0x20,0x75,0x6E,0x75,0x73,0x61,0x62,0x6C,0x65,0x20,
- 0x74,0x6F,0x20,0x6D,0x65,0x2E,0x2E,0x2E,0x00,0x16,0x40,0x58,
- 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x50,0x61,0x74,0x74,
- 0x65,0x72,0x6E,0x20,0x6C,0x6F,0x6F,0x70,0x0B,0x3E,0x40,0x58,
- 0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x12,0x53,0x79,0x6E,
- 0x74,0x61,0x78,0x3A,0x20,0x45,0x36,0x20,0x2B,0x20,0x43,0x6F,
- 0x75,0x6E,0x74,0x00,0x45,0x49,0x66,0x20,0x63,0x6F,0x75,0x6E,
- 0x74,0x20,0x69,0x73,0x20,0x7A,0x65,0x72,0x6F,0x2C,0x20,0x74,
- 0x68,0x65,0x20,0x62,0x65,0x67,0x69,0x6E,0x6E,0x69,0x6E,0x67,
- 0x20,0x6F,0x66,0x20,0x74,0x68,0x65,0x20,0x6C,0x6F,0x6F,0x70,
- 0x20,0x77,0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x73,0x70,0x65,
- 0x63,0x69,0x66,0x69,0x65,0x64,0x2E,0x20,0x57,0x68,0x65,0x6E,
- 0x20,0x61,0x40,0x6E,0x6F,0x6E,0x2D,0x7A,0x65,0x72,0x6F,0x20,
- 0x76,0x61,0x6C,0x75,0x65,0x20,0x69,0x73,0x20,0x75,0x73,0x65,
- 0x64,0x2C,0x20,0x74,0x68,0x65,0x20,0x70,0x61,0x74,0x74,0x65,
- 0x72,0x6E,0x20,0x77,0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x6C,
- 0x6F,0x6F,0x70,0x65,0x64,0x20,0x66,0x72,0x6F,0x6D,0x20,0x74,
- 0x68,0x65,0x20,0x6C,0x6F,0x6F,0x70,0x06,0x73,0x74,0x61,0x72,
- 0x74,0x2E,0x00,0x1D,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
- 0x30,0x31,0x53,0x65,0x74,0x20,0x74,0x72,0x65,0x6D,0x6F,0x6C,
- 0x6F,0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x0B,0x3E,0x40,
- 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x11,0x53,0x79,
- 0x6E,0x74,0x61,0x78,0x3A,0x20,0x45,0x37,0x20,0x2B,0x20,0x54,
- 0x79,0x70,0x65,0x00,0x3A,0x54,0x68,0x69,0x73,0x20,0x63,0x6F,
- 0x6D,0x6D,0x61,0x6E,0x64,0x20,0x77,0x6F,0x72,0x6B,0x73,0x20,
- 0x65,0x78,0x61,0x63,0x74,0x6C,0x79,0x20,0x61,0x73,0x20,0x73,
- 0x65,0x74,0x20,0x76,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x63,
- 0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x2C,0x20,0x62,0x75,0x74,0x20,
- 0x74,0x68,0x65,0x2A,0x74,0x72,0x65,0x6D,0x6F,0x6C,0x6F,0x20,
- 0x77,0x61,0x76,0x65,0x20,0x66,0x6F,0x72,0x6D,0x20,0x77,0x69,
- 0x6C,0x6C,0x20,0x62,0x65,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,
- 0x64,0x20,0x69,0x6E,0x73,0x74,0x65,0x61,0x64,0x2E,0x00,0x15,
- 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x52,0x65,
- 0x74,0x72,0x69,0x67,0x20,0x6E,0x6F,0x74,0x65,0x0B,0x3E,0x40,
- 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x15,0x53,0x79,
- 0x6E,0x74,0x61,0x78,0x3A,0x20,0x45,0x39,0x20,0x2B,0x20,0x49,
- 0x6E,0x74,0x65,0x72,0x76,0x61,0x6C,0x00,0x2D,0x52,0x65,0x74,
- 0x72,0x69,0x67,0x73,0x20,0x74,0x68,0x65,0x20,0x6E,0x6F,0x74,
- 0x65,0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x68,0x65,0x20,0x73,
- 0x70,0x65,0x63,0x69,0x66,0x69,0x65,0x64,0x20,0x69,0x6E,0x74,
- 0x65,0x72,0x76,0x61,0x6C,0x2E,0x00,0x23,0x40,0x58,0x30,0x34,
- 0x30,0x40,0x43,0x30,0x30,0x31,0x46,0x69,0x6E,0x65,0x20,0x76,
- 0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,0x20,
- 0x75,0x70,0x2F,0x64,0x6F,0x77,0x6E,0x0B,0x3E,0x40,0x58,0x30,
- 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x19,0x53,0x79,0x6E,0x74,
- 0x61,0x78,0x3A,0x20,0x45,0x28,0x41,0x20,0x6F,0x72,0x20,0x42,
- 0x29,0x20,0x2B,0x20,0x53,0x70,0x65,0x65,0x64,0x00,0x44,0x54,
- 0x68,0x69,0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x20,
- 0x77,0x6F,0x72,0x6B,0x73,0x20,0x61,0x73,0x20,0x74,0x68,0x65,
- 0x20,0x75,0x73,0x75,0x61,0x6C,0x20,0x76,0x6F,0x6C,0x75,0x6D,
- 0x65,0x20,0x73,0x6C,0x69,0x64,0x65,0x2C,0x20,0x62,0x75,0x74,
- 0x20,0x69,0x74,0x20,0x77,0x69,0x6C,0x6C,0x20,0x6F,0x6E,0x6C,
- 0x79,0x20,0x73,0x6C,0x69,0x64,0x65,0x05,0x6F,0x6E,0x63,0x65,
- 0x2E,0x00,0x12,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
- 0x31,0x4E,0x6F,0x74,0x65,0x20,0x63,0x75,0x74,0x0B,0x3E,0x40,
- 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x11,0x53,0x79,
- 0x6E,0x74,0x61,0x78,0x3A,0x20,0x45,0x43,0x20,0x2B,0x20,0x54,
- 0x69,0x63,0x6B,0x00,0x43,0x43,0x75,0x74,0x73,0x20,0x74,0x68,
- 0x65,0x20,0x6E,0x6F,0x74,0x65,0x20,0x61,0x74,0x20,0x74,0x68,
- 0x65,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x69,0x65,0x64,0x20,
- 0x74,0x69,0x63,0x6B,0x2E,0x20,0x4E,0x6F,0x74,0x65,0x20,0x74,
- 0x68,0x61,0x74,0x20,0x69,0x74,0x20,0x77,0x69,0x6C,0x6C,0x20,
- 0x6F,0x6E,0x6C,0x79,0x20,0x73,0x65,0x74,0x20,0x74,0x68,0x65,
- 0x34,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x74,0x6F,0x20,0x7A,
- 0x65,0x72,0x6F,0x2C,0x20,0x61,0x6E,0x64,0x20,0x74,0x68,0x65,
- 0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x77,0x69,0x6C,0x6C,
- 0x20,0x73,0x74,0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x70,0x6C,
- 0x61,0x79,0x65,0x64,0x2E,0x00,0x14,0x40,0x58,0x30,0x34,0x30,
- 0x40,0x43,0x30,0x30,0x31,0x4E,0x6F,0x74,0x65,0x20,0x64,0x65,
- 0x6C,0x61,0x79,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
- 0x30,0x30,0x32,0x12,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,
- 0x45,0x44,0x20,0x2B,0x20,0x54,0x69,0x63,0x6B,0x73,0x00,0x3E,
- 0x54,0x68,0x69,0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,
- 0x20,0x77,0x69,0x6C,0x6C,0x20,0x64,0x65,0x6C,0x61,0x79,0x20,
- 0x74,0x68,0x65,0x20,0x6E,0x6F,0x74,0x65,0x20,0x74,0x68,0x65,
- 0x20,0x73,0x65,0x6C,0x65,0x63,0x74,0x65,0x64,0x20,0x6E,0x75,
- 0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x74,0x69,0x63,0x6B,
- 0x73,0x2E,0x00,0x17,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
- 0x30,0x31,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x64,0x65,
- 0x6C,0x61,0x79,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
- 0x30,0x30,0x32,0x12,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,
- 0x45,0x45,0x20,0x2B,0x20,0x4E,0x6F,0x74,0x65,0x73,0x00,0x41,
- 0x54,0x68,0x69,0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,
- 0x20,0x77,0x69,0x6C,0x6C,0x20,0x64,0x65,0x6C,0x61,0x79,0x20,
- 0x74,0x68,0x65,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,
+ 0x68,0x20,0x61,0x20,0x6E,0x6F,0x74,0x65,0x2E,0x20,0x54,0x68,
+ 0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x77,0x69,0x6C,
+ 0x6C,0x2D,0x62,0x65,0x20,0x70,0x6C,0x61,0x79,0x65,0x64,0x20,
+ 0x66,0x72,0x6F,0x6D,0x20,0x28,0x4F,0x66,0x66,0x73,0x65,0x74,
+ 0x2A,0x24,0x31,0x30,0x30,0x29,0x20,0x69,0x6E,0x73,0x74,0x65,
+ 0x61,0x64,0x20,0x6F,0x66,0x20,0x7A,0x65,0x72,0x6F,0x2E,0x00,
+ 0x16,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x56,
+ 0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,0x0B,
+ 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x21,
+ 0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x41,0x20,0x2B,0x20,
+ 0x55,0x70,0x20,0x73,0x70,0x65,0x65,0x64,0x20,0x2B,0x20,0x44,
+ 0x6F,0x77,0x6E,0x20,0x73,0x70,0x65,0x65,0x64,0x00,0x3D,0x53,
+ 0x6C,0x69,0x64,0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x63,0x75,
+ 0x72,0x72,0x65,0x6E,0x74,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,
+ 0x20,0x75,0x70,0x20,0x6F,0x72,0x20,0x64,0x6F,0x77,0x6E,0x2E,
+ 0x20,0x45,0x69,0x74,0x68,0x65,0x72,0x20,0x75,0x70,0x20,0x73,
+ 0x70,0x65,0x65,0x64,0x20,0x6F,0x72,0x20,0x64,0x6F,0x77,0x6E,
+ 0x15,0x73,0x70,0x65,0x65,0x64,0x20,0x73,0x68,0x6F,0x75,0x6C,
+ 0x64,0x20,0x62,0x65,0x20,0x7A,0x65,0x72,0x6F,0x2E,0x00,0x17,
+ 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x50,0x6F,
+ 0x73,0x69,0x74,0x69,0x6F,0x6E,0x20,0x6A,0x75,0x6D,0x70,0x0B,
+ 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x14,
+ 0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x42,0x20,0x2B,0x20,
+ 0x50,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x00,0x41,0x54,0x68,
+ 0x69,0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x20,0x77,
+ 0x69,0x6C,0x6C,0x20,0x6A,0x75,0x6D,0x70,0x20,0x74,0x6F,0x20,
0x74,0x68,0x65,0x20,0x73,0x65,0x6C,0x65,0x63,0x74,0x65,0x64,
- 0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x6E,
- 0x6F,0x74,0x65,0x73,0x2E,0x00,0x13,0x40,0x58,0x30,0x34,0x30,
- 0x40,0x43,0x30,0x30,0x31,0x53,0x65,0x74,0x20,0x73,0x70,0x65,
- 0x65,0x64,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
- 0x30,0x32,0x11,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x46,
- 0x20,0x2B,0x20,0x56,0x61,0x6C,0x75,0x65,0x00,0x42,0x54,0x68,
+ 0x20,0x73,0x6F,0x6E,0x67,0x20,0x70,0x6F,0x73,0x69,0x74,0x69,
+ 0x6F,0x6E,0x20,0x61,0x6E,0x64,0x20,0x70,0x6C,0x61,0x79,0x20,
+ 0x74,0x68,0x65,0x1B,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,
+ 0x66,0x72,0x6F,0x6D,0x20,0x74,0x68,0x65,0x20,0x62,0x65,0x67,
+ 0x69,0x6E,0x6E,0x69,0x6E,0x67,0x2E,0x00,0x14,0x40,0x58,0x30,
+ 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x65,0x74,0x20,0x76,
+ 0x6F,0x6C,0x75,0x6D,0x65,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
+ 0x40,0x43,0x30,0x30,0x32,0x12,0x53,0x79,0x6E,0x74,0x61,0x78,
+ 0x3A,0x20,0x43,0x20,0x2B,0x20,0x56,0x6F,0x6C,0x75,0x6D,0x65,
+ 0x00,0x3E,0x53,0x65,0x74,0x73,0x20,0x74,0x68,0x65,0x20,0x63,
+ 0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x76,0x6F,0x6C,0x75,0x6D,
+ 0x65,0x2E,0x20,0x54,0x68,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,
+ 0x65,0x20,0x73,0x68,0x6F,0x75,0x6C,0x64,0x20,0x6E,0x6F,0x74,
+ 0x20,0x62,0x65,0x20,0x67,0x72,0x65,0x61,0x74,0x65,0x72,0x20,
+ 0x74,0x68,0x61,0x6E,0x04,0x24,0x34,0x30,0x2E,0x00,0x17,0x40,
+ 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x50,0x61,0x74,
+ 0x74,0x65,0x72,0x6E,0x20,0x62,0x72,0x65,0x61,0x6B,0x0B,0x3E,
+ 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x1C,0x53,
+ 0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x44,0x20,0x2B,0x20,0x50,
+ 0x61,0x74,0x74,0x65,0x72,0x6E,0x2D,0x70,0x6F,0x73,0x69,0x74,
+ 0x69,0x6F,0x6E,0x00,0x3C,0x54,0x68,0x69,0x73,0x20,0x63,0x6F,
+ 0x6D,0x6D,0x61,0x6E,0x64,0x20,0x77,0x69,0x6C,0x6C,0x20,0x6A,
+ 0x75,0x6D,0x70,0x20,0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x6E,
+ 0x65,0x78,0x74,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,
+ 0x61,0x6E,0x64,0x20,0x70,0x6C,0x61,0x79,0x20,0x66,0x72,0x6F,
+ 0x6D,0x20,0x74,0x68,0x65,0x13,0x73,0x70,0x65,0x63,0x69,0x66,
+ 0x69,0x65,0x64,0x20,0x70,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,
+ 0x2E,0x00,0x22,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
+ 0x31,0x53,0x65,0x74,0x20,0x66,0x69,0x6C,0x74,0x65,0x72,0x20,
+ 0x28,0x41,0x6D,0x69,0x67,0x61,0x20,0x6F,0x6E,0x6C,0x79,0x21,
+ 0x29,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,
+ 0x32,0x13,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x45,0x30,
+ 0x20,0x2B,0x20,0x53,0x74,0x61,0x74,0x75,0x73,0x00,0x38,0x55,
+ 0x73,0x65,0x20,0x45,0x30,0x30,0x20,0x61,0x6E,0x64,0x20,0x79,
+ 0x6F,0x75,0x72,0x20,0x74,0x75,0x6E,0x65,0x20,0x77,0x69,0x6C,
+ 0x6C,0x20,0x73,0x6F,0x75,0x6E,0x64,0x20,0x72,0x65,0x61,0x6C,
+ 0x6C,0x79,0x20,0x62,0x61,0x64,0x20,0x6F,0x6E,0x20,0x61,0x6E,
+ 0x20,0x41,0x6D,0x69,0x67,0x61,0x21,0x00,0x21,0x40,0x58,0x30,
+ 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x46,0x69,0x6E,0x65,0x20,
+ 0x70,0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,0x75,
+ 0x70,0x2F,0x64,0x6F,0x77,0x6E,0x0B,0x3E,0x40,0x58,0x30,0x36,
+ 0x30,0x40,0x43,0x30,0x30,0x32,0x19,0x53,0x79,0x6E,0x74,0x61,
+ 0x78,0x3A,0x20,0x45,0x28,0x31,0x20,0x6F,0x72,0x20,0x32,0x29,
+ 0x20,0x2B,0x20,0x53,0x70,0x65,0x65,0x64,0x00,0x3F,0x54,0x68,
0x69,0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x20,0x77,
- 0x69,0x6C,0x6C,0x20,0x73,0x65,0x74,0x20,0x74,0x68,0x65,0x20,
- 0x73,0x70,0x65,0x65,0x64,0x20,0x6F,0x72,0x20,0x42,0x50,0x4D,
- 0x20,0x76,0x61,0x6C,0x75,0x65,0x20,0x6F,0x66,0x20,0x74,0x68,
- 0x65,0x20,0x73,0x6F,0x6E,0x67,0x2E,0x20,0x49,0x66,0x20,0x76,
- 0x61,0x6C,0x75,0x65,0x3F,0x69,0x73,0x20,0x6C,0x65,0x73,0x73,
- 0x20,0x74,0x68,0x61,0x6E,0x20,0x24,0x32,0x30,0x2C,0x20,0x74,
- 0x68,0x65,0x20,0x73,0x70,0x65,0x65,0x64,0x20,0x77,0x69,0x6C,
- 0x6C,0x20,0x62,0x65,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x64,
- 0x2E,0x20,0x4F,0x74,0x68,0x65,0x72,0x77,0x69,0x73,0x65,0x2C,
- 0x20,0x74,0x68,0x65,0x20,0x42,0x50,0x4D,0x16,0x76,0x61,0x6C,
- 0x75,0x65,0x20,0x77,0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x63,
- 0x68,0x61,0x6E,0x67,0x65,0x64,0x2E,0x00,0x1B,0x40,0x58,0x30,
+ 0x6F,0x72,0x6B,0x73,0x20,0x61,0x73,0x20,0x70,0x6F,0x72,0x74,
+ 0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,0x75,0x70,0x2F,0x64,0x6F,
+ 0x77,0x6E,0x2C,0x20,0x62,0x75,0x74,0x20,0x69,0x74,0x20,0x6F,
+ 0x6E,0x6C,0x79,0x20,0x73,0x6C,0x69,0x64,0x65,0x73,0x20,0x75,
+ 0x70,0x05,0x6F,0x6E,0x63,0x65,0x2E,0x00,0x1F,0x40,0x58,0x30,
0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x65,0x74,0x20,0x67,
- 0x6C,0x6F,0x62,0x61,0x6C,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,
- 0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
- 0x12,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x47,0x20,0x2B,
- 0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x00,0x42,0x53,0x65,0x74,
- 0x73,0x20,0x74,0x68,0x65,0x20,0x67,0x6C,0x6F,0x62,0x61,0x6C,
- 0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x2E,0x20,0x54,0x68,0x65,
- 0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,0x68,0x6F,0x75,
- 0x6C,0x64,0x20,0x6E,0x6F,0x74,0x20,0x62,0x65,0x20,0x67,0x72,
- 0x65,0x61,0x74,0x65,0x72,0x20,0x74,0x68,0x61,0x6E,0x20,0x24,
- 0x34,0x30,0x2E,0x00,0x1D,0x40,0x58,0x30,0x34,0x30,0x40,0x43,
- 0x30,0x30,0x31,0x47,0x6C,0x6F,0x62,0x61,0x6C,0x20,0x76,0x6F,
- 0x6C,0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,0x0B,0x3E,
- 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x21,0x53,
- 0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x48,0x20,0x2B,0x20,0x55,
- 0x70,0x20,0x73,0x70,0x65,0x65,0x64,0x20,0x2B,0x20,0x44,0x6F,
- 0x77,0x6E,0x20,0x73,0x70,0x65,0x65,0x64,0x00,0x3D,0x54,0x68,
- 0x69,0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x20,0x77,
- 0x6F,0x72,0x6B,0x73,0x20,0x65,0x78,0x61,0x63,0x74,0x6C,0x79,
- 0x20,0x61,0x73,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,
+ 0x6C,0x69,0x73,0x73,0x61,0x6E,0x64,0x6F,0x20,0x63,0x6F,0x6E,
+ 0x74,0x72,0x6F,0x6C,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
+ 0x43,0x30,0x30,0x32,0x13,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,
+ 0x20,0x45,0x33,0x20,0x2B,0x20,0x53,0x74,0x61,0x74,0x75,0x73,
+ 0x00,0x41,0x49,0x66,0x20,0x53,0x74,0x61,0x74,0x75,0x73,0x20,
+ 0x69,0x73,0x20,0x3D,0x31,0x2C,0x20,0x74,0x68,0x65,0x20,0x66,
+ 0x72,0x65,0x71,0x75,0x65,0x6E,0x63,0x79,0x20,0x77,0x68,0x65,
+ 0x6E,0x20,0x75,0x73,0x69,0x6E,0x67,0x20,0x74,0x6F,0x6E,0x65,
+ 0x20,0x70,0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,
+ 0x77,0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x72,0x6F,0x75,0x6E,
+ 0x64,0x65,0x64,0x20,0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x6E,
+ 0x65,0x61,0x72,0x65,0x73,0x74,0x20,0x68,0x61,0x6C,0x66,0x74,
+ 0x6F,0x6E,0x65,0x2E,0x00,0x1D,0x40,0x58,0x30,0x34,0x30,0x40,
+ 0x43,0x30,0x30,0x31,0x53,0x65,0x74,0x20,0x76,0x69,0x62,0x72,
+ 0x61,0x74,0x6F,0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x0B,
+ 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x11,
+ 0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x45,0x34,0x20,0x2B,
+ 0x20,0x54,0x79,0x70,0x65,0x00,0x2C,0x54,0x68,0x69,0x73,0x20,
+ 0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x20,0x63,0x6F,0x6E,0x74,
+ 0x72,0x6F,0x6C,0x73,0x20,0x74,0x68,0x65,0x20,0x76,0x69,0x62,
+ 0x72,0x61,0x74,0x6F,0x20,0x77,0x61,0x76,0x65,0x20,0x66,0x6F,
+ 0x72,0x6D,0x2E,0x00,0x33,0x54,0x79,0x70,0x65,0x3A,0x20,0x30,
+ 0x20,0x3D,0x20,0x53,0x69,0x6E,0x65,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x31,0x20,0x3D,0x20,0x52,0x61,0x6D,0x70,0x20,0x64,
+ 0x6F,0x77,0x6E,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x32,0x20,
+ 0x3D,0x20,0x53,0x71,0x75,0x61,0x72,0x65,0x00,0x44,0x49,0x66,
+ 0x20,0x79,0x6F,0x75,0x20,0x61,0x64,0x64,0x20,0x34,0x20,0x74,
+ 0x6F,0x20,0x74,0x68,0x65,0x20,0x74,0x79,0x70,0x65,0x2C,0x20,
+ 0x74,0x68,0x65,0x20,0x77,0x61,0x76,0x65,0x20,0x66,0x6F,0x72,
+ 0x6D,0x20,0x77,0x69,0x6C,0x6C,0x20,0x6E,0x6F,0x74,0x20,0x62,
+ 0x65,0x20,0x72,0x65,0x74,0x72,0x69,0x67,0x67,0x65,0x64,0x20,
+ 0x77,0x68,0x65,0x6E,0x20,0x61,0x19,0x6E,0x65,0x77,0x20,0x69,
+ 0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x69,0x73,
+ 0x20,0x70,0x6C,0x61,0x79,0x65,0x64,0x2E,0x00,0x17,0x40,0x58,
+ 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x65,0x74,0x20,
+ 0x66,0x69,0x6E,0x65,0x2D,0x74,0x75,0x6E,0x65,0x0B,0x3E,0x40,
+ 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x11,0x53,0x79,
+ 0x6E,0x74,0x61,0x78,0x3A,0x20,0x45,0x35,0x20,0x2B,0x20,0x54,
+ 0x75,0x6E,0x65,0x00,0x3F,0x54,0x68,0x69,0x73,0x20,0x63,0x6F,
+ 0x6D,0x6D,0x61,0x6E,0x64,0x20,0x73,0x68,0x6F,0x75,0x6C,0x64,
+ 0x20,0x62,0x65,0x20,0x75,0x73,0x65,0x64,0x20,0x74,0x6F,0x67,
+ 0x65,0x74,0x68,0x65,0x72,0x20,0x77,0x69,0x74,0x68,0x20,0x61,
+ 0x20,0x6E,0x6F,0x74,0x65,0x2E,0x20,0x49,0x74,0x20,0x77,0x69,
+ 0x6C,0x6C,0x20,0x63,0x61,0x75,0x73,0x65,0x44,0x61,0x6E,0x6F,
+ 0x74,0x68,0x65,0x72,0x20,0x66,0x69,0x6E,0x65,0x2D,0x74,0x75,
+ 0x6E,0x65,0x20,0x76,0x61,0x6C,0x75,0x65,0x20,0x74,0x6F,0x20,
+ 0x62,0x65,0x20,0x75,0x73,0x65,0x64,0x2E,0x20,0x49,0x74,0x20,
+ 0x73,0x65,0x65,0x6D,0x73,0x20,0x71,0x75,0x69,0x74,0x65,0x20,
+ 0x75,0x6E,0x75,0x73,0x61,0x62,0x6C,0x65,0x20,0x74,0x6F,0x20,
+ 0x6D,0x65,0x2E,0x2E,0x2E,0x00,0x16,0x40,0x58,0x30,0x34,0x30,
+ 0x40,0x43,0x30,0x30,0x31,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,
+ 0x20,0x6C,0x6F,0x6F,0x70,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
+ 0x40,0x43,0x30,0x30,0x32,0x12,0x53,0x79,0x6E,0x74,0x61,0x78,
+ 0x3A,0x20,0x45,0x36,0x20,0x2B,0x20,0x43,0x6F,0x75,0x6E,0x74,
+ 0x00,0x45,0x49,0x66,0x20,0x63,0x6F,0x75,0x6E,0x74,0x20,0x69,
+ 0x73,0x20,0x7A,0x65,0x72,0x6F,0x2C,0x20,0x74,0x68,0x65,0x20,
+ 0x62,0x65,0x67,0x69,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x6F,0x66,
+ 0x20,0x74,0x68,0x65,0x20,0x6C,0x6F,0x6F,0x70,0x20,0x77,0x69,
+ 0x6C,0x6C,0x20,0x62,0x65,0x20,0x73,0x70,0x65,0x63,0x69,0x66,
+ 0x69,0x65,0x64,0x2E,0x20,0x57,0x68,0x65,0x6E,0x20,0x61,0x40,
+ 0x6E,0x6F,0x6E,0x2D,0x7A,0x65,0x72,0x6F,0x20,0x76,0x61,0x6C,
+ 0x75,0x65,0x20,0x69,0x73,0x20,0x75,0x73,0x65,0x64,0x2C,0x20,
+ 0x74,0x68,0x65,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,
+ 0x77,0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x6C,0x6F,0x6F,0x70,
+ 0x65,0x64,0x20,0x66,0x72,0x6F,0x6D,0x20,0x74,0x68,0x65,0x20,
+ 0x6C,0x6F,0x6F,0x70,0x06,0x73,0x74,0x61,0x72,0x74,0x2E,0x00,
+ 0x1D,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,
+ 0x65,0x74,0x20,0x74,0x72,0x65,0x6D,0x6F,0x6C,0x6F,0x20,0x63,
+ 0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x0B,0x3E,0x40,0x58,0x30,0x36,
+ 0x30,0x40,0x43,0x30,0x30,0x32,0x11,0x53,0x79,0x6E,0x74,0x61,
+ 0x78,0x3A,0x20,0x45,0x37,0x20,0x2B,0x20,0x54,0x79,0x70,0x65,
+ 0x00,0x3A,0x54,0x68,0x69,0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,
+ 0x6E,0x64,0x20,0x77,0x6F,0x72,0x6B,0x73,0x20,0x65,0x78,0x61,
+ 0x63,0x74,0x6C,0x79,0x20,0x61,0x73,0x20,0x73,0x65,0x74,0x20,
+ 0x76,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x63,0x6F,0x6E,0x74,
+ 0x72,0x6F,0x6C,0x2C,0x20,0x62,0x75,0x74,0x20,0x74,0x68,0x65,
+ 0x2A,0x74,0x72,0x65,0x6D,0x6F,0x6C,0x6F,0x20,0x77,0x61,0x76,
+ 0x65,0x20,0x66,0x6F,0x72,0x6D,0x20,0x77,0x69,0x6C,0x6C,0x20,
+ 0x62,0x65,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x64,0x20,0x69,
+ 0x6E,0x73,0x74,0x65,0x61,0x64,0x2E,0x00,0x15,0x40,0x58,0x30,
+ 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x52,0x65,0x74,0x72,0x69,
+ 0x67,0x20,0x6E,0x6F,0x74,0x65,0x0B,0x3E,0x40,0x58,0x30,0x36,
+ 0x30,0x40,0x43,0x30,0x30,0x32,0x15,0x53,0x79,0x6E,0x74,0x61,
+ 0x78,0x3A,0x20,0x45,0x39,0x20,0x2B,0x20,0x49,0x6E,0x74,0x65,
+ 0x72,0x76,0x61,0x6C,0x00,0x2D,0x52,0x65,0x74,0x72,0x69,0x67,
+ 0x73,0x20,0x74,0x68,0x65,0x20,0x6E,0x6F,0x74,0x65,0x20,0x77,
+ 0x69,0x74,0x68,0x20,0x74,0x68,0x65,0x20,0x73,0x70,0x65,0x63,
+ 0x69,0x66,0x69,0x65,0x64,0x20,0x69,0x6E,0x74,0x65,0x72,0x76,
+ 0x61,0x6C,0x2E,0x00,0x23,0x40,0x58,0x30,0x34,0x30,0x40,0x43,
+ 0x30,0x30,0x31,0x46,0x69,0x6E,0x65,0x20,0x76,0x6F,0x6C,0x75,
+ 0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,0x65,0x20,0x75,0x70,0x2F,
+ 0x64,0x6F,0x77,0x6E,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
+ 0x43,0x30,0x30,0x32,0x19,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,
+ 0x20,0x45,0x28,0x41,0x20,0x6F,0x72,0x20,0x42,0x29,0x20,0x2B,
+ 0x20,0x53,0x70,0x65,0x65,0x64,0x00,0x44,0x54,0x68,0x69,0x73,
+ 0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x20,0x77,0x6F,0x72,
+ 0x6B,0x73,0x20,0x61,0x73,0x20,0x74,0x68,0x65,0x20,0x75,0x73,
+ 0x75,0x61,0x6C,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,
0x6C,0x69,0x64,0x65,0x2C,0x20,0x62,0x75,0x74,0x20,0x69,0x74,
- 0x20,0x73,0x6C,0x69,0x64,0x65,0x73,0x20,0x74,0x68,0x65,0x16,
- 0x67,0x6C,0x6F,0x62,0x61,0x6C,0x20,0x76,0x6F,0x6C,0x75,0x6D,
- 0x65,0x20,0x69,0x6E,0x73,0x74,0x65,0x61,0x64,0x2E,0x00,0x11,
- 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x4B,0x65,
- 0x79,0x20,0x6F,0x66,0x66,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
- 0x40,0x43,0x30,0x30,0x32,0x10,0x53,0x79,0x6E,0x74,0x61,0x78,
- 0x3A,0x20,0x4B,0x20,0x2B,0x20,0x54,0x69,0x63,0x6B,0x00,0x3C,
- 0x54,0x68,0x69,0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,
- 0x20,0x77,0x69,0x6C,0x6C,0x20,0x74,0x72,0x69,0x67,0x67,0x65,
- 0x72,0x20,0x61,0x20,0x22,0x4B,0x65,0x79,0x20,0x6F,0x66,0x66,
- 0x22,0x20,0x61,0x74,0x20,0x74,0x68,0x65,0x20,0x73,0x70,0x65,
- 0x63,0x69,0x66,0x69,0x65,0x64,0x20,0x74,0x69,0x63,0x6B,0x2E,
- 0x00,0x1F,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
- 0x53,0x65,0x74,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,
- 0x20,0x70,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x0B,0x3E,0x40,
- 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x14,0x53,0x79,
- 0x6E,0x74,0x61,0x78,0x3A,0x20,0x4C,0x20,0x2B,0x20,0x50,0x6F,
- 0x73,0x69,0x74,0x69,0x6F,0x6E,0x00,0x3E,0x43,0x68,0x61,0x6E,
- 0x67,0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x65,0x6E,0x76,0x65,
- 0x6C,0x6F,0x70,0x65,0x20,0x70,0x6F,0x73,0x69,0x74,0x69,0x6F,
- 0x6E,0x2E,0x20,0x4D,0x61,0x67,0x6E,0x75,0x73,0x20,0x74,0x6F,
- 0x6C,0x64,0x20,0x6D,0x65,0x20,0x74,0x68,0x61,0x74,0x20,0x69,
- 0x74,0x20,0x77,0x6F,0x75,0x6C,0x64,0x20,0x62,0x65,0x0C,0x76,
- 0x65,0x72,0x79,0x20,0x75,0x73,0x61,0x62,0x6C,0x65,0x2E,0x00,
+ 0x20,0x77,0x69,0x6C,0x6C,0x20,0x6F,0x6E,0x6C,0x79,0x20,0x73,
+ 0x6C,0x69,0x64,0x65,0x05,0x6F,0x6E,0x63,0x65,0x2E,0x00,0x12,
+ 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x4E,0x6F,
+ 0x74,0x65,0x20,0x63,0x75,0x74,0x0B,0x3E,0x40,0x58,0x30,0x36,
+ 0x30,0x40,0x43,0x30,0x30,0x32,0x11,0x53,0x79,0x6E,0x74,0x61,
+ 0x78,0x3A,0x20,0x45,0x43,0x20,0x2B,0x20,0x54,0x69,0x63,0x6B,
+ 0x00,0x43,0x43,0x75,0x74,0x73,0x20,0x74,0x68,0x65,0x20,0x6E,
+ 0x6F,0x74,0x65,0x20,0x61,0x74,0x20,0x74,0x68,0x65,0x20,0x73,
+ 0x70,0x65,0x63,0x69,0x66,0x69,0x65,0x64,0x20,0x74,0x69,0x63,
+ 0x6B,0x2E,0x20,0x4E,0x6F,0x74,0x65,0x20,0x74,0x68,0x61,0x74,
+ 0x20,0x69,0x74,0x20,0x77,0x69,0x6C,0x6C,0x20,0x6F,0x6E,0x6C,
+ 0x79,0x20,0x73,0x65,0x74,0x20,0x74,0x68,0x65,0x34,0x76,0x6F,
+ 0x6C,0x75,0x6D,0x65,0x20,0x74,0x6F,0x20,0x7A,0x65,0x72,0x6F,
+ 0x2C,0x20,0x61,0x6E,0x64,0x20,0x74,0x68,0x65,0x20,0x73,0x61,
+ 0x6D,0x70,0x6C,0x65,0x20,0x77,0x69,0x6C,0x6C,0x20,0x73,0x74,
+ 0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x70,0x6C,0x61,0x79,0x65,
+ 0x64,0x2E,0x00,0x14,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
+ 0x30,0x31,0x4E,0x6F,0x74,0x65,0x20,0x64,0x65,0x6C,0x61,0x79,
+ 0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
+ 0x12,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x45,0x44,0x20,
+ 0x2B,0x20,0x54,0x69,0x63,0x6B,0x73,0x00,0x3E,0x54,0x68,0x69,
+ 0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x20,0x77,0x69,
+ 0x6C,0x6C,0x20,0x64,0x65,0x6C,0x61,0x79,0x20,0x74,0x68,0x65,
+ 0x20,0x6E,0x6F,0x74,0x65,0x20,0x74,0x68,0x65,0x20,0x73,0x65,
+ 0x6C,0x65,0x63,0x74,0x65,0x64,0x20,0x6E,0x75,0x6D,0x62,0x65,
+ 0x72,0x20,0x6F,0x66,0x20,0x74,0x69,0x63,0x6B,0x73,0x2E,0x00,
0x17,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x50,
- 0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x73,0x6C,0x69,0x64,0x65,
+ 0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x64,0x65,0x6C,0x61,0x79,
0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
- 0x24,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x50,0x20,0x2B,
- 0x20,0x52,0x69,0x67,0x68,0x74,0x20,0x73,0x70,0x65,0x65,0x64,
- 0x20,0x2B,0x20,0x4C,0x65,0x66,0x74,0x20,0x73,0x70,0x65,0x65,
- 0x64,0x00,0x42,0x54,0x68,0x69,0x73,0x20,0x63,0x6F,0x6D,0x6D,
- 0x61,0x6E,0x64,0x20,0x73,0x6C,0x69,0x64,0x65,0x73,0x20,0x74,
- 0x68,0x65,0x20,0x70,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x70,
- 0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x2E,0x20,0x49,0x74,0x20,
- 0x77,0x6F,0x72,0x6B,0x73,0x20,0x6C,0x69,0x6B,0x65,0x20,0x74,
- 0x68,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x3C,0x73,0x6C,
- 0x69,0x64,0x65,0x2E,0x20,0x4E,0x6F,0x74,0x65,0x20,0x74,0x68,
- 0x61,0x74,0x20,0x73,0x6F,0x6D,0x65,0x20,0x73,0x6F,0x75,0x6E,
- 0x64,0x20,0x63,0x61,0x72,0x64,0x73,0x20,0x6D,0x61,0x79,0x20,
- 0x6E,0x6F,0x74,0x20,0x68,0x61,0x6E,0x64,0x6C,0x65,0x20,0x32,
- 0x35,0x36,0x20,0x70,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x0A,0x70,
- 0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x73,0x2E,0x00,0x16,0x40,
- 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x4D,0x75,0x6C,
- 0x74,0x69,0x20,0x72,0x65,0x74,0x72,0x69,0x67,0x0B,0x3E,0x40,
- 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x24,0x53,0x79,
- 0x6E,0x74,0x61,0x78,0x3A,0x20,0x52,0x20,0x2B,0x20,0x56,0x6F,
- 0x6C,0x75,0x6D,0x65,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x20,
- 0x2B,0x20,0x49,0x6E,0x74,0x65,0x72,0x76,0x61,0x6C,0x00,0x32,
- 0x54,0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x61,0x6E,0x20,0x65,
- 0x78,0x74,0x65,0x6E,0x64,0x65,0x64,0x20,0x76,0x65,0x72,0x73,
- 0x69,0x6F,0x6E,0x20,0x6F,0x66,0x20,0x74,0x68,0x65,0x20,0x72,
- 0x65,0x74,0x72,0x69,0x67,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,
- 0x64,0x2E,0x00,0x0E,0x56,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x63,
- 0x68,0x61,0x6E,0x67,0x65,0x3A,0x1F,0x3E,0x40,0x58,0x31,0x30,
- 0x30,0x30,0x20,0x3D,0x20,0x4E,0x6F,0x6E,0x65,0x20,0x20,0x40,
- 0x54,0x33,0x30,0x30,0x38,0x20,0x3D,0x20,0x55,0x6E,0x75,0x73,
- 0x65,0x64,0x16,0x3E,0x31,0x20,0x3D,0x20,0x2D,0x31,0x20,0x20,
- 0x20,0x20,0x40,0x54,0x33,0x30,0x30,0x39,0x20,0x3D,0x20,0x2B,
- 0x31,0x16,0x3E,0x32,0x20,0x3D,0x20,0x2D,0x32,0x20,0x20,0x20,
- 0x20,0x40,0x54,0x33,0x30,0x30,0x41,0x20,0x3D,0x20,0x2B,0x32,
- 0x16,0x3E,0x33,0x20,0x3D,0x20,0x2D,0x34,0x20,0x20,0x20,0x20,
- 0x40,0x54,0x33,0x30,0x30,0x42,0x20,0x3D,0x20,0x2B,0x34,0x16,
- 0x3E,0x34,0x20,0x3D,0x20,0x2D,0x38,0x20,0x20,0x20,0x20,0x40,
- 0x54,0x33,0x30,0x30,0x43,0x20,0x3D,0x20,0x2B,0x38,0x17,0x3E,
- 0x35,0x20,0x3D,0x20,0x2D,0x31,0x36,0x20,0x20,0x20,0x40,0x54,
- 0x33,0x30,0x30,0x44,0x20,0x3D,0x20,0x2B,0x31,0x36,0x18,0x3E,
- 0x36,0x20,0x3D,0x20,0x2A,0x32,0x2F,0x33,0x20,0x20,0x40,0x54,
- 0x33,0x30,0x30,0x45,0x20,0x3D,0x20,0x2A,0x33,0x2F,0x32,0x16,
- 0x3E,0x37,0x20,0x3D,0x20,0x2A,0x31,0x2F,0x32,0x20,0x20,0x40,
- 0x54,0x33,0x30,0x30,0x46,0x20,0x3D,0x20,0x2A,0x32,0x00,0x10,
- 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x54,0x72,
- 0x65,0x6D,0x6F,0x72,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
- 0x43,0x30,0x30,0x32,0x1E,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,
- 0x20,0x54,0x20,0x2B,0x20,0x4F,0x6E,0x20,0x74,0x69,0x6D,0x65,
- 0x20,0x2B,0x20,0x4F,0x66,0x66,0x20,0x74,0x69,0x6D,0x65,0x00,
- 0x3E,0x54,0x68,0x69,0x73,0x20,0x77,0x65,0x69,0x72,0x64,0x20,
+ 0x12,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x45,0x45,0x20,
+ 0x2B,0x20,0x4E,0x6F,0x74,0x65,0x73,0x00,0x41,0x54,0x68,0x69,
+ 0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x20,0x77,0x69,
+ 0x6C,0x6C,0x20,0x64,0x65,0x6C,0x61,0x79,0x20,0x74,0x68,0x65,
+ 0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x74,0x68,0x65,
+ 0x20,0x73,0x65,0x6C,0x65,0x63,0x74,0x65,0x64,0x20,0x6E,0x75,
+ 0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x6E,0x6F,0x74,0x65,
+ 0x73,0x2E,0x00,0x13,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
+ 0x30,0x31,0x53,0x65,0x74,0x20,0x73,0x70,0x65,0x65,0x64,0x0B,
+ 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x11,
+ 0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x46,0x20,0x2B,0x20,
+ 0x56,0x61,0x6C,0x75,0x65,0x00,0x42,0x54,0x68,0x69,0x73,0x20,
0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x20,0x77,0x69,0x6C,0x6C,
- 0x20,0x73,0x65,0x74,0x20,0x74,0x68,0x65,0x20,0x76,0x6F,0x6C,
- 0x75,0x6D,0x65,0x20,0x74,0x6F,0x20,0x7A,0x65,0x72,0x6F,0x20,
- 0x64,0x75,0x72,0x69,0x6E,0x67,0x20,0x6F,0x66,0x66,0x20,0x74,
- 0x69,0x6D,0x65,0x36,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,
- 0x66,0x20,0x74,0x69,0x63,0x6B,0x73,0x2E,0x20,0x49,0x74,0x20,
- 0x69,0x73,0x20,0x69,0x6E,0x63,0x6C,0x75,0x64,0x65,0x64,0x20,
- 0x66,0x6F,0x72,0x20,0x53,0x54,0x4D,0x20,0x63,0x6F,0x6D,0x70,
- 0x61,0x74,0x69,0x62,0x69,0x6C,0x69,0x74,0x79,0x2E,0x00,0x27,
- 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x45,0x78,
- 0x74,0x72,0x61,0x20,0x66,0x69,0x6E,0x65,0x20,0x70,0x6F,0x72,
- 0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,0x75,0x70,0x2F,0x64,
- 0x6F,0x77,0x6E,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
- 0x30,0x30,0x32,0x19,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,
- 0x58,0x28,0x31,0x20,0x6F,0x72,0x20,0x32,0x29,0x20,0x2B,0x20,
- 0x53,0x70,0x65,0x65,0x64,0x00,0x3C,0x54,0x68,0x69,0x73,0x20,
+ 0x20,0x73,0x65,0x74,0x20,0x74,0x68,0x65,0x20,0x73,0x70,0x65,
+ 0x65,0x64,0x20,0x6F,0x72,0x20,0x42,0x50,0x4D,0x20,0x76,0x61,
+ 0x6C,0x75,0x65,0x20,0x6F,0x66,0x20,0x74,0x68,0x65,0x20,0x73,
+ 0x6F,0x6E,0x67,0x2E,0x20,0x49,0x66,0x20,0x76,0x61,0x6C,0x75,
+ 0x65,0x3F,0x69,0x73,0x20,0x6C,0x65,0x73,0x73,0x20,0x74,0x68,
+ 0x61,0x6E,0x20,0x24,0x32,0x30,0x2C,0x20,0x74,0x68,0x65,0x20,
+ 0x73,0x70,0x65,0x65,0x64,0x20,0x77,0x69,0x6C,0x6C,0x20,0x62,
+ 0x65,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x64,0x2E,0x20,0x4F,
+ 0x74,0x68,0x65,0x72,0x77,0x69,0x73,0x65,0x2C,0x20,0x74,0x68,
+ 0x65,0x20,0x42,0x50,0x4D,0x16,0x76,0x61,0x6C,0x75,0x65,0x20,
+ 0x77,0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x63,0x68,0x61,0x6E,
+ 0x67,0x65,0x64,0x2E,0x00,0x1B,0x40,0x58,0x30,0x34,0x30,0x40,
+ 0x43,0x30,0x30,0x31,0x53,0x65,0x74,0x20,0x67,0x6C,0x6F,0x62,
+ 0x61,0x6C,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x0B,0x3E,0x40,
+ 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x12,0x53,0x79,
+ 0x6E,0x74,0x61,0x78,0x3A,0x20,0x47,0x20,0x2B,0x20,0x76,0x6F,
+ 0x6C,0x75,0x6D,0x65,0x00,0x42,0x53,0x65,0x74,0x73,0x20,0x74,
+ 0x68,0x65,0x20,0x67,0x6C,0x6F,0x62,0x61,0x6C,0x20,0x76,0x6F,
+ 0x6C,0x75,0x6D,0x65,0x2E,0x20,0x54,0x68,0x65,0x20,0x76,0x6F,
+ 0x6C,0x75,0x6D,0x65,0x20,0x73,0x68,0x6F,0x75,0x6C,0x64,0x20,
+ 0x6E,0x6F,0x74,0x20,0x62,0x65,0x20,0x67,0x72,0x65,0x61,0x74,
+ 0x65,0x72,0x20,0x74,0x68,0x61,0x6E,0x20,0x24,0x34,0x30,0x2E,
+ 0x00,0x1D,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
+ 0x47,0x6C,0x6F,0x62,0x61,0x6C,0x20,0x76,0x6F,0x6C,0x75,0x6D,
+ 0x65,0x20,0x73,0x6C,0x69,0x64,0x65,0x0B,0x3E,0x40,0x58,0x30,
+ 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x21,0x53,0x79,0x6E,0x74,
+ 0x61,0x78,0x3A,0x20,0x48,0x20,0x2B,0x20,0x55,0x70,0x20,0x73,
+ 0x70,0x65,0x65,0x64,0x20,0x2B,0x20,0x44,0x6F,0x77,0x6E,0x20,
+ 0x73,0x70,0x65,0x65,0x64,0x00,0x3D,0x54,0x68,0x69,0x73,0x20,
0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x20,0x77,0x6F,0x72,0x6B,
- 0x73,0x20,0x61,0x73,0x20,0x66,0x69,0x6E,0x65,0x20,0x70,0x6F,
- 0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,0x75,0x70,0x2F,
- 0x64,0x6F,0x77,0x6E,0x2C,0x20,0x62,0x75,0x74,0x20,0x74,0x68,
- 0x65,0x20,0x73,0x70,0x65,0x65,0x64,0x18,0x77,0x69,0x6C,0x6C,
- 0x20,0x62,0x65,0x20,0x64,0x69,0x76,0x69,0x64,0x65,0x64,0x20,
- 0x62,0x79,0x20,0x66,0x6F,0x75,0x72,0x2E,0x00,0x03,0x45,0x4E,
- 0x44,0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
+ 0x73,0x20,0x65,0x78,0x61,0x63,0x74,0x6C,0x79,0x20,0x61,0x73,
+ 0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x73,0x6C,0x69,0x64,
+ 0x65,0x2C,0x20,0x62,0x75,0x74,0x20,0x69,0x74,0x20,0x73,0x6C,
+ 0x69,0x64,0x65,0x73,0x20,0x74,0x68,0x65,0x16,0x67,0x6C,0x6F,
+ 0x62,0x61,0x6C,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x69,
+ 0x6E,0x73,0x74,0x65,0x61,0x64,0x2E,0x00,0x11,0x40,0x58,0x30,
+ 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x4B,0x65,0x79,0x20,0x6F,
+ 0x66,0x66,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
+ 0x30,0x32,0x10,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x4B,
+ 0x20,0x2B,0x20,0x54,0x69,0x63,0x6B,0x00,0x3C,0x54,0x68,0x69,
+ 0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x20,0x77,0x69,
+ 0x6C,0x6C,0x20,0x74,0x72,0x69,0x67,0x67,0x65,0x72,0x20,0x61,
+ 0x20,0x22,0x4B,0x65,0x79,0x20,0x6F,0x66,0x66,0x22,0x20,0x61,
+ 0x74,0x20,0x74,0x68,0x65,0x20,0x73,0x70,0x65,0x63,0x69,0x66,
+ 0x69,0x65,0x64,0x20,0x74,0x69,0x63,0x6B,0x2E,0x00,0x1F,0x40,
+ 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x65,0x74,
+ 0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x20,0x70,0x6F,
+ 0x73,0x69,0x74,0x69,0x6F,0x6E,0x0B,0x3E,0x40,0x58,0x30,0x36,
+ 0x30,0x40,0x43,0x30,0x30,0x32,0x14,0x53,0x79,0x6E,0x74,0x61,
+ 0x78,0x3A,0x20,0x4C,0x20,0x2B,0x20,0x50,0x6F,0x73,0x69,0x74,
+ 0x69,0x6F,0x6E,0x00,0x3E,0x43,0x68,0x61,0x6E,0x67,0x65,0x73,
+ 0x20,0x74,0x68,0x65,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,
+ 0x65,0x20,0x70,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x2E,0x20,
+ 0x4D,0x61,0x67,0x6E,0x75,0x73,0x20,0x74,0x6F,0x6C,0x64,0x20,
+ 0x6D,0x65,0x20,0x74,0x68,0x61,0x74,0x20,0x69,0x74,0x20,0x77,
+ 0x6F,0x75,0x6C,0x64,0x20,0x62,0x65,0x0C,0x76,0x65,0x72,0x79,
+ 0x20,0x75,0x73,0x61,0x62,0x6C,0x65,0x2E,0x00,0x17,0x40,0x58,
+ 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x50,0x61,0x6E,0x6E,
+ 0x69,0x6E,0x67,0x20,0x73,0x6C,0x69,0x64,0x65,0x0B,0x3E,0x40,
+ 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x24,0x53,0x79,
+ 0x6E,0x74,0x61,0x78,0x3A,0x20,0x50,0x20,0x2B,0x20,0x52,0x69,
+ 0x67,0x68,0x74,0x20,0x73,0x70,0x65,0x65,0x64,0x20,0x2B,0x20,
+ 0x4C,0x65,0x66,0x74,0x20,0x73,0x70,0x65,0x65,0x64,0x00,0x42,
+ 0x54,0x68,0x69,0x73,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,
+ 0x20,0x73,0x6C,0x69,0x64,0x65,0x73,0x20,0x74,0x68,0x65,0x20,
+ 0x70,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x70,0x6F,0x73,0x69,
+ 0x74,0x69,0x6F,0x6E,0x2E,0x20,0x49,0x74,0x20,0x77,0x6F,0x72,
+ 0x6B,0x73,0x20,0x6C,0x69,0x6B,0x65,0x20,0x74,0x68,0x65,0x20,
+ 0x76,0x6F,0x6C,0x75,0x6D,0x65,0x3C,0x73,0x6C,0x69,0x64,0x65,
+ 0x2E,0x20,0x4E,0x6F,0x74,0x65,0x20,0x74,0x68,0x61,0x74,0x20,
+ 0x73,0x6F,0x6D,0x65,0x20,0x73,0x6F,0x75,0x6E,0x64,0x20,0x63,
+ 0x61,0x72,0x64,0x73,0x20,0x6D,0x61,0x79,0x20,0x6E,0x6F,0x74,
+ 0x20,0x68,0x61,0x6E,0x64,0x6C,0x65,0x20,0x32,0x35,0x36,0x20,
+ 0x70,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x0A,0x70,0x6F,0x73,0x69,
+ 0x74,0x69,0x6F,0x6E,0x73,0x2E,0x00,0x16,0x40,0x58,0x30,0x34,
+ 0x30,0x40,0x43,0x30,0x30,0x31,0x4D,0x75,0x6C,0x74,0x69,0x20,
+ 0x72,0x65,0x74,0x72,0x69,0x67,0x0B,0x3E,0x40,0x58,0x30,0x36,
+ 0x30,0x40,0x43,0x30,0x30,0x32,0x24,0x53,0x79,0x6E,0x74,0x61,
+ 0x78,0x3A,0x20,0x52,0x20,0x2B,0x20,0x56,0x6F,0x6C,0x75,0x6D,
+ 0x65,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x20,0x2B,0x20,0x49,
+ 0x6E,0x74,0x65,0x72,0x76,0x61,0x6C,0x00,0x32,0x54,0x68,0x69,
+ 0x73,0x20,0x69,0x73,0x20,0x61,0x6E,0x20,0x65,0x78,0x74,0x65,
+ 0x6E,0x64,0x65,0x64,0x20,0x76,0x65,0x72,0x73,0x69,0x6F,0x6E,
+ 0x20,0x6F,0x66,0x20,0x74,0x68,0x65,0x20,0x72,0x65,0x74,0x72,
+ 0x69,0x67,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x2E,0x00,
+ 0x0E,0x56,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x63,0x68,0x61,0x6E,
+ 0x67,0x65,0x3A,0x1F,0x3E,0x40,0x58,0x31,0x30,0x30,0x30,0x20,
+ 0x3D,0x20,0x4E,0x6F,0x6E,0x65,0x20,0x20,0x40,0x54,0x33,0x30,
+ 0x30,0x38,0x20,0x3D,0x20,0x55,0x6E,0x75,0x73,0x65,0x64,0x16,
+ 0x3E,0x31,0x20,0x3D,0x20,0x2D,0x31,0x20,0x20,0x20,0x20,0x40,
+ 0x54,0x33,0x30,0x30,0x39,0x20,0x3D,0x20,0x2B,0x31,0x16,0x3E,
+ 0x32,0x20,0x3D,0x20,0x2D,0x32,0x20,0x20,0x20,0x20,0x40,0x54,
+ 0x33,0x30,0x30,0x41,0x20,0x3D,0x20,0x2B,0x32,0x16,0x3E,0x33,
+ 0x20,0x3D,0x20,0x2D,0x34,0x20,0x20,0x20,0x20,0x40,0x54,0x33,
+ 0x30,0x30,0x42,0x20,0x3D,0x20,0x2B,0x34,0x16,0x3E,0x34,0x20,
+ 0x3D,0x20,0x2D,0x38,0x20,0x20,0x20,0x20,0x40,0x54,0x33,0x30,
+ 0x30,0x43,0x20,0x3D,0x20,0x2B,0x38,0x17,0x3E,0x35,0x20,0x3D,
+ 0x20,0x2D,0x31,0x36,0x20,0x20,0x20,0x40,0x54,0x33,0x30,0x30,
+ 0x44,0x20,0x3D,0x20,0x2B,0x31,0x36,0x18,0x3E,0x36,0x20,0x3D,
+ 0x20,0x2A,0x32,0x2F,0x33,0x20,0x20,0x40,0x54,0x33,0x30,0x30,
+ 0x45,0x20,0x3D,0x20,0x2A,0x33,0x2F,0x32,0x16,0x3E,0x37,0x20,
+ 0x3D,0x20,0x2A,0x31,0x2F,0x32,0x20,0x20,0x40,0x54,0x33,0x30,
+ 0x30,0x46,0x20,0x3D,0x20,0x2A,0x32,0x00,0x10,0x40,0x58,0x30,
+ 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x54,0x72,0x65,0x6D,0x6F,
+ 0x72,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,
+ 0x32,0x1E,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x54,0x20,
+ 0x2B,0x20,0x4F,0x6E,0x20,0x74,0x69,0x6D,0x65,0x20,0x2B,0x20,
+ 0x4F,0x66,0x66,0x20,0x74,0x69,0x6D,0x65,0x00,0x3E,0x54,0x68,
+ 0x69,0x73,0x20,0x77,0x65,0x69,0x72,0x64,0x20,0x63,0x6F,0x6D,
+ 0x6D,0x61,0x6E,0x64,0x20,0x77,0x69,0x6C,0x6C,0x20,0x73,0x65,
+ 0x74,0x20,0x74,0x68,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,
+ 0x20,0x74,0x6F,0x20,0x7A,0x65,0x72,0x6F,0x20,0x64,0x75,0x72,
+ 0x69,0x6E,0x67,0x20,0x6F,0x66,0x66,0x20,0x74,0x69,0x6D,0x65,
+ 0x36,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x74,
+ 0x69,0x63,0x6B,0x73,0x2E,0x20,0x49,0x74,0x20,0x69,0x73,0x20,
+ 0x69,0x6E,0x63,0x6C,0x75,0x64,0x65,0x64,0x20,0x66,0x6F,0x72,
+ 0x20,0x53,0x54,0x4D,0x20,0x63,0x6F,0x6D,0x70,0x61,0x74,0x69,
+ 0x62,0x69,0x6C,0x69,0x74,0x79,0x2E,0x00,0x27,0x40,0x58,0x30,
+ 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x45,0x78,0x74,0x72,0x61,
+ 0x20,0x66,0x69,0x6E,0x65,0x20,0x70,0x6F,0x72,0x74,0x61,0x6D,
+ 0x65,0x6E,0x74,0x6F,0x20,0x75,0x70,0x2F,0x64,0x6F,0x77,0x6E,
+ 0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
+ 0x19,0x53,0x79,0x6E,0x74,0x61,0x78,0x3A,0x20,0x58,0x28,0x31,
+ 0x20,0x6F,0x72,0x20,0x32,0x29,0x20,0x2B,0x20,0x53,0x70,0x65,
+ 0x65,0x64,0x00,0x3C,0x54,0x68,0x69,0x73,0x20,0x63,0x6F,0x6D,
+ 0x6D,0x61,0x6E,0x64,0x20,0x77,0x6F,0x72,0x6B,0x73,0x20,0x61,
+ 0x73,0x20,0x66,0x69,0x6E,0x65,0x20,0x70,0x6F,0x72,0x74,0x61,
+ 0x6D,0x65,0x6E,0x74,0x6F,0x20,0x75,0x70,0x2F,0x64,0x6F,0x77,
+ 0x6E,0x2C,0x20,0x62,0x75,0x74,0x20,0x74,0x68,0x65,0x20,0x73,
+ 0x70,0x65,0x65,0x64,0x18,0x77,0x69,0x6C,0x6C,0x20,0x62,0x65,
+ 0x20,0x64,0x69,0x76,0x69,0x64,0x65,0x64,0x20,0x62,0x79,0x20,
+ 0x66,0x6F,0x75,0x72,0x2E,0x00,0x03,0x45,0x4E,0x44,0x4C,0x3B,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
- 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
+ 0x2A,0x2A,0x2A,0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
- 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x0A,
- 0x40,0x4C,0x4B,0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x00,0x0B,
- 0x3E,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x32,0x4A,
- 0x3E,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x68,0x61,0x76,0x65,
- 0x20,0x61,0x6E,0x20,0x61,0x6D,0x62,0x69,0x74,0x69,0x6F,0x6E,
- 0x20,0x74,0x6F,0x20,0x63,0x72,0x65,0x61,0x74,0x65,0x20,0x6D,
- 0x75,0x73,0x69,0x63,0x20,0x65,0x66,0x66,0x69,0x63,0x69,0x65,
- 0x6E,0x74,0x6C,0x79,0x20,0x77,0x65,0x20,0x73,0x74,0x72,0x6F,
- 0x6E,0x67,0x6C,0x79,0x20,0x72,0x65,0x63,0x6F,0x6D,0x6D,0x65,
- 0x6E,0x64,0x44,0x74,0x68,0x61,0x74,0x20,0x79,0x6F,0x75,0x20,
- 0x6C,0x65,0x61,0x72,0x6E,0x20,0x41,0x4C,0x4C,0x20,0x74,0x68,
- 0x65,0x20,0x6B,0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x20,0x66,
- 0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x73,0x2E,0x20,0x4D,0x61,
- 0x6E,0x79,0x20,0x6F,0x66,0x20,0x74,0x68,0x65,0x6D,0x20,0x61,
- 0x72,0x65,0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x65,0x45,
- 0x66,0x72,0x6F,0x6D,0x20,0x46,0x61,0x73,0x74,0x74,0x72,0x61,
- 0x63,0x6B,0x65,0x72,0x20,0x31,0x20,0x61,0x6E,0x64,0x20,0x50,
- 0x72,0x6F,0x54,0x72,0x61,0x63,0x6B,0x65,0x72,0x20,0x74,0x6F,
- 0x20,0x65,0x6E,0x73,0x75,0x72,0x65,0x20,0x74,0x68,0x61,0x74,
- 0x20,0x79,0x6F,0x75,0x20,0x66,0x65,0x65,0x6C,0x20,0x63,0x6F,
- 0x6D,0x66,0x6F,0x72,0x74,0x61,0x62,0x6C,0x65,0x2E,0x75,0x73,
- 0x69,0x6E,0x67,0x20,0x74,0x68,0x69,0x73,0x20,0x70,0x72,0x6F,
- 0x67,0x72,0x61,0x6D,0x20,0x66,0x72,0x6F,0x6D,0x20,0x74,0x68,
- 0x65,0x20,0x76,0x65,0x72,0x79,0x20,0x66,0x69,0x72,0x73,0x74,
- 0x20,0x6D,0x69,0x6E,0x75,0x74,0x65,0x2E,0x01,0x3E,0x0B,0x3E,
- 0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,0x26,0x3E,
- 0x59,0x6F,0x75,0x20,0x73,0x68,0x6F,0x75,0x6C,0x64,0x20,0x62,
- 0x65,0x20,0x61,0x77,0x61,0x72,0x65,0x20,0x6F,0x66,0x20,0x74,
- 0x68,0x65,0x20,0x66,0x61,0x63,0x74,0x20,0x74,0x68,0x61,0x74,
- 0x3A,0x01,0x3E,0x48,0x3E,0x40,0x43,0x30,0x30,0x32,0x54,0x68,
- 0x69,0x73,0x20,0x68,0x65,0x6C,0x70,0x20,0x74,0x65,0x78,0x74,
- 0x20,0x69,0x73,0x20,0x77,0x72,0x69,0x74,0x74,0x65,0x6E,0x20,
- 0x75,0x73,0x69,0x6E,0x67,0x20,0x61,0x20,0x53,0x77,0x65,0x64,
- 0x69,0x73,0x68,0x20,0x6B,0x65,0x79,0x62,0x6F,0x61,0x72,0x64,
- 0x2E,0x20,0x54,0x68,0x65,0x72,0x65,0x66,0x6F,0x72,0x65,0x20,
- 0x73,0x6F,0x6D,0x65,0x2F,0x72,0x65,0x66,0x65,0x72,0x65,0x6E,
- 0x63,0x65,0x73,0x20,0x74,0x6F,0x20,0x6E,0x6F,0x6E,0x2D,0x6F,
- 0x72,0x64,0x69,0x6E,0x61,0x72,0x79,0x20,0x6B,0x65,0x79,0x73,
- 0x20,0x6D,0x69,0x67,0x68,0x74,0x20,0x62,0x65,0x20,0x77,0x72,
- 0x6F,0x6E,0x67,0x2E,0x0F,0x53,0x68,0x20,0x3D,0x20,0x73,0x68,
- 0x69,0x66,0x74,0x20,0x6B,0x65,0x79,0x2E,0x01,0x3E,0x10,0x40,
- 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x56,0x69,0x64,
- 0x65,0x6F,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
- 0x30,0x30,0x32,0x25,0x41,0x6C,0x74,0x2B,0x45,0x6E,0x74,0x65,
- 0x72,0x20,0x40,0x54,0x31,0x36,0x30,0x54,0x6F,0x67,0x67,0x6C,
- 0x65,0x20,0x66,0x75,0x6C,0x6C,0x73,0x63,0x72,0x65,0x65,0x6E,
- 0x20,0x6D,0x6F,0x64,0x65,0x01,0x3E,0x2C,0x3E,0x28,0x4F,0x72,
- 0x20,0x22,0x4C,0x65,0x66,0x74,0x20,0x43,0x74,0x72,0x6C,0x20,
- 0x2B,0x20,0x4C,0x65,0x66,0x74,0x20,0x43,0x6F,0x6D,0x6D,0x61,
- 0x6E,0x64,0x20,0x2B,0x20,0x46,0x22,0x20,0x6F,0x6E,0x20,0x4D,
- 0x61,0x63,0x73,0x29,0x00,0x17,0x40,0x58,0x30,0x34,0x30,0x40,
- 0x43,0x30,0x30,0x31,0x43,0x75,0x72,0x73,0x6F,0x72,0x20,0x6D,
- 0x6F,0x76,0x65,0x73,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
- 0x40,0x43,0x30,0x30,0x32,0x1D,0x46,0x39,0x2E,0x2E,0x46,0x31,
- 0x32,0x20,0x40,0x54,0x31,0x36,0x30,0x4A,0x75,0x6D,0x70,0x20,
- 0x69,0x6E,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x2E,0x32,
- 0x3E,0x43,0x74,0x72,0x6C,0x2B,0x46,0x39,0x2E,0x2E,0x46,0x31,
- 0x32,0x20,0x40,0x54,0x31,0x36,0x30,0x50,0x61,0x74,0x74,0x65,
- 0x72,0x6E,0x2D,0x70,0x6C,0x61,0x79,0x20,0x66,0x72,0x6F,0x6D,
- 0x20,0x46,0x39,0x2E,0x2E,0x46,0x31,0x32,0x20,0x6C,0x69,0x6E,
- 0x65,0x2E,0x2F,0x3E,0x53,0x68,0x2B,0x46,0x39,0x2E,0x2E,0x46,
- 0x31,0x32,0x20,0x40,0x54,0x31,0x36,0x30,0x53,0x74,0x6F,0x72,
- 0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x6C,0x69,
- 0x6E,0x65,0x20,0x69,0x6E,0x20,0x46,0x39,0x2E,0x2E,0x46,0x31,
- 0x32,0x2E,0x24,0x3E,0x50,0x61,0x67,0x65,0x55,0x70,0x20,0x20,
- 0x40,0x54,0x31,0x36,0x30,0x4A,0x75,0x6D,0x70,0x20,0x31,0x36,
- 0x2D,0x6C,0x69,0x6E,0x65,0x73,0x20,0x75,0x70,0x77,0x61,0x72,
- 0x64,0x73,0x2E,0x27,0x3E,0x50,0x61,0x67,0x65,0x44,0x6F,0x77,
- 0x6E,0x20,0x40,0x54,0x31,0x36,0x30,0x4A,0x75,0x6D,0x70,0x20,
- 0x31,0x36,0x2D,0x6C,0x69,0x6E,0x65,0x73,0x20,0x64,0x6F,0x77,
- 0x6E,0x77,0x61,0x72,0x64,0x73,0x2E,0x1B,0x3E,0x48,0x6F,0x6D,
- 0x65,0x20,0x20,0x40,0x54,0x31,0x36,0x30,0x4A,0x75,0x6D,0x70,
- 0x20,0x74,0x6F,0x20,0x6C,0x69,0x6E,0x65,0x20,0x30,0x2E,0x1D,
- 0x3E,0x45,0x6E,0x64,0x20,0x20,0x40,0x54,0x31,0x36,0x30,0x4A,
- 0x75,0x6D,0x70,0x20,0x74,0x6F,0x20,0x6C,0x61,0x73,0x74,0x20,
- 0x6C,0x69,0x6E,0x65,0x2E,0x1E,0x3E,0x54,0x61,0x62,0x20,0x20,
- 0x40,0x54,0x31,0x36,0x30,0x4A,0x75,0x6D,0x70,0x20,0x74,0x6F,
- 0x20,0x6E,0x65,0x78,0x74,0x20,0x74,0x72,0x61,0x63,0x6B,0x2E,
- 0x33,0x3E,0x41,0x6C,0x74,0x2B,0x51,0x2E,0x2E,0x49,0x20,0x40,
- 0x54,0x31,0x36,0x30,0x4A,0x75,0x6D,0x70,0x20,0x74,0x6F,0x20,
- 0x74,0x72,0x61,0x63,0x6B,0x20,0x28,0x30,0x2E,0x2E,0x37,0x29,
- 0x20,0x4D,0x4F,0x44,0x20,0x4E,0x2D,0x43,0x68,0x61,0x6E,0x6E,
- 0x65,0x6C,0x73,0x2E,0x34,0x3E,0x41,0x6C,0x74,0x2B,0x41,0x2E,
- 0x2E,0x4B,0x20,0x40,0x54,0x31,0x36,0x30,0x4A,0x75,0x6D,0x70,
- 0x20,0x74,0x6F,0x20,0x74,0x72,0x61,0x63,0x6B,0x20,0x28,0x38,
- 0x2E,0x2E,0x31,0x35,0x29,0x20,0x4D,0x4F,0x44,0x20,0x4E,0x2D,
- 0x43,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x73,0x2E,0x00,0x19,0x40,
- 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x43,0x75,0x74,
- 0x2F,0x43,0x6F,0x70,0x79,0x2F,0x50,0x61,0x73,0x74,0x65,0x3A,
+ 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
+ 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x0A,0x40,0x4C,0x4B,
+ 0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x00,0x0B,0x3E,0x40,0x58,
+ 0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x32,0x4A,0x3E,0x49,0x66,
+ 0x20,0x79,0x6F,0x75,0x20,0x68,0x61,0x76,0x65,0x20,0x61,0x6E,
+ 0x20,0x61,0x6D,0x62,0x69,0x74,0x69,0x6F,0x6E,0x20,0x74,0x6F,
+ 0x20,0x63,0x72,0x65,0x61,0x74,0x65,0x20,0x6D,0x75,0x73,0x69,
+ 0x63,0x20,0x65,0x66,0x66,0x69,0x63,0x69,0x65,0x6E,0x74,0x6C,
+ 0x79,0x20,0x77,0x65,0x20,0x73,0x74,0x72,0x6F,0x6E,0x67,0x6C,
+ 0x79,0x20,0x72,0x65,0x63,0x6F,0x6D,0x6D,0x65,0x6E,0x64,0x44,
+ 0x74,0x68,0x61,0x74,0x20,0x79,0x6F,0x75,0x20,0x6C,0x65,0x61,
+ 0x72,0x6E,0x20,0x41,0x4C,0x4C,0x20,0x74,0x68,0x65,0x20,0x6B,
+ 0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x20,0x66,0x75,0x6E,0x63,
+ 0x74,0x69,0x6F,0x6E,0x73,0x2E,0x20,0x4D,0x61,0x6E,0x79,0x20,
+ 0x6F,0x66,0x20,0x74,0x68,0x65,0x6D,0x20,0x61,0x72,0x65,0x20,
+ 0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x65,0x45,0x66,0x72,0x6F,
+ 0x6D,0x20,0x46,0x61,0x73,0x74,0x74,0x72,0x61,0x63,0x6B,0x65,
+ 0x72,0x20,0x31,0x20,0x61,0x6E,0x64,0x20,0x50,0x72,0x6F,0x54,
+ 0x72,0x61,0x63,0x6B,0x65,0x72,0x20,0x74,0x6F,0x20,0x65,0x6E,
+ 0x73,0x75,0x72,0x65,0x20,0x74,0x68,0x61,0x74,0x20,0x79,0x6F,
+ 0x75,0x20,0x66,0x65,0x65,0x6C,0x20,0x63,0x6F,0x6D,0x66,0x6F,
+ 0x72,0x74,0x61,0x62,0x6C,0x65,0x2E,0x75,0x73,0x69,0x6E,0x67,
+ 0x20,0x74,0x68,0x69,0x73,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,
+ 0x6D,0x20,0x66,0x72,0x6F,0x6D,0x20,0x74,0x68,0x65,0x20,0x76,
+ 0x65,0x72,0x79,0x20,0x66,0x69,0x72,0x73,0x74,0x20,0x6D,0x69,
+ 0x6E,0x75,0x74,0x65,0x2E,0x01,0x3E,0x0B,0x3E,0x40,0x58,0x30,
+ 0x32,0x30,0x40,0x43,0x30,0x30,0x31,0x26,0x3E,0x59,0x6F,0x75,
+ 0x20,0x73,0x68,0x6F,0x75,0x6C,0x64,0x20,0x62,0x65,0x20,0x61,
+ 0x77,0x61,0x72,0x65,0x20,0x6F,0x66,0x20,0x74,0x68,0x65,0x20,
+ 0x66,0x61,0x63,0x74,0x20,0x74,0x68,0x61,0x74,0x3A,0x01,0x3E,
+ 0x48,0x3E,0x40,0x43,0x30,0x30,0x32,0x54,0x68,0x69,0x73,0x20,
+ 0x68,0x65,0x6C,0x70,0x20,0x74,0x65,0x78,0x74,0x20,0x69,0x73,
+ 0x20,0x77,0x72,0x69,0x74,0x74,0x65,0x6E,0x20,0x75,0x73,0x69,
+ 0x6E,0x67,0x20,0x61,0x20,0x53,0x77,0x65,0x64,0x69,0x73,0x68,
+ 0x20,0x6B,0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x2E,0x20,0x54,
+ 0x68,0x65,0x72,0x65,0x66,0x6F,0x72,0x65,0x20,0x73,0x6F,0x6D,
+ 0x65,0x2F,0x72,0x65,0x66,0x65,0x72,0x65,0x6E,0x63,0x65,0x73,
+ 0x20,0x74,0x6F,0x20,0x6E,0x6F,0x6E,0x2D,0x6F,0x72,0x64,0x69,
+ 0x6E,0x61,0x72,0x79,0x20,0x6B,0x65,0x79,0x73,0x20,0x6D,0x69,
+ 0x67,0x68,0x74,0x20,0x62,0x65,0x20,0x77,0x72,0x6F,0x6E,0x67,
+ 0x2E,0x0F,0x53,0x68,0x20,0x3D,0x20,0x73,0x68,0x69,0x66,0x74,
+ 0x20,0x6B,0x65,0x79,0x2E,0x01,0x3E,0x10,0x40,0x58,0x30,0x34,
+ 0x30,0x40,0x43,0x30,0x30,0x31,0x56,0x69,0x64,0x65,0x6F,0x3A,
0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
- 0x34,0x44,0x65,0x6C,0x65,0x74,0x65,0x20,0x20,0x40,0x54,0x31,
- 0x36,0x30,0x44,0x65,0x6C,0x65,0x74,0x65,0x20,0x6E,0x6F,0x74,
- 0x65,0x20,0x6F,0x72,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,
- 0x63,0x6F,0x6C,0x75,0x6D,0x6E,0x20,0x61,0x74,0x20,0x63,0x75,
- 0x72,0x73,0x6F,0x72,0x2E,0x39,0x3E,0x53,0x68,0x2B,0x44,0x65,
- 0x6C,0x65,0x74,0x65,0x20,0x40,0x54,0x31,0x36,0x30,0x44,0x65,
- 0x6C,0x65,0x74,0x65,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x76,
- 0x6F,0x6C,0x75,0x6D,0x65,0x20,0x61,0x6E,0x64,0x20,0x65,0x66,
- 0x66,0x65,0x63,0x74,0x20,0x61,0x74,0x20,0x63,0x75,0x72,0x73,
- 0x6F,0x72,0x2E,0x35,0x3E,0x43,0x74,0x72,0x6C,0x2B,0x44,0x65,
- 0x6C,0x65,0x74,0x65,0x20,0x40,0x54,0x31,0x36,0x30,0x44,0x65,
- 0x6C,0x65,0x74,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,
- 0x61,0x6E,0x64,0x20,0x65,0x66,0x66,0x65,0x63,0x74,0x20,0x61,
- 0x74,0x20,0x63,0x75,0x72,0x73,0x6F,0x72,0x2E,0x29,0x3E,0x41,
- 0x6C,0x74,0x2B,0x44,0x65,0x6C,0x65,0x74,0x65,0x20,0x40,0x54,
- 0x31,0x36,0x30,0x44,0x65,0x6C,0x65,0x74,0x65,0x20,0x65,0x66,
- 0x66,0x65,0x63,0x74,0x20,0x61,0x74,0x20,0x63,0x75,0x72,0x73,
- 0x6F,0x72,0x2E,0x24,0x3E,0x49,0x6E,0x73,0x65,0x72,0x74,0x20,
- 0x20,0x40,0x54,0x31,0x36,0x30,0x49,0x6E,0x73,0x65,0x72,0x74,
- 0x20,0x6E,0x6F,0x74,0x65,0x20,0x61,0x74,0x20,0x63,0x75,0x72,
- 0x73,0x6F,0x72,0x2E,0x27,0x3E,0x53,0x68,0x2B,0x49,0x6E,0x73,
- 0x65,0x72,0x74,0x20,0x20,0x40,0x54,0x31,0x36,0x30,0x49,0x6E,
- 0x73,0x65,0x72,0x74,0x20,0x6C,0x69,0x6E,0x65,0x20,0x61,0x74,
- 0x20,0x63,0x75,0x72,0x73,0x6F,0x72,0x2E,0x25,0x3E,0x42,0x61,
- 0x63,0x6B,0x73,0x70,0x61,0x63,0x65,0x20,0x40,0x54,0x31,0x36,
- 0x30,0x44,0x65,0x6C,0x65,0x74,0x65,0x20,0x70,0x72,0x65,0x76,
- 0x69,0x6F,0x75,0x73,0x20,0x6E,0x6F,0x74,0x65,0x2E,0x28,0x3E,
- 0x53,0x68,0x2B,0x42,0x61,0x63,0x6B,0x73,0x70,0x61,0x63,0x65,
- 0x20,0x40,0x54,0x31,0x36,0x30,0x44,0x65,0x6C,0x65,0x74,0x65,
- 0x20,0x70,0x72,0x65,0x76,0x69,0x6F,0x75,0x73,0x20,0x6C,0x69,
- 0x6E,0x65,0x2E,0x1C,0x3E,0x41,0x6C,0x74,0x2B,0x43,0x75,0x72,
- 0x73,0x6F,0x72,0x20,0x40,0x54,0x31,0x36,0x30,0x4D,0x61,0x72,
- 0x6B,0x20,0x62,0x6C,0x6F,0x63,0x6B,0x2E,0x16,0x3E,0x53,0x68,
- 0x2B,0x46,0x33,0x20,0x40,0x54,0x31,0x36,0x30,0x43,0x75,0x74,
- 0x20,0x74,0x72,0x61,0x63,0x6B,0x2E,0x17,0x3E,0x53,0x68,0x2B,
- 0x46,0x34,0x20,0x40,0x54,0x31,0x36,0x30,0x43,0x6F,0x70,0x79,
- 0x20,0x74,0x72,0x61,0x63,0x6B,0x2E,0x18,0x3E,0x53,0x68,0x2B,
+ 0x25,0x41,0x6C,0x74,0x2B,0x45,0x6E,0x74,0x65,0x72,0x20,0x40,
+ 0x54,0x31,0x36,0x30,0x54,0x6F,0x67,0x67,0x6C,0x65,0x20,0x66,
+ 0x75,0x6C,0x6C,0x73,0x63,0x72,0x65,0x65,0x6E,0x20,0x6D,0x6F,
+ 0x64,0x65,0x01,0x3E,0x2C,0x3E,0x28,0x4F,0x72,0x20,0x22,0x4C,
+ 0x65,0x66,0x74,0x20,0x43,0x74,0x72,0x6C,0x20,0x2B,0x20,0x4C,
+ 0x65,0x66,0x74,0x20,0x43,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x20,
+ 0x2B,0x20,0x46,0x22,0x20,0x6F,0x6E,0x20,0x4D,0x61,0x63,0x73,
+ 0x29,0x00,0x17,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
+ 0x31,0x43,0x75,0x72,0x73,0x6F,0x72,0x20,0x6D,0x6F,0x76,0x65,
+ 0x73,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
+ 0x30,0x32,0x1D,0x46,0x39,0x2E,0x2E,0x46,0x31,0x32,0x20,0x40,
+ 0x54,0x31,0x36,0x30,0x4A,0x75,0x6D,0x70,0x20,0x69,0x6E,0x20,
+ 0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x2E,0x32,0x3E,0x43,0x74,
+ 0x72,0x6C,0x2B,0x46,0x39,0x2E,0x2E,0x46,0x31,0x32,0x20,0x40,
+ 0x54,0x31,0x36,0x30,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x2D,
+ 0x70,0x6C,0x61,0x79,0x20,0x66,0x72,0x6F,0x6D,0x20,0x46,0x39,
+ 0x2E,0x2E,0x46,0x31,0x32,0x20,0x6C,0x69,0x6E,0x65,0x2E,0x2F,
+ 0x3E,0x53,0x68,0x2B,0x46,0x39,0x2E,0x2E,0x46,0x31,0x32,0x20,
+ 0x40,0x54,0x31,0x36,0x30,0x53,0x74,0x6F,0x72,0x65,0x20,0x63,
+ 0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x6C,0x69,0x6E,0x65,0x20,
+ 0x69,0x6E,0x20,0x46,0x39,0x2E,0x2E,0x46,0x31,0x32,0x2E,0x24,
+ 0x3E,0x50,0x61,0x67,0x65,0x55,0x70,0x20,0x20,0x40,0x54,0x31,
+ 0x36,0x30,0x4A,0x75,0x6D,0x70,0x20,0x31,0x36,0x2D,0x6C,0x69,
+ 0x6E,0x65,0x73,0x20,0x75,0x70,0x77,0x61,0x72,0x64,0x73,0x2E,
+ 0x27,0x3E,0x50,0x61,0x67,0x65,0x44,0x6F,0x77,0x6E,0x20,0x40,
+ 0x54,0x31,0x36,0x30,0x4A,0x75,0x6D,0x70,0x20,0x31,0x36,0x2D,
+ 0x6C,0x69,0x6E,0x65,0x73,0x20,0x64,0x6F,0x77,0x6E,0x77,0x61,
+ 0x72,0x64,0x73,0x2E,0x1B,0x3E,0x48,0x6F,0x6D,0x65,0x20,0x20,
+ 0x40,0x54,0x31,0x36,0x30,0x4A,0x75,0x6D,0x70,0x20,0x74,0x6F,
+ 0x20,0x6C,0x69,0x6E,0x65,0x20,0x30,0x2E,0x1D,0x3E,0x45,0x6E,
+ 0x64,0x20,0x20,0x40,0x54,0x31,0x36,0x30,0x4A,0x75,0x6D,0x70,
+ 0x20,0x74,0x6F,0x20,0x6C,0x61,0x73,0x74,0x20,0x6C,0x69,0x6E,
+ 0x65,0x2E,0x1E,0x3E,0x54,0x61,0x62,0x20,0x20,0x40,0x54,0x31,
+ 0x36,0x30,0x4A,0x75,0x6D,0x70,0x20,0x74,0x6F,0x20,0x6E,0x65,
+ 0x78,0x74,0x20,0x74,0x72,0x61,0x63,0x6B,0x2E,0x33,0x3E,0x41,
+ 0x6C,0x74,0x2B,0x51,0x2E,0x2E,0x49,0x20,0x40,0x54,0x31,0x36,
+ 0x30,0x4A,0x75,0x6D,0x70,0x20,0x74,0x6F,0x20,0x74,0x72,0x61,
+ 0x63,0x6B,0x20,0x28,0x30,0x2E,0x2E,0x37,0x29,0x20,0x4D,0x4F,
+ 0x44,0x20,0x4E,0x2D,0x43,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x73,
+ 0x2E,0x34,0x3E,0x41,0x6C,0x74,0x2B,0x41,0x2E,0x2E,0x4B,0x20,
+ 0x40,0x54,0x31,0x36,0x30,0x4A,0x75,0x6D,0x70,0x20,0x74,0x6F,
+ 0x20,0x74,0x72,0x61,0x63,0x6B,0x20,0x28,0x38,0x2E,0x2E,0x31,
+ 0x35,0x29,0x20,0x4D,0x4F,0x44,0x20,0x4E,0x2D,0x43,0x68,0x61,
+ 0x6E,0x6E,0x65,0x6C,0x73,0x2E,0x00,0x19,0x40,0x58,0x30,0x34,
+ 0x30,0x40,0x43,0x30,0x30,0x31,0x43,0x75,0x74,0x2F,0x43,0x6F,
+ 0x70,0x79,0x2F,0x50,0x61,0x73,0x74,0x65,0x3A,0x0B,0x3E,0x40,
+ 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x34,0x44,0x65,
+ 0x6C,0x65,0x74,0x65,0x20,0x20,0x40,0x54,0x31,0x36,0x30,0x44,
+ 0x65,0x6C,0x65,0x74,0x65,0x20,0x6E,0x6F,0x74,0x65,0x20,0x6F,
+ 0x72,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x63,0x6F,0x6C,
+ 0x75,0x6D,0x6E,0x20,0x61,0x74,0x20,0x63,0x75,0x72,0x73,0x6F,
+ 0x72,0x2E,0x39,0x3E,0x53,0x68,0x2B,0x44,0x65,0x6C,0x65,0x74,
+ 0x65,0x20,0x40,0x54,0x31,0x36,0x30,0x44,0x65,0x6C,0x65,0x74,
+ 0x65,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x76,0x6F,0x6C,0x75,
+ 0x6D,0x65,0x20,0x61,0x6E,0x64,0x20,0x65,0x66,0x66,0x65,0x63,
+ 0x74,0x20,0x61,0x74,0x20,0x63,0x75,0x72,0x73,0x6F,0x72,0x2E,
+ 0x35,0x3E,0x43,0x74,0x72,0x6C,0x2B,0x44,0x65,0x6C,0x65,0x74,
+ 0x65,0x20,0x40,0x54,0x31,0x36,0x30,0x44,0x65,0x6C,0x65,0x74,
+ 0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x61,0x6E,0x64,
+ 0x20,0x65,0x66,0x66,0x65,0x63,0x74,0x20,0x61,0x74,0x20,0x63,
+ 0x75,0x72,0x73,0x6F,0x72,0x2E,0x29,0x3E,0x41,0x6C,0x74,0x2B,
+ 0x44,0x65,0x6C,0x65,0x74,0x65,0x20,0x40,0x54,0x31,0x36,0x30,
+ 0x44,0x65,0x6C,0x65,0x74,0x65,0x20,0x65,0x66,0x66,0x65,0x63,
+ 0x74,0x20,0x61,0x74,0x20,0x63,0x75,0x72,0x73,0x6F,0x72,0x2E,
+ 0x24,0x3E,0x49,0x6E,0x73,0x65,0x72,0x74,0x20,0x20,0x40,0x54,
+ 0x31,0x36,0x30,0x49,0x6E,0x73,0x65,0x72,0x74,0x20,0x6E,0x6F,
+ 0x74,0x65,0x20,0x61,0x74,0x20,0x63,0x75,0x72,0x73,0x6F,0x72,
+ 0x2E,0x27,0x3E,0x53,0x68,0x2B,0x49,0x6E,0x73,0x65,0x72,0x74,
+ 0x20,0x20,0x40,0x54,0x31,0x36,0x30,0x49,0x6E,0x73,0x65,0x72,
+ 0x74,0x20,0x6C,0x69,0x6E,0x65,0x20,0x61,0x74,0x20,0x63,0x75,
+ 0x72,0x73,0x6F,0x72,0x2E,0x25,0x3E,0x42,0x61,0x63,0x6B,0x73,
+ 0x70,0x61,0x63,0x65,0x20,0x40,0x54,0x31,0x36,0x30,0x44,0x65,
+ 0x6C,0x65,0x74,0x65,0x20,0x70,0x72,0x65,0x76,0x69,0x6F,0x75,
+ 0x73,0x20,0x6E,0x6F,0x74,0x65,0x2E,0x28,0x3E,0x53,0x68,0x2B,
+ 0x42,0x61,0x63,0x6B,0x73,0x70,0x61,0x63,0x65,0x20,0x40,0x54,
+ 0x31,0x36,0x30,0x44,0x65,0x6C,0x65,0x74,0x65,0x20,0x70,0x72,
+ 0x65,0x76,0x69,0x6F,0x75,0x73,0x20,0x6C,0x69,0x6E,0x65,0x2E,
+ 0x1C,0x3E,0x41,0x6C,0x74,0x2B,0x43,0x75,0x72,0x73,0x6F,0x72,
+ 0x20,0x40,0x54,0x31,0x36,0x30,0x4D,0x61,0x72,0x6B,0x20,0x62,
+ 0x6C,0x6F,0x63,0x6B,0x2E,0x16,0x3E,0x53,0x68,0x2B,0x46,0x33,
+ 0x20,0x40,0x54,0x31,0x36,0x30,0x43,0x75,0x74,0x20,0x74,0x72,
+ 0x61,0x63,0x6B,0x2E,0x17,0x3E,0x53,0x68,0x2B,0x46,0x34,0x20,
+ 0x40,0x54,0x31,0x36,0x30,0x43,0x6F,0x70,0x79,0x20,0x74,0x72,
+ 0x61,0x63,0x6B,0x2E,0x18,0x3E,0x53,0x68,0x2B,0x46,0x35,0x20,
+ 0x40,0x54,0x31,0x36,0x30,0x50,0x61,0x73,0x74,0x65,0x20,0x74,
+ 0x72,0x61,0x63,0x6B,0x2E,0x1A,0x3E,0x43,0x74,0x72,0x6C,0x2B,
+ 0x46,0x33,0x20,0x40,0x54,0x31,0x36,0x30,0x43,0x75,0x74,0x20,
+ 0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x2E,0x1B,0x3E,0x43,0x74,
+ 0x72,0x6C,0x2B,0x46,0x34,0x20,0x40,0x54,0x31,0x36,0x30,0x43,
+ 0x6F,0x70,0x79,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x2E,
+ 0x1C,0x3E,0x43,0x74,0x72,0x6C,0x2B,0x46,0x35,0x20,0x40,0x54,
+ 0x31,0x36,0x30,0x50,0x61,0x73,0x74,0x65,0x20,0x70,0x61,0x74,
+ 0x74,0x65,0x72,0x6E,0x2E,0x17,0x3E,0x41,0x6C,0x74,0x2B,0x46,
+ 0x33,0x20,0x40,0x54,0x31,0x36,0x30,0x43,0x75,0x74,0x20,0x62,
+ 0x6C,0x6F,0x63,0x6B,0x2E,0x18,0x3E,0x41,0x6C,0x74,0x2B,0x46,
+ 0x34,0x20,0x40,0x54,0x31,0x36,0x30,0x43,0x6F,0x70,0x79,0x20,
+ 0x62,0x6C,0x6F,0x63,0x6B,0x2E,0x19,0x3E,0x41,0x6C,0x74,0x2B,
0x46,0x35,0x20,0x40,0x54,0x31,0x36,0x30,0x50,0x61,0x73,0x74,
- 0x65,0x20,0x74,0x72,0x61,0x63,0x6B,0x2E,0x1A,0x3E,0x43,0x74,
- 0x72,0x6C,0x2B,0x46,0x33,0x20,0x40,0x54,0x31,0x36,0x30,0x43,
- 0x75,0x74,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x2E,0x1B,
- 0x3E,0x43,0x74,0x72,0x6C,0x2B,0x46,0x34,0x20,0x40,0x54,0x31,
- 0x36,0x30,0x43,0x6F,0x70,0x79,0x20,0x70,0x61,0x74,0x74,0x65,
- 0x72,0x6E,0x2E,0x1C,0x3E,0x43,0x74,0x72,0x6C,0x2B,0x46,0x35,
- 0x20,0x40,0x54,0x31,0x36,0x30,0x50,0x61,0x73,0x74,0x65,0x20,
- 0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x2E,0x17,0x3E,0x41,0x6C,
- 0x74,0x2B,0x46,0x33,0x20,0x40,0x54,0x31,0x36,0x30,0x43,0x75,
- 0x74,0x20,0x62,0x6C,0x6F,0x63,0x6B,0x2E,0x18,0x3E,0x41,0x6C,
- 0x74,0x2B,0x46,0x34,0x20,0x40,0x54,0x31,0x36,0x30,0x43,0x6F,
- 0x70,0x79,0x20,0x62,0x6C,0x6F,0x63,0x6B,0x2E,0x19,0x3E,0x41,
- 0x6C,0x74,0x2B,0x46,0x35,0x20,0x40,0x54,0x31,0x36,0x30,0x50,
- 0x61,0x73,0x74,0x65,0x20,0x62,0x6C,0x6F,0x63,0x6B,0x2E,0x20,
- 0x3E,0x41,0x6C,0x74,0x2B,0x43,0x20,0x20,0x40,0x54,0x31,0x36,
- 0x30,0x4D,0x61,0x72,0x6B,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,
- 0x74,0x20,0x74,0x72,0x61,0x63,0x6B,0x2E,0x00,0x18,0x40,0x58,
- 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x4D,0x69,0x73,0x63,
- 0x65,0x6C,0x6C,0x61,0x6E,0x65,0x6F,0x75,0x73,0x3A,0x0B,0x3E,
- 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x1C,0x52,
- 0x69,0x67,0x68,0x74,0x20,0x63,0x74,0x72,0x6C,0x2E,0x20,0x20,
- 0x40,0x54,0x31,0x36,0x30,0x50,0x6C,0x61,0x79,0x20,0x73,0x6F,
- 0x6E,0x67,0x2E,0x1D,0x3E,0x41,0x6C,0x74,0x20,0x47,0x72,0x20,
- 0x20,0x20,0x20,0x40,0x54,0x31,0x36,0x30,0x50,0x6C,0x61,0x79,
- 0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x2E,0x22,0x3E,0x52,
- 0x69,0x67,0x68,0x74,0x20,0x73,0x68,0x69,0x66,0x74,0x20,0x20,
- 0x40,0x54,0x31,0x36,0x30,0x52,0x65,0x63,0x6F,0x72,0x64,0x20,
- 0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x2E,0x19,0x3E,0x53,0x70,
- 0x61,0x63,0x65,0x20,0x20,0x20,0x20,0x40,0x54,0x31,0x36,0x30,
- 0x53,0x74,0x6F,0x70,0x2F,0x45,0x64,0x69,0x74,0x2E,0x1B,0x3E,
- 0x46,0x31,0x2E,0x2E,0x46,0x37,0x20,0x40,0x54,0x31,0x36,0x30,
- 0x53,0x65,0x6C,0x65,0x63,0x74,0x20,0x6F,0x63,0x74,0x61,0x76,
- 0x65,0x2E,0x27,0x3E,0x4B,0x65,0x79,0x20,0x62,0x65,0x6C,0x6F,
- 0x77,0x20,0x45,0x73,0x63,0x20,0x40,0x54,0x31,0x36,0x30,0x49,
- 0x6E,0x63,0x72,0x65,0x61,0x73,0x65,0x20,0x63,0x75,0x72,0x73,
- 0x6F,0x72,0x61,0x64,0x64,0x2E,0x22,0x3E,0x53,0x68,0x2B,0x28,
- 0x31,0x2F,0x32,0x29,0x20,0x40,0x54,0x31,0x36,0x30,0x44,0x65,
- 0x63,0x72,0x65,0x61,0x73,0x65,0x20,0x63,0x75,0x72,0x73,0x6F,
- 0x72,0x61,0x64,0x64,0x2E,0x29,0x3E,0x43,0x61,0x70,0x73,0x4C,
- 0x6F,0x63,0x6B,0x20,0x6F,0x72,0x20,0x3C,0x3E,0x20,0x40,0x54,
- 0x31,0x36,0x30,0x45,0x6E,0x74,0x65,0x72,0x20,0x4B,0x65,0x79,
- 0x6F,0x66,0x66,0x2D,0x22,0x6E,0x6F,0x74,0x65,0x22,0x2E,0x25,
- 0x3E,0x53,0x68,0x2B,0x4C,0x65,0x66,0x74,0x20,0x40,0x54,0x31,
- 0x36,0x30,0x49,0x6E,0x63,0x72,0x65,0x61,0x73,0x65,0x20,0x73,
+ 0x65,0x20,0x62,0x6C,0x6F,0x63,0x6B,0x2E,0x20,0x3E,0x41,0x6C,
+ 0x74,0x2B,0x43,0x20,0x20,0x40,0x54,0x31,0x36,0x30,0x4D,0x61,
+ 0x72,0x6B,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x74,
+ 0x72,0x61,0x63,0x6B,0x2E,0x00,0x18,0x40,0x58,0x30,0x34,0x30,
+ 0x40,0x43,0x30,0x30,0x31,0x4D,0x69,0x73,0x63,0x65,0x6C,0x6C,
+ 0x61,0x6E,0x65,0x6F,0x75,0x73,0x3A,0x0B,0x3E,0x40,0x58,0x30,
+ 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x1C,0x52,0x69,0x67,0x68,
+ 0x74,0x20,0x63,0x74,0x72,0x6C,0x2E,0x20,0x20,0x40,0x54,0x31,
+ 0x36,0x30,0x50,0x6C,0x61,0x79,0x20,0x73,0x6F,0x6E,0x67,0x2E,
+ 0x1D,0x3E,0x41,0x6C,0x74,0x20,0x47,0x72,0x20,0x20,0x20,0x20,
+ 0x40,0x54,0x31,0x36,0x30,0x50,0x6C,0x61,0x79,0x20,0x70,0x61,
+ 0x74,0x74,0x65,0x72,0x6E,0x2E,0x22,0x3E,0x52,0x69,0x67,0x68,
+ 0x74,0x20,0x73,0x68,0x69,0x66,0x74,0x20,0x20,0x40,0x54,0x31,
+ 0x36,0x30,0x52,0x65,0x63,0x6F,0x72,0x64,0x20,0x70,0x61,0x74,
+ 0x74,0x65,0x72,0x6E,0x2E,0x19,0x3E,0x53,0x70,0x61,0x63,0x65,
+ 0x20,0x20,0x20,0x20,0x40,0x54,0x31,0x36,0x30,0x53,0x74,0x6F,
+ 0x70,0x2F,0x45,0x64,0x69,0x74,0x2E,0x1B,0x3E,0x46,0x31,0x2E,
+ 0x2E,0x46,0x37,0x20,0x40,0x54,0x31,0x36,0x30,0x53,0x65,0x6C,
+ 0x65,0x63,0x74,0x20,0x6F,0x63,0x74,0x61,0x76,0x65,0x2E,0x27,
+ 0x3E,0x4B,0x65,0x79,0x20,0x62,0x65,0x6C,0x6F,0x77,0x20,0x45,
+ 0x73,0x63,0x20,0x40,0x54,0x31,0x36,0x30,0x49,0x6E,0x63,0x72,
+ 0x65,0x61,0x73,0x65,0x20,0x63,0x75,0x72,0x73,0x6F,0x72,0x61,
+ 0x64,0x64,0x2E,0x22,0x3E,0x53,0x68,0x2B,0x28,0x31,0x2F,0x32,
+ 0x29,0x20,0x40,0x54,0x31,0x36,0x30,0x44,0x65,0x63,0x72,0x65,
+ 0x61,0x73,0x65,0x20,0x63,0x75,0x72,0x73,0x6F,0x72,0x61,0x64,
+ 0x64,0x2E,0x29,0x3E,0x43,0x61,0x70,0x73,0x4C,0x6F,0x63,0x6B,
+ 0x20,0x6F,0x72,0x20,0x3C,0x3E,0x20,0x40,0x54,0x31,0x36,0x30,
+ 0x45,0x6E,0x74,0x65,0x72,0x20,0x4B,0x65,0x79,0x6F,0x66,0x66,
+ 0x2D,0x22,0x6E,0x6F,0x74,0x65,0x22,0x2E,0x25,0x3E,0x53,0x68,
+ 0x2B,0x4C,0x65,0x66,0x74,0x20,0x40,0x54,0x31,0x36,0x30,0x49,
+ 0x6E,0x63,0x72,0x65,0x61,0x73,0x65,0x20,0x73,0x6F,0x6E,0x67,
+ 0x20,0x70,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x2E,0x26,0x3E,
+ 0x53,0x68,0x2B,0x52,0x69,0x67,0x68,0x74,0x20,0x40,0x54,0x31,
+ 0x36,0x30,0x44,0x65,0x63,0x72,0x65,0x61,0x73,0x65,0x20,0x73,
0x6F,0x6E,0x67,0x20,0x70,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,
- 0x2E,0x26,0x3E,0x53,0x68,0x2B,0x52,0x69,0x67,0x68,0x74,0x20,
- 0x40,0x54,0x31,0x36,0x30,0x44,0x65,0x63,0x72,0x65,0x61,0x73,
- 0x65,0x20,0x73,0x6F,0x6E,0x67,0x20,0x70,0x6F,0x73,0x69,0x74,
- 0x69,0x6F,0x6E,0x2E,0x28,0x3E,0x43,0x74,0x72,0x6C,0x2B,0x4C,
- 0x65,0x66,0x74,0x20,0x40,0x54,0x31,0x36,0x30,0x49,0x6E,0x63,
- 0x72,0x65,0x61,0x73,0x65,0x20,0x70,0x61,0x74,0x74,0x65,0x72,
- 0x6E,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x2E,0x29,0x3E,0x43,
- 0x74,0x72,0x6C,0x2B,0x52,0x69,0x67,0x68,0x74,0x20,0x40,0x54,
- 0x31,0x36,0x30,0x44,0x65,0x63,0x72,0x65,0x61,0x73,0x65,0x20,
- 0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x6E,0x75,0x6D,0x62,
- 0x65,0x72,0x2E,0x00,0x2C,0x40,0x58,0x30,0x34,0x30,0x40,0x43,
- 0x30,0x30,0x31,0x4D,0x69,0x73,0x63,0x65,0x6C,0x6C,0x61,0x6E,
- 0x65,0x6F,0x75,0x73,0x20,0x28,0x6F,0x6E,0x20,0x61,0x20,0x4D,
- 0x61,0x63,0x20,0x6B,0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x29,
- 0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,
- 0x32,0x1E,0x52,0x69,0x67,0x68,0x74,0x20,0x63,0x6F,0x6D,0x6D,
- 0x61,0x6E,0x64,0x20,0x20,0x40,0x54,0x32,0x34,0x30,0x50,0x6C,
- 0x61,0x79,0x20,0x73,0x6F,0x6E,0x67,0x2E,0x32,0x3E,0x52,0x69,
- 0x67,0x68,0x74,0x20,0x61,0x6C,0x74,0x20,0x28,0x6F,0x72,0x20,
- 0x6C,0x65,0x66,0x74,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,
- 0x29,0x20,0x20,0x20,0x20,0x40,0x54,0x32,0x34,0x30,0x50,0x6C,
- 0x61,0x79,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x2E,0x22,
- 0x3E,0x52,0x69,0x67,0x68,0x74,0x20,0x73,0x68,0x69,0x66,0x74,
- 0x20,0x20,0x40,0x54,0x32,0x34,0x30,0x52,0x65,0x63,0x6F,0x72,
- 0x64,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x2E,0x00,0x1B,
- 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x57,0x69,
- 0x6E,0x64,0x6F,0x77,0x20,0x73,0x77,0x69,0x74,0x63,0x68,0x69,
- 0x6E,0x67,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
- 0x30,0x30,0x32,0x05,0x43,0x74,0x72,0x6C,0x2B,0x16,0x3E,0x41,
- 0x20,0x40,0x54,0x31,0x36,0x30,0x41,0x64,0x76,0x61,0x6E,0x63,
- 0x65,0x64,0x20,0x65,0x64,0x69,0x74,0x2E,0x0E,0x3E,0x42,0x20,
- 0x40,0x54,0x31,0x36,0x30,0x41,0x62,0x6F,0x75,0x74,0x2E,0x16,
- 0x3E,0x43,0x20,0x40,0x54,0x31,0x36,0x30,0x43,0x6F,0x6E,0x66,
- 0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x2E,0x18,0x3E,
- 0x44,0x20,0x40,0x54,0x31,0x36,0x30,0x44,0x69,0x73,0x6B,0x20,
- 0x6F,0x70,0x65,0x72,0x61,0x74,0x69,0x6F,0x6E,0x73,0x2E,0x20,
- 0x3E,0x45,0x20,0x40,0x54,0x31,0x36,0x30,0x53,0x61,0x6D,0x70,
- 0x6C,0x65,0x20,0x65,0x64,0x69,0x74,0x6F,0x72,0x20,0x65,0x78,
- 0x74,0x65,0x6E,0x73,0x69,0x6F,0x6E,0x2E,0x0D,0x3E,0x48,0x20,
- 0x40,0x54,0x31,0x36,0x30,0x48,0x65,0x6C,0x70,0x2E,0x1A,0x3E,
- 0x49,0x20,0x40,0x54,0x31,0x36,0x30,0x49,0x6E,0x73,0x74,0x72,
+ 0x2E,0x28,0x3E,0x43,0x74,0x72,0x6C,0x2B,0x4C,0x65,0x66,0x74,
+ 0x20,0x40,0x54,0x31,0x36,0x30,0x49,0x6E,0x63,0x72,0x65,0x61,
+ 0x73,0x65,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x6E,
+ 0x75,0x6D,0x62,0x65,0x72,0x2E,0x29,0x3E,0x43,0x74,0x72,0x6C,
+ 0x2B,0x52,0x69,0x67,0x68,0x74,0x20,0x40,0x54,0x31,0x36,0x30,
+ 0x44,0x65,0x63,0x72,0x65,0x61,0x73,0x65,0x20,0x70,0x61,0x74,
+ 0x74,0x65,0x72,0x6E,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x2E,
+ 0x00,0x2C,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
+ 0x4D,0x69,0x73,0x63,0x65,0x6C,0x6C,0x61,0x6E,0x65,0x6F,0x75,
+ 0x73,0x20,0x28,0x6F,0x6E,0x20,0x61,0x20,0x4D,0x61,0x63,0x20,
+ 0x6B,0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x29,0x3A,0x0B,0x3E,
+ 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x1E,0x52,
+ 0x69,0x67,0x68,0x74,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,
+ 0x20,0x20,0x40,0x54,0x32,0x34,0x30,0x50,0x6C,0x61,0x79,0x20,
+ 0x73,0x6F,0x6E,0x67,0x2E,0x32,0x3E,0x52,0x69,0x67,0x68,0x74,
+ 0x20,0x61,0x6C,0x74,0x20,0x28,0x6F,0x72,0x20,0x6C,0x65,0x66,
+ 0x74,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x29,0x20,0x20,
+ 0x20,0x20,0x40,0x54,0x32,0x34,0x30,0x50,0x6C,0x61,0x79,0x20,
+ 0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x2E,0x22,0x3E,0x52,0x69,
+ 0x67,0x68,0x74,0x20,0x73,0x68,0x69,0x66,0x74,0x20,0x20,0x40,
+ 0x54,0x32,0x34,0x30,0x52,0x65,0x63,0x6F,0x72,0x64,0x20,0x70,
+ 0x61,0x74,0x74,0x65,0x72,0x6E,0x2E,0x00,0x1B,0x40,0x58,0x30,
+ 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x57,0x69,0x6E,0x64,0x6F,
+ 0x77,0x20,0x73,0x77,0x69,0x74,0x63,0x68,0x69,0x6E,0x67,0x3A,
+ 0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
+ 0x05,0x43,0x74,0x72,0x6C,0x2B,0x16,0x3E,0x41,0x20,0x40,0x54,
+ 0x31,0x36,0x30,0x41,0x64,0x76,0x61,0x6E,0x63,0x65,0x64,0x20,
+ 0x65,0x64,0x69,0x74,0x2E,0x0E,0x3E,0x42,0x20,0x40,0x54,0x31,
+ 0x36,0x30,0x41,0x62,0x6F,0x75,0x74,0x2E,0x16,0x3E,0x43,0x20,
+ 0x40,0x54,0x31,0x36,0x30,0x43,0x6F,0x6E,0x66,0x69,0x67,0x75,
+ 0x72,0x61,0x74,0x69,0x6F,0x6E,0x2E,0x18,0x3E,0x44,0x20,0x40,
+ 0x54,0x31,0x36,0x30,0x44,0x69,0x73,0x6B,0x20,0x6F,0x70,0x65,
+ 0x72,0x61,0x74,0x69,0x6F,0x6E,0x73,0x2E,0x20,0x3E,0x45,0x20,
+ 0x40,0x54,0x31,0x36,0x30,0x53,0x61,0x6D,0x70,0x6C,0x65,0x20,
+ 0x65,0x64,0x69,0x74,0x6F,0x72,0x20,0x65,0x78,0x74,0x65,0x6E,
+ 0x73,0x69,0x6F,0x6E,0x2E,0x0D,0x3E,0x48,0x20,0x40,0x54,0x31,
+ 0x36,0x30,0x48,0x65,0x6C,0x70,0x2E,0x1A,0x3E,0x49,0x20,0x40,
+ 0x54,0x31,0x36,0x30,0x49,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,
+ 0x6E,0x74,0x20,0x65,0x64,0x69,0x74,0x6F,0x72,0x2E,0x2B,0x3E,
+ 0x4D,0x20,0x40,0x54,0x31,0x36,0x30,0x49,0x6E,0x73,0x74,0x72,
0x75,0x6D,0x65,0x6E,0x74,0x20,0x65,0x64,0x69,0x74,0x6F,0x72,
- 0x2E,0x2B,0x3E,0x4D,0x20,0x40,0x54,0x31,0x36,0x30,0x49,0x6E,
- 0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x65,0x64,0x69,
- 0x74,0x6F,0x72,0x20,0x65,0x78,0x74,0x65,0x6E,0x73,0x69,0x6F,
- 0x6E,0x2E,0x20,0x28,0x4D,0x49,0x44,0x49,0x29,0x10,0x3E,0x4E,
- 0x20,0x40,0x54,0x31,0x36,0x30,0x4E,0x69,0x62,0x62,0x6C,0x65,
- 0x73,0x2E,0x10,0x3E,0x50,0x20,0x40,0x54,0x31,0x36,0x30,0x50,
- 0x61,0x74,0x74,0x65,0x72,0x6E,0x2E,0x0D,0x3E,0x52,0x20,0x40,
- 0x54,0x31,0x36,0x30,0x54,0x72,0x69,0x6D,0x2E,0x16,0x3E,0x53,
- 0x20,0x40,0x54,0x31,0x36,0x30,0x53,0x61,0x6D,0x70,0x6C,0x65,
- 0x20,0x65,0x64,0x69,0x74,0x6F,0x72,0x2E,0x12,0x3E,0x54,0x20,
- 0x40,0x54,0x31,0x36,0x30,0x54,0x72,0x61,0x6E,0x73,0x70,0x6F,
- 0x73,0x65,0x2E,0x23,0x3E,0x58,0x20,0x40,0x54,0x31,0x36,0x30,
- 0x4D,0x61,0x69,0x6E,0x20,0x73,0x63,0x72,0x65,0x65,0x6E,0x2E,
- 0x20,0x28,0x61,0x6C,0x6D,0x6F,0x73,0x74,0x20,0x61,0x6C,0x74,
- 0x2B,0x58,0x29,0x27,0x3E,0x5A,0x20,0x40,0x54,0x31,0x36,0x30,
- 0x46,0x75,0x6C,0x6C,0x20,0x73,0x63,0x72,0x65,0x65,0x6E,0x20,
- 0x65,0x64,0x69,0x74,0x2E,0x20,0x28,0x5A,0x20,0x66,0x6F,0x72,
- 0x20,0x73,0x69,0x5A,0x65,0x3F,0x29,0x19,0x3E,0x31,0x20,0x40,
- 0x54,0x31,0x36,0x30,0x43,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,
- 0x61,0x74,0x69,0x6F,0x6E,0x20,0x23,0x31,0x2E,0x19,0x3E,0x32,
- 0x20,0x40,0x54,0x31,0x36,0x30,0x43,0x6F,0x6E,0x66,0x69,0x67,
- 0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x23,0x32,0x2E,0x19,
- 0x3E,0x33,0x20,0x40,0x54,0x31,0x36,0x30,0x43,0x6F,0x6E,0x66,
- 0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x23,0x33,
- 0x2E,0x19,0x3E,0x34,0x20,0x40,0x54,0x31,0x36,0x30,0x43,0x6F,
- 0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,
- 0x23,0x34,0x2E,0x00,0x2D,0x40,0x58,0x30,0x34,0x30,0x40,0x43,
- 0x30,0x30,0x31,0x49,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,
- 0x74,0x20,0x73,0x65,0x6C,0x65,0x63,0x74,0x20,0x28,0x4E,0x75,
- 0x6D,0x65,0x72,0x69,0x63,0x20,0x6B,0x65,0x79,0x70,0x61,0x64,
- 0x29,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
- 0x30,0x32,0x28,0x54,0x6F,0x70,0x20,0x34,0x20,0x6B,0x65,0x79,
- 0x73,0x20,0x40,0x54,0x31,0x36,0x30,0x53,0x65,0x6C,0x65,0x63,
- 0x74,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,
- 0x20,0x62,0x6C,0x6F,0x63,0x6B,0x2E,0x32,0x3E,0x27,0x2B,0x27,
- 0x20,0x2B,0x54,0x6F,0x70,0x20,0x34,0x20,0x6B,0x65,0x79,0x73,
- 0x20,0x40,0x54,0x31,0x36,0x30,0x53,0x65,0x6C,0x65,0x63,0x74,
- 0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,
- 0x62,0x6C,0x6F,0x63,0x6B,0x20,0x2B,0x20,0x34,0x2E,0x23,0x3E,
- 0x45,0x6E,0x74,0x65,0x72,0x20,0x40,0x54,0x31,0x36,0x30,0x53,
- 0x65,0x6C,0x65,0x63,0x74,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,
- 0x6D,0x65,0x6E,0x74,0x20,0x62,0x61,0x6E,0x6B,0x2E,0x1D,0x3E,
- 0x30,0x20,0x40,0x54,0x31,0x36,0x30,0x53,0x65,0x6C,0x65,0x63,
- 0x74,0x20,0x6E,0x6F,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,
- 0x65,0x6E,0x74,0x2E,0x26,0x3E,0x31,0x2E,0x2E,0x38,0x20,0x40,
+ 0x20,0x65,0x78,0x74,0x65,0x6E,0x73,0x69,0x6F,0x6E,0x2E,0x20,
+ 0x28,0x4D,0x49,0x44,0x49,0x29,0x10,0x3E,0x4E,0x20,0x40,0x54,
+ 0x31,0x36,0x30,0x4E,0x69,0x62,0x62,0x6C,0x65,0x73,0x2E,0x10,
+ 0x3E,0x50,0x20,0x40,0x54,0x31,0x36,0x30,0x50,0x61,0x74,0x74,
+ 0x65,0x72,0x6E,0x2E,0x0D,0x3E,0x52,0x20,0x40,0x54,0x31,0x36,
+ 0x30,0x54,0x72,0x69,0x6D,0x2E,0x16,0x3E,0x53,0x20,0x40,0x54,
+ 0x31,0x36,0x30,0x53,0x61,0x6D,0x70,0x6C,0x65,0x20,0x65,0x64,
+ 0x69,0x74,0x6F,0x72,0x2E,0x12,0x3E,0x54,0x20,0x40,0x54,0x31,
+ 0x36,0x30,0x54,0x72,0x61,0x6E,0x73,0x70,0x6F,0x73,0x65,0x2E,
+ 0x23,0x3E,0x58,0x20,0x40,0x54,0x31,0x36,0x30,0x4D,0x61,0x69,
+ 0x6E,0x20,0x73,0x63,0x72,0x65,0x65,0x6E,0x2E,0x20,0x28,0x61,
+ 0x6C,0x6D,0x6F,0x73,0x74,0x20,0x61,0x6C,0x74,0x2B,0x58,0x29,
+ 0x27,0x3E,0x5A,0x20,0x40,0x54,0x31,0x36,0x30,0x46,0x75,0x6C,
+ 0x6C,0x20,0x73,0x63,0x72,0x65,0x65,0x6E,0x20,0x65,0x64,0x69,
+ 0x74,0x2E,0x20,0x28,0x5A,0x20,0x66,0x6F,0x72,0x20,0x73,0x69,
+ 0x5A,0x65,0x3F,0x29,0x19,0x3E,0x31,0x20,0x40,0x54,0x31,0x36,
+ 0x30,0x43,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,
+ 0x6F,0x6E,0x20,0x23,0x31,0x2E,0x19,0x3E,0x32,0x20,0x40,0x54,
+ 0x31,0x36,0x30,0x43,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,
+ 0x74,0x69,0x6F,0x6E,0x20,0x23,0x32,0x2E,0x19,0x3E,0x33,0x20,
+ 0x40,0x54,0x31,0x36,0x30,0x43,0x6F,0x6E,0x66,0x69,0x67,0x75,
+ 0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x23,0x33,0x2E,0x19,0x3E,
+ 0x34,0x20,0x40,0x54,0x31,0x36,0x30,0x43,0x6F,0x6E,0x66,0x69,
+ 0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x23,0x34,0x2E,
+ 0x00,0x2D,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
+ 0x49,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x73,
+ 0x65,0x6C,0x65,0x63,0x74,0x20,0x28,0x4E,0x75,0x6D,0x65,0x72,
+ 0x69,0x63,0x20,0x6B,0x65,0x79,0x70,0x61,0x64,0x29,0x3A,0x0B,
+ 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x28,
+ 0x54,0x6F,0x70,0x20,0x34,0x20,0x6B,0x65,0x79,0x73,0x20,0x40,
0x54,0x31,0x36,0x30,0x53,0x65,0x6C,0x65,0x63,0x74,0x20,0x69,
- 0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x69,0x6E,
- 0x20,0x62,0x6C,0x6F,0x63,0x6B,0x2E,0x19,0x3E,0x2C,0x20,0x40,
- 0x54,0x31,0x36,0x30,0x43,0x6C,0x65,0x61,0x72,0x20,0x69,0x6E,
- 0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x2E,0x18,0x3E,0x53,
- 0x68,0x2B,0x2C,0x20,0x40,0x54,0x31,0x36,0x30,0x43,0x6C,0x65,
- 0x61,0x72,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x2E,0x27,0x3E,
- 0x53,0x68,0x2B,0x55,0x70,0x20,0x40,0x54,0x31,0x36,0x30,0x53,
- 0x65,0x6C,0x65,0x63,0x74,0x20,0x70,0x72,0x65,0x76,0x69,0x6F,
- 0x75,0x73,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,
- 0x74,0x2E,0x25,0x3E,0x53,0x68,0x2B,0x44,0x6F,0x77,0x6E,0x20,
- 0x40,0x54,0x31,0x36,0x30,0x53,0x65,0x6C,0x65,0x63,0x74,0x20,
- 0x6E,0x65,0x78,0x74,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,
- 0x65,0x6E,0x74,0x2E,0x00,0x1F,0x40,0x58,0x30,0x34,0x30,0x40,
- 0x43,0x30,0x30,0x31,0x43,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x2F,
- 0x56,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x6D,0x61,0x63,0x72,0x6F,
- 0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,
- 0x32,0x2D,0x41,0x6C,0x74,0x2B,0x31,0x2E,0x2E,0x30,0x20,0x40,
- 0x54,0x31,0x36,0x30,0x57,0x72,0x69,0x74,0x65,0x20,0x63,0x6F,
- 0x6D,0x6D,0x61,0x6E,0x64,0x2F,0x76,0x6F,0x6C,0x75,0x6D,0x65,
- 0x20,0x61,0x74,0x20,0x63,0x75,0x72,0x73,0x6F,0x72,0x2E,0x30,
- 0x3E,0x53,0x68,0x2B,0x41,0x6C,0x74,0x2B,0x31,0x2E,0x2E,0x30,
- 0x20,0x40,0x54,0x31,0x36,0x30,0x52,0x65,0x61,0x64,0x20,0x63,
- 0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x2F,0x76,0x6F,0x6C,0x75,0x6D,
- 0x65,0x20,0x61,0x74,0x20,0x63,0x75,0x72,0x73,0x6F,0x72,0x2E,
- 0x00,0x1C,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
- 0x53,0x63,0x61,0x6C,0x65,0x2D,0x66,0x61,0x64,0x65,0x20,0x76,
- 0x6F,0x6C,0x75,0x6D,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,
- 0x30,0x40,0x43,0x30,0x30,0x32,0x25,0x53,0x68,0x2B,0x56,0x20,
- 0x40,0x54,0x31,0x36,0x30,0x53,0x63,0x61,0x6C,0x65,0x2D,0x66,
- 0x61,0x64,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x69,
- 0x6E,0x20,0x74,0x72,0x61,0x63,0x6B,0x2E,0x2A,0x3E,0x43,0x74,
- 0x72,0x6C,0x2B,0x56,0x20,0x40,0x54,0x31,0x36,0x30,0x53,0x63,
- 0x61,0x6C,0x65,0x2D,0x66,0x61,0x64,0x65,0x20,0x76,0x6F,0x6C,
- 0x75,0x6D,0x65,0x20,0x69,0x6E,0x20,0x70,0x61,0x74,0x74,0x65,
- 0x72,0x6E,0x2E,0x27,0x3E,0x41,0x6C,0x74,0x2B,0x56,0x20,0x40,
- 0x54,0x31,0x36,0x30,0x53,0x63,0x61,0x6C,0x65,0x2D,0x66,0x61,
- 0x64,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x69,0x6E,
- 0x20,0x62,0x6C,0x6F,0x63,0x6B,0x2E,0x00,0x14,0x40,0x58,0x30,
- 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x54,0x72,0x61,0x6E,0x73,
- 0x70,0x6F,0x73,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
- 0x40,0x43,0x30,0x30,0x32,0x36,0x53,0x68,0x2B,0x46,0x37,0x20,
- 0x40,0x54,0x31,0x36,0x30,0x54,0x72,0x61,0x6E,0x73,0x70,0x6F,
- 0x73,0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x69,
- 0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x69,0x6E,
- 0x20,0x74,0x72,0x61,0x63,0x6B,0x20,0x64,0x6F,0x77,0x6E,0x2E,
- 0x35,0x3E,0x53,0x68,0x2B,0x46,0x38,0x20,0x40,0x54,0x31,0x36,
- 0x30,0x54,0x72,0x61,0x6E,0x73,0x70,0x6F,0x73,0x65,0x20,0x63,
- 0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x69,0x6E,0x73,0x74,0x72,
- 0x75,0x6D,0x65,0x6E,0x74,0x20,0x69,0x6E,0x20,0x74,0x72,0x61,
- 0x63,0x6B,0x20,0x75,0x70,0x2E,0x3B,0x3E,0x43,0x74,0x72,0x6C,
- 0x2B,0x46,0x37,0x20,0x40,0x54,0x31,0x36,0x30,0x54,0x72,0x61,
- 0x6E,0x73,0x70,0x6F,0x73,0x65,0x20,0x63,0x75,0x72,0x72,0x65,
- 0x6E,0x74,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,
- 0x74,0x20,0x69,0x6E,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,
- 0x20,0x64,0x6F,0x77,0x6E,0x2E,0x39,0x3E,0x43,0x74,0x72,0x6C,
- 0x2B,0x46,0x38,0x20,0x40,0x54,0x31,0x36,0x30,0x54,0x72,0x61,
- 0x6E,0x73,0x70,0x6F,0x73,0x65,0x20,0x63,0x75,0x72,0x72,0x65,
- 0x6E,0x74,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,
- 0x74,0x20,0x69,0x6E,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,
- 0x20,0x75,0x70,0x2E,0x38,0x3E,0x41,0x6C,0x74,0x2B,0x46,0x37,
+ 0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x62,0x6C,
+ 0x6F,0x63,0x6B,0x2E,0x32,0x3E,0x27,0x2B,0x27,0x20,0x2B,0x54,
+ 0x6F,0x70,0x20,0x34,0x20,0x6B,0x65,0x79,0x73,0x20,0x40,0x54,
+ 0x31,0x36,0x30,0x53,0x65,0x6C,0x65,0x63,0x74,0x20,0x69,0x6E,
+ 0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x62,0x6C,0x6F,
+ 0x63,0x6B,0x20,0x2B,0x20,0x34,0x2E,0x23,0x3E,0x45,0x6E,0x74,
+ 0x65,0x72,0x20,0x40,0x54,0x31,0x36,0x30,0x53,0x65,0x6C,0x65,
+ 0x63,0x74,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,
+ 0x74,0x20,0x62,0x61,0x6E,0x6B,0x2E,0x1D,0x3E,0x30,0x20,0x40,
+ 0x54,0x31,0x36,0x30,0x53,0x65,0x6C,0x65,0x63,0x74,0x20,0x6E,
+ 0x6F,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,
+ 0x2E,0x26,0x3E,0x31,0x2E,0x2E,0x38,0x20,0x40,0x54,0x31,0x36,
+ 0x30,0x53,0x65,0x6C,0x65,0x63,0x74,0x20,0x69,0x6E,0x73,0x74,
+ 0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x69,0x6E,0x20,0x62,0x6C,
+ 0x6F,0x63,0x6B,0x2E,0x19,0x3E,0x2C,0x20,0x40,0x54,0x31,0x36,
+ 0x30,0x43,0x6C,0x65,0x61,0x72,0x20,0x69,0x6E,0x73,0x74,0x72,
+ 0x75,0x6D,0x65,0x6E,0x74,0x2E,0x18,0x3E,0x53,0x68,0x2B,0x2C,
+ 0x20,0x40,0x54,0x31,0x36,0x30,0x43,0x6C,0x65,0x61,0x72,0x20,
+ 0x73,0x61,0x6D,0x70,0x6C,0x65,0x2E,0x27,0x3E,0x53,0x68,0x2B,
+ 0x55,0x70,0x20,0x40,0x54,0x31,0x36,0x30,0x53,0x65,0x6C,0x65,
+ 0x63,0x74,0x20,0x70,0x72,0x65,0x76,0x69,0x6F,0x75,0x73,0x20,
+ 0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x2E,0x25,
+ 0x3E,0x53,0x68,0x2B,0x44,0x6F,0x77,0x6E,0x20,0x40,0x54,0x31,
+ 0x36,0x30,0x53,0x65,0x6C,0x65,0x63,0x74,0x20,0x6E,0x65,0x78,
+ 0x74,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,
+ 0x2E,0x00,0x1F,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
+ 0x31,0x43,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x2F,0x56,0x6F,0x6C,
+ 0x75,0x6D,0x65,0x20,0x6D,0x61,0x63,0x72,0x6F,0x3A,0x0B,0x3E,
+ 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x2D,0x41,
+ 0x6C,0x74,0x2B,0x31,0x2E,0x2E,0x30,0x20,0x40,0x54,0x31,0x36,
+ 0x30,0x57,0x72,0x69,0x74,0x65,0x20,0x63,0x6F,0x6D,0x6D,0x61,
+ 0x6E,0x64,0x2F,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x61,0x74,
+ 0x20,0x63,0x75,0x72,0x73,0x6F,0x72,0x2E,0x30,0x3E,0x53,0x68,
+ 0x2B,0x41,0x6C,0x74,0x2B,0x31,0x2E,0x2E,0x30,0x20,0x40,0x54,
+ 0x31,0x36,0x30,0x52,0x65,0x61,0x64,0x20,0x63,0x6F,0x6D,0x6D,
+ 0x61,0x6E,0x64,0x2F,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x61,
+ 0x74,0x20,0x63,0x75,0x72,0x73,0x6F,0x72,0x2E,0x00,0x1C,0x40,
+ 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x63,0x61,
+ 0x6C,0x65,0x2D,0x66,0x61,0x64,0x65,0x20,0x76,0x6F,0x6C,0x75,
+ 0x6D,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
+ 0x30,0x30,0x32,0x25,0x53,0x68,0x2B,0x56,0x20,0x40,0x54,0x31,
+ 0x36,0x30,0x53,0x63,0x61,0x6C,0x65,0x2D,0x66,0x61,0x64,0x65,
+ 0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x69,0x6E,0x20,0x74,
+ 0x72,0x61,0x63,0x6B,0x2E,0x2A,0x3E,0x43,0x74,0x72,0x6C,0x2B,
+ 0x56,0x20,0x40,0x54,0x31,0x36,0x30,0x53,0x63,0x61,0x6C,0x65,
+ 0x2D,0x66,0x61,0x64,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,
+ 0x20,0x69,0x6E,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x2E,
+ 0x27,0x3E,0x41,0x6C,0x74,0x2B,0x56,0x20,0x40,0x54,0x31,0x36,
+ 0x30,0x53,0x63,0x61,0x6C,0x65,0x2D,0x66,0x61,0x64,0x65,0x20,
+ 0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x69,0x6E,0x20,0x62,0x6C,
+ 0x6F,0x63,0x6B,0x2E,0x00,0x14,0x40,0x58,0x30,0x34,0x30,0x40,
+ 0x43,0x30,0x30,0x31,0x54,0x72,0x61,0x6E,0x73,0x70,0x6F,0x73,
+ 0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
+ 0x30,0x32,0x36,0x53,0x68,0x2B,0x46,0x37,0x20,0x40,0x54,0x31,
+ 0x36,0x30,0x54,0x72,0x61,0x6E,0x73,0x70,0x6F,0x73,0x65,0x20,
+ 0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x69,0x6E,0x73,0x74,
+ 0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x69,0x6E,0x20,0x74,0x72,
+ 0x61,0x63,0x6B,0x20,0x64,0x6F,0x77,0x6E,0x2E,0x35,0x3E,0x53,
+ 0x68,0x2B,0x46,0x38,0x20,0x40,0x54,0x31,0x36,0x30,0x54,0x72,
+ 0x61,0x6E,0x73,0x70,0x6F,0x73,0x65,0x20,0x63,0x75,0x72,0x72,
+ 0x65,0x6E,0x74,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,
+ 0x6E,0x74,0x20,0x69,0x6E,0x20,0x74,0x72,0x61,0x63,0x6B,0x20,
+ 0x75,0x70,0x2E,0x3B,0x3E,0x43,0x74,0x72,0x6C,0x2B,0x46,0x37,
0x20,0x40,0x54,0x31,0x36,0x30,0x54,0x72,0x61,0x6E,0x73,0x70,
0x6F,0x73,0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,
0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x69,
- 0x6E,0x20,0x62,0x6C,0x6F,0x63,0x6B,0x20,0x64,0x6F,0x77,0x6E,
- 0x2E,0x36,0x3E,0x41,0x6C,0x74,0x2B,0x46,0x38,0x20,0x40,0x54,
+ 0x6E,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x64,0x6F,
+ 0x77,0x6E,0x2E,0x39,0x3E,0x43,0x74,0x72,0x6C,0x2B,0x46,0x38,
+ 0x20,0x40,0x54,0x31,0x36,0x30,0x54,0x72,0x61,0x6E,0x73,0x70,
+ 0x6F,0x73,0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,
+ 0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x69,
+ 0x6E,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x75,0x70,
+ 0x2E,0x38,0x3E,0x41,0x6C,0x74,0x2B,0x46,0x37,0x20,0x40,0x54,
0x31,0x36,0x30,0x54,0x72,0x61,0x6E,0x73,0x70,0x6F,0x73,0x65,
0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x69,0x6E,0x73,
0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x69,0x6E,0x20,0x62,
- 0x6C,0x6F,0x63,0x6B,0x20,0x75,0x70,0x2E,0x34,0x3E,0x53,0x68,
- 0x2B,0x46,0x31,0x20,0x40,0x54,0x31,0x36,0x30,0x54,0x72,0x61,
- 0x6E,0x73,0x70,0x6F,0x73,0x65,0x20,0x61,0x6C,0x6C,0x20,0x69,
- 0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x73,0x20,0x69,
- 0x6E,0x20,0x74,0x72,0x61,0x63,0x6B,0x20,0x64,0x6F,0x77,0x6E,
- 0x2E,0x32,0x3E,0x53,0x68,0x2B,0x46,0x32,0x20,0x40,0x54,0x31,
- 0x36,0x30,0x54,0x72,0x61,0x6E,0x73,0x70,0x6F,0x73,0x65,0x20,
- 0x61,0x6C,0x6C,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,
- 0x6E,0x74,0x73,0x20,0x69,0x6E,0x20,0x74,0x72,0x61,0x63,0x6B,
- 0x20,0x75,0x70,0x2E,0x38,0x3E,0x43,0x74,0x72,0x6C,0x2B,0x46,
- 0x31,0x20,0x40,0x54,0x31,0x36,0x30,0x54,0x72,0x61,0x6E,0x73,
- 0x70,0x6F,0x73,0x65,0x20,0x61,0x6C,0x6C,0x20,0x69,0x6E,0x73,
- 0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x73,0x20,0x69,0x6E,0x20,
- 0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x64,0x6F,0x77,0x6E,
- 0x2E,0x36,0x3E,0x43,0x74,0x72,0x6C,0x2B,0x46,0x32,0x20,0x40,
+ 0x6C,0x6F,0x63,0x6B,0x20,0x64,0x6F,0x77,0x6E,0x2E,0x36,0x3E,
+ 0x41,0x6C,0x74,0x2B,0x46,0x38,0x20,0x40,0x54,0x31,0x36,0x30,
+ 0x54,0x72,0x61,0x6E,0x73,0x70,0x6F,0x73,0x65,0x20,0x63,0x75,
+ 0x72,0x72,0x65,0x6E,0x74,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,
+ 0x6D,0x65,0x6E,0x74,0x20,0x69,0x6E,0x20,0x62,0x6C,0x6F,0x63,
+ 0x6B,0x20,0x75,0x70,0x2E,0x34,0x3E,0x53,0x68,0x2B,0x46,0x31,
+ 0x20,0x40,0x54,0x31,0x36,0x30,0x54,0x72,0x61,0x6E,0x73,0x70,
+ 0x6F,0x73,0x65,0x20,0x61,0x6C,0x6C,0x20,0x69,0x6E,0x73,0x74,
+ 0x72,0x75,0x6D,0x65,0x6E,0x74,0x73,0x20,0x69,0x6E,0x20,0x74,
+ 0x72,0x61,0x63,0x6B,0x20,0x64,0x6F,0x77,0x6E,0x2E,0x32,0x3E,
+ 0x53,0x68,0x2B,0x46,0x32,0x20,0x40,0x54,0x31,0x36,0x30,0x54,
+ 0x72,0x61,0x6E,0x73,0x70,0x6F,0x73,0x65,0x20,0x61,0x6C,0x6C,
+ 0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x73,
+ 0x20,0x69,0x6E,0x20,0x74,0x72,0x61,0x63,0x6B,0x20,0x75,0x70,
+ 0x2E,0x38,0x3E,0x43,0x74,0x72,0x6C,0x2B,0x46,0x31,0x20,0x40,
0x54,0x31,0x36,0x30,0x54,0x72,0x61,0x6E,0x73,0x70,0x6F,0x73,
0x65,0x20,0x61,0x6C,0x6C,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,
0x6D,0x65,0x6E,0x74,0x73,0x20,0x69,0x6E,0x20,0x70,0x61,0x74,
- 0x74,0x65,0x72,0x6E,0x20,0x75,0x70,0x2E,0x35,0x3E,0x41,0x6C,
- 0x74,0x2B,0x46,0x31,0x20,0x40,0x54,0x31,0x36,0x30,0x54,0x72,
- 0x61,0x6E,0x73,0x70,0x6F,0x73,0x65,0x20,0x61,0x6C,0x6C,0x20,
- 0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x73,0x20,
- 0x69,0x6E,0x20,0x62,0x6C,0x6F,0x63,0x6B,0x20,0x64,0x6F,0x77,
- 0x6E,0x2E,0x33,0x3E,0x41,0x6C,0x74,0x2B,0x46,0x32,0x20,0x40,
- 0x54,0x31,0x36,0x30,0x54,0x72,0x61,0x6E,0x73,0x70,0x6F,0x73,
- 0x65,0x20,0x61,0x6C,0x6C,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,
- 0x6D,0x65,0x6E,0x74,0x73,0x20,0x69,0x6E,0x20,0x62,0x6C,0x6F,
- 0x63,0x6B,0x20,0x75,0x70,0x2E,0x01,0x3E,0x18,0x40,0x58,0x30,
- 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x61,0x6D,0x70,0x6C,
- 0x65,0x20,0x65,0x64,0x69,0x74,0x6F,0x72,0x3A,0x0B,0x3E,0x40,
- 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x1A,0x41,0x6C,
- 0x74,0x2F,0x43,0x74,0x72,0x6C,0x2B,0x41,0x20,0x40,0x54,0x31,
- 0x36,0x30,0x52,0x61,0x6E,0x67,0x65,0x20,0x61,0x6C,0x6C,0x2E,
- 0x17,0x3E,0x41,0x6C,0x74,0x2B,0x53,0x20,0x40,0x54,0x31,0x36,
- 0x30,0x53,0x68,0x6F,0x77,0x20,0x72,0x61,0x6E,0x67,0x65,0x2E,
- 0x15,0x3E,0x41,0x6C,0x74,0x2B,0x5A,0x20,0x40,0x54,0x31,0x36,
- 0x30,0x5A,0x6F,0x6F,0x6D,0x20,0x6F,0x75,0x74,0x2E,0x1A,0x3E,
- 0x41,0x6C,0x74,0x2B,0x58,0x20,0x6F,0x72,0x20,0x44,0x65,0x6C,
- 0x65,0x74,0x65,0x20,0x40,0x54,0x31,0x36,0x30,0x43,0x75,0x74,
- 0x2E,0x16,0x3E,0x41,0x6C,0x74,0x2F,0x43,0x74,0x72,0x6C,0x2B,
- 0x43,0x20,0x40,0x54,0x31,0x36,0x30,0x43,0x6F,0x70,0x79,0x2E,
- 0x17,0x3E,0x41,0x6C,0x74,0x2F,0x43,0x74,0x72,0x6C,0x2B,0x56,
- 0x20,0x40,0x54,0x31,0x36,0x30,0x50,0x61,0x73,0x74,0x65,0x2E,
- 0x11,0x3E,0x41,0x6C,0x74,0x2B,0x52,0x20,0x40,0x54,0x31,0x36,
- 0x30,0x43,0x72,0x6F,0x70,0x2E,0x2A,0x3E,0x4D,0x6F,0x75,0x73,
- 0x65,0x20,0x77,0x68,0x65,0x65,0x6C,0x20,0x40,0x54,0x31,0x36,
- 0x30,0x5A,0x6F,0x6F,0x6D,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,
- 0x20,0x64,0x61,0x74,0x61,0x20,0x69,0x6E,0x2F,0x6F,0x75,0x74,
- 0x2E,0x00,0x21,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
- 0x31,0x4E,0x6F,0x74,0x65,0x20,0x66,0x6F,0x72,0x20,0x4D,0x61,
- 0x63,0x20,0x6B,0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x73,0x3A,
- 0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
- 0x3A,0x55,0x73,0x65,0x20,0x6C,0x65,0x66,0x74,0x20,0x63,0x74,
- 0x72,0x6C,0x2E,0x20,0x66,0x6F,0x72,0x20,0x41,0x2F,0x58,0x2F,
- 0x43,0x2F,0x56,0x20,0x28,0x6D,0x61,0x72,0x6B,0x20,0x61,0x6C,
- 0x6C,0x2F,0x63,0x75,0x74,0x2F,0x63,0x6F,0x70,0x79,0x2F,0x70,
- 0x61,0x73,0x74,0x65,0x29,0x20,0x6B,0x65,0x79,0x73,0x2E,0x4B,
- 0x3E,0x54,0x68,0x69,0x73,0x20,0x61,0x70,0x70,0x6C,0x69,0x65,
- 0x73,0x20,0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,
- 0x70,0x6C,0x65,0x20,0x65,0x64,0x69,0x74,0x6F,0x72,0x20,0x28,
- 0x41,0x2F,0x43,0x2F,0x56,0x20,0x6F,0x6E,0x6C,0x79,0x29,0x20,
- 0x61,0x6E,0x64,0x20,0x74,0x65,0x78,0x74,0x20,0x6D,0x61,0x72,
- 0x6B,0x69,0x6E,0x67,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,
- 0x55,0x49,0x2E,0x00,0x03,0x45,0x4E,0x44,0x4C,0x3B,0x2A,0x2A,
+ 0x74,0x65,0x72,0x6E,0x20,0x64,0x6F,0x77,0x6E,0x2E,0x36,0x3E,
+ 0x43,0x74,0x72,0x6C,0x2B,0x46,0x32,0x20,0x40,0x54,0x31,0x36,
+ 0x30,0x54,0x72,0x61,0x6E,0x73,0x70,0x6F,0x73,0x65,0x20,0x61,
+ 0x6C,0x6C,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,
+ 0x74,0x73,0x20,0x69,0x6E,0x20,0x70,0x61,0x74,0x74,0x65,0x72,
+ 0x6E,0x20,0x75,0x70,0x2E,0x35,0x3E,0x41,0x6C,0x74,0x2B,0x46,
+ 0x31,0x20,0x40,0x54,0x31,0x36,0x30,0x54,0x72,0x61,0x6E,0x73,
+ 0x70,0x6F,0x73,0x65,0x20,0x61,0x6C,0x6C,0x20,0x69,0x6E,0x73,
+ 0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x73,0x20,0x69,0x6E,0x20,
+ 0x62,0x6C,0x6F,0x63,0x6B,0x20,0x64,0x6F,0x77,0x6E,0x2E,0x33,
+ 0x3E,0x41,0x6C,0x74,0x2B,0x46,0x32,0x20,0x40,0x54,0x31,0x36,
+ 0x30,0x54,0x72,0x61,0x6E,0x73,0x70,0x6F,0x73,0x65,0x20,0x61,
+ 0x6C,0x6C,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,
+ 0x74,0x73,0x20,0x69,0x6E,0x20,0x62,0x6C,0x6F,0x63,0x6B,0x20,
+ 0x75,0x70,0x2E,0x01,0x3E,0x18,0x40,0x58,0x30,0x34,0x30,0x40,
+ 0x43,0x30,0x30,0x31,0x53,0x61,0x6D,0x70,0x6C,0x65,0x20,0x65,
+ 0x64,0x69,0x74,0x6F,0x72,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,
+ 0x30,0x40,0x43,0x30,0x30,0x32,0x1A,0x41,0x6C,0x74,0x2F,0x43,
+ 0x74,0x72,0x6C,0x2B,0x41,0x20,0x40,0x54,0x31,0x36,0x30,0x52,
+ 0x61,0x6E,0x67,0x65,0x20,0x61,0x6C,0x6C,0x2E,0x17,0x3E,0x41,
+ 0x6C,0x74,0x2B,0x53,0x20,0x40,0x54,0x31,0x36,0x30,0x53,0x68,
+ 0x6F,0x77,0x20,0x72,0x61,0x6E,0x67,0x65,0x2E,0x15,0x3E,0x41,
+ 0x6C,0x74,0x2B,0x5A,0x20,0x40,0x54,0x31,0x36,0x30,0x5A,0x6F,
+ 0x6F,0x6D,0x20,0x6F,0x75,0x74,0x2E,0x1A,0x3E,0x41,0x6C,0x74,
+ 0x2B,0x58,0x20,0x6F,0x72,0x20,0x44,0x65,0x6C,0x65,0x74,0x65,
+ 0x20,0x40,0x54,0x31,0x36,0x30,0x43,0x75,0x74,0x2E,0x16,0x3E,
+ 0x41,0x6C,0x74,0x2F,0x43,0x74,0x72,0x6C,0x2B,0x43,0x20,0x40,
+ 0x54,0x31,0x36,0x30,0x43,0x6F,0x70,0x79,0x2E,0x17,0x3E,0x41,
+ 0x6C,0x74,0x2F,0x43,0x74,0x72,0x6C,0x2B,0x56,0x20,0x40,0x54,
+ 0x31,0x36,0x30,0x50,0x61,0x73,0x74,0x65,0x2E,0x11,0x3E,0x41,
+ 0x6C,0x74,0x2B,0x52,0x20,0x40,0x54,0x31,0x36,0x30,0x43,0x72,
+ 0x6F,0x70,0x2E,0x2A,0x3E,0x4D,0x6F,0x75,0x73,0x65,0x20,0x77,
+ 0x68,0x65,0x65,0x6C,0x20,0x40,0x54,0x31,0x36,0x30,0x5A,0x6F,
+ 0x6F,0x6D,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x64,0x61,
+ 0x74,0x61,0x20,0x69,0x6E,0x2F,0x6F,0x75,0x74,0x2E,0x00,0x21,
+ 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x4E,0x6F,
+ 0x74,0x65,0x20,0x66,0x6F,0x72,0x20,0x4D,0x61,0x63,0x20,0x6B,
+ 0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x73,0x3A,0x0B,0x3E,0x40,
+ 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3A,0x55,0x73,
+ 0x65,0x20,0x6C,0x65,0x66,0x74,0x20,0x63,0x74,0x72,0x6C,0x2E,
+ 0x20,0x66,0x6F,0x72,0x20,0x41,0x2F,0x58,0x2F,0x43,0x2F,0x56,
+ 0x20,0x28,0x6D,0x61,0x72,0x6B,0x20,0x61,0x6C,0x6C,0x2F,0x63,
+ 0x75,0x74,0x2F,0x63,0x6F,0x70,0x79,0x2F,0x70,0x61,0x73,0x74,
+ 0x65,0x29,0x20,0x6B,0x65,0x79,0x73,0x2E,0x4B,0x3E,0x54,0x68,
+ 0x69,0x73,0x20,0x61,0x70,0x70,0x6C,0x69,0x65,0x73,0x20,0x74,
+ 0x6F,0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,
+ 0x20,0x65,0x64,0x69,0x74,0x6F,0x72,0x20,0x28,0x41,0x2F,0x43,
+ 0x2F,0x56,0x20,0x6F,0x6E,0x6C,0x79,0x29,0x20,0x61,0x6E,0x64,
+ 0x20,0x74,0x65,0x78,0x74,0x20,0x6D,0x61,0x72,0x6B,0x69,0x6E,
+ 0x67,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x55,0x49,0x2E,
+ 0x00,0x03,0x45,0x4E,0x44,0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
+ 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x4C,0x3B,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
- 0x2A,0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
- 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x1B,0x40,0x4C,0x48,0x6F,0x77,
- 0x20,0x74,0x6F,0x20,0x75,0x73,0x65,0x20,0x46,0x61,0x73,0x74,
- 0x74,0x72,0x61,0x63,0x6B,0x65,0x72,0x20,0x49,0x49,0x0B,0x3E,
- 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x32,0x40,0x3E,
- 0x41,0x6C,0x6C,0x20,0x22,0x6E,0x6F,0x74,0x2D,0x74,0x6F,0x6F,
- 0x2D,0x74,0x72,0x69,0x76,0x69,0x61,0x6C,0x22,0x20,0x66,0x75,
- 0x6E,0x63,0x74,0x69,0x6F,0x6E,0x73,0x20,0x61,0x72,0x65,0x20,
- 0x70,0x72,0x65,0x73,0x65,0x6E,0x74,0x65,0x64,0x20,0x62,0x65,
- 0x6C,0x6F,0x77,0x20,0x28,0x6F,0x72,0x64,0x65,0x72,0x65,0x64,
- 0x20,0x69,0x6E,0x22,0x77,0x69,0x6E,0x64,0x6F,0x77,0x73,0x29,
- 0x20,0x77,0x69,0x74,0x68,0x20,0x61,0x20,0x73,0x68,0x6F,0x72,
- 0x74,0x20,0x64,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,
- 0x6E,0x2E,0x00,0x17,0x3E,0x40,0x58,0x30,0x32,0x30,0x40,0x43,
- 0x30,0x30,0x31,0x4D,0x61,0x69,0x6E,0x20,0x73,0x63,0x72,0x65,
- 0x65,0x6E,0x3A,0x01,0x3E,0x22,0x3E,0x40,0x58,0x30,0x34,0x30,
- 0x40,0x43,0x30,0x30,0x31,0x42,0x50,0x4D,0x20,0x28,0x42,0x65,
- 0x61,0x74,0x73,0x20,0x70,0x65,0x72,0x20,0x6D,0x69,0x6E,0x75,
- 0x74,0x65,0x29,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
- 0x43,0x30,0x30,0x32,0x40,0x54,0x68,0x65,0x20,0x42,0x50,0x4D,
- 0x20,0x73,0x65,0x74,0x74,0x69,0x6E,0x67,0x20,0x64,0x65,0x66,
- 0x69,0x6E,0x65,0x73,0x20,0x68,0x6F,0x77,0x20,0x66,0x61,0x73,
- 0x74,0x20,0x28,0x74,0x69,0x63,0x6B,0x73,0x2F,0x73,0x65,0x63,
- 0x6F,0x6E,0x64,0x29,0x20,0x74,0x68,0x65,0x20,0x6D,0x75,0x73,
- 0x69,0x63,0x20,0x70,0x6C,0x61,0x79,0x65,0x72,0x1C,0x77,0x69,
- 0x6C,0x6C,0x20,0x72,0x75,0x6E,0x2E,0x20,0x31,0x32,0x35,0x20,
- 0x42,0x50,0x4D,0x20,0x3C,0x2D,0x3E,0x20,0x35,0x30,0x20,0x48,
- 0x7A,0x2E,0x28,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,
- 0x66,0x20,0x70,0x6C,0x61,0x79,0x65,0x72,0x20,0x74,0x69,0x63,
- 0x6B,0x73,0x2F,0x73,0x65,0x63,0x6F,0x6E,0x64,0x20,0x3D,0x20,
- 0x42,0x50,0x4D,0x2A,0x32,0x2F,0x35,0x00,0x16,0x3E,0x40,0x58,
- 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x70,0x64,0x2C,
- 0x20,0x53,0x70,0x65,0x65,0x64,0x3A,0x0B,0x3E,0x40,0x58,0x30,
- 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x2C,0x53,0x70,0x65,0x65,
- 0x64,0x20,0x3D,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,
- 0x66,0x20,0x70,0x6C,0x61,0x79,0x65,0x72,0x20,0x74,0x69,0x63,
- 0x6B,0x73,0x2F,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x6C,
- 0x69,0x6E,0x65,0x2E,0x00,0x0F,0x3E,0x40,0x58,0x30,0x34,0x30,
- 0x40,0x43,0x30,0x30,0x31,0x41,0x64,0x64,0x3A,0x0B,0x3E,0x40,
- 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3E,0x22,0x41,
- 0x64,0x64,0x22,0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x6E,
- 0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x61,0x74,
- 0x74,0x65,0x72,0x6E,0x20,0x6C,0x69,0x6E,0x65,0x73,0x20,0x74,
- 0x68,0x65,0x20,0x63,0x75,0x72,0x73,0x6F,0x72,0x20,0x6A,0x75,
- 0x6D,0x70,0x73,0x20,0x77,0x68,0x65,0x6E,0x20,0x79,0x6F,0x75,
- 0x0C,0x65,0x64,0x69,0x74,0x20,0x61,0x20,0x6E,0x6F,0x74,0x65,
- 0x2E,0x00,0x0F,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
- 0x30,0x31,0x50,0x74,0x6E,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,
- 0x30,0x40,0x43,0x30,0x30,0x32,0x1B,0x54,0x68,0x65,0x20,0x63,
- 0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x70,0x61,0x74,0x74,0x65,
- 0x72,0x6E,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x2E,0x00,0x0E,
- 0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x4C,
- 0x6E,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
- 0x30,0x32,0x43,0x54,0x68,0x65,0x20,0x6E,0x75,0x6D,0x62,0x65,
- 0x72,0x20,0x6F,0x66,0x20,0x6C,0x69,0x6E,0x65,0x73,0x20,0x66,
- 0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,
- 0x6E,0x74,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x2E,0x20,
- 0x55,0x70,0x20,0x74,0x6F,0x20,0x24,0x31,0x30,0x30,0x20,0x6C,
- 0x69,0x6E,0x65,0x73,0x2E,0x20,0x4E,0x6F,0x74,0x65,0x40,0x74,
- 0x68,0x61,0x74,0x20,0x46,0x54,0x32,0x20,0x77,0x6F,0x6E,0x27,
- 0x74,0x20,0x77,0x61,0x72,0x6E,0x20,0x79,0x6F,0x75,0x20,0x69,
- 0x66,0x20,0x79,0x6F,0x75,0x20,0x64,0x65,0x63,0x72,0x65,0x61,
- 0x73,0x65,0x20,0x74,0x68,0x69,0x73,0x20,0x76,0x61,0x6C,0x75,
- 0x65,0x2E,0x20,0x54,0x68,0x65,0x20,0x6E,0x6F,0x74,0x65,0x73,
- 0x20,0x61,0x74,0x37,0x74,0x68,0x65,0x20,0x62,0x6F,0x74,0x74,
- 0x6F,0x6D,0x20,0x6C,0x69,0x6E,0x65,0x20,0x77,0x69,0x6C,0x6C,
- 0x20,0x62,0x65,0x20,0x74,0x68,0x72,0x6F,0x77,0x6E,0x20,0x6F,
- 0x75,0x74,0x20,0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x62,0x69,
- 0x6E,0x61,0x72,0x79,0x20,0x73,0x70,0x61,0x63,0x65,0x2E,0x00,
- 0x10,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
- 0x45,0x78,0x70,0x64,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
- 0x40,0x43,0x30,0x30,0x32,0x44,0x45,0x78,0x70,0x61,0x6E,0x64,
- 0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x2E,0x20,0x49,0x6E,
- 0x73,0x65,0x72,0x74,0x73,0x20,0x61,0x20,0x62,0x6C,0x61,0x6E,
- 0x6B,0x20,0x6C,0x69,0x6E,0x65,0x20,0x61,0x66,0x74,0x65,0x72,
- 0x20,0x65,0x61,0x63,0x68,0x20,0x70,0x61,0x74,0x74,0x65,0x72,
- 0x6E,0x20,0x6C,0x69,0x6E,0x65,0x2E,0x20,0x55,0x73,0x65,0x66,
- 0x75,0x6C,0x3C,0x69,0x66,0x20,0x79,0x6F,0x75,0x20,0x77,0x61,
- 0x6E,0x74,0x20,0x74,0x6F,0x20,0x63,0x6F,0x6E,0x76,0x65,0x72,
- 0x74,0x20,0x61,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,
- 0x74,0x68,0x61,0x74,0x20,0x72,0x75,0x6E,0x73,0x20,0x69,0x6E,
- 0x20,0x73,0x70,0x65,0x65,0x64,0x20,0x32,0x2A,0x78,0x20,0x74,
- 0x6F,0x20,0x61,0x1D,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,
- 0x74,0x68,0x61,0x74,0x20,0x72,0x75,0x6E,0x73,0x20,0x69,0x6E,
- 0x20,0x73,0x70,0x65,0x65,0x64,0x20,0x78,0x2E,0x00,0x10,0x3E,
- 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x68,
- 0x6E,0x6B,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
- 0x30,0x30,0x32,0x2E,0x53,0x68,0x72,0x69,0x6E,0x6B,0x20,0x70,
- 0x61,0x74,0x74,0x65,0x72,0x6E,0x2E,0x20,0x44,0x65,0x6C,0x65,
- 0x74,0x65,0x73,0x20,0x61,0x6C,0x6C,0x20,0x6F,0x64,0x64,0x20,
- 0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x6C,0x69,0x6E,0x65,
- 0x73,0x2E,0x00,0x2A,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,
- 0x30,0x30,0x31,0x54,0x68,0x65,0x20,0x69,0x6E,0x73,0x74,0x72,
- 0x75,0x6D,0x65,0x6E,0x74,0x2F,0x73,0x61,0x6D,0x70,0x6C,0x65,
- 0x20,0x73,0x65,0x6C,0x65,0x63,0x74,0x6F,0x72,0x3A,0x0B,0x3E,
- 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3A,0x54,
- 0x68,0x65,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,
- 0x74,0x20,0x74,0x68,0x61,0x74,0x20,0x68,0x61,0x73,0x20,0x61,
- 0x20,0x6D,0x61,0x72,0x6B,0x20,0x6F,0x6E,0x20,0x69,0x74,0x27,
- 0x73,0x20,0x6E,0x61,0x6D,0x65,0x20,0x73,0x74,0x72,0x69,0x6E,
- 0x67,0x2C,0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x17,0x64,0x65,
- 0x73,0x74,0x69,0x6E,0x61,0x74,0x69,0x6F,0x6E,0x20,0x69,0x6E,
- 0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x2E,0x3D,0x3E,0x54,
- 0x68,0x65,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,
- 0x74,0x20,0x74,0x68,0x61,0x74,0x20,0x68,0x61,0x73,0x20,0x61,
- 0x20,0x6D,0x61,0x72,0x6B,0x20,0x6F,0x6E,0x20,0x69,0x74,0x27,
- 0x73,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x2C,0x20,0x69,0x73,
- 0x20,0x74,0x68,0x65,0x20,0x73,0x6F,0x75,0x72,0x63,0x65,0x0B,
- 0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x2E,0x1F,
- 0x3E,0x54,0x68,0x65,0x20,0x73,0x61,0x6D,0x65,0x20,0x67,0x6F,
- 0x65,0x73,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x73,
- 0x61,0x6D,0x70,0x6C,0x65,0x73,0x2E,0x42,0x3E,0x59,0x6F,0x75,
- 0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x20,0x74,0x68,0x65,0x20,
- 0x6E,0x61,0x6D,0x65,0x20,0x6F,0x6E,0x20,0x61,0x6E,0x20,0x69,
- 0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x2F,0x73,0x61,
- 0x6D,0x70,0x6C,0x65,0x20,0x62,0x79,0x20,0x63,0x6C,0x69,0x63,
- 0x6B,0x69,0x6E,0x67,0x20,0x74,0x68,0x65,0x20,0x72,0x69,0x67,
- 0x68,0x74,0x07,0x62,0x75,0x74,0x74,0x6F,0x6E,0x2E,0x00,0x12,
- 0x3E,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,0x53,
- 0x63,0x6F,0x70,0x65,0x73,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,
- 0x30,0x40,0x43,0x30,0x30,0x32,0x22,0x3E,0x4C,0x65,0x66,0x74,
- 0x20,0x62,0x75,0x74,0x74,0x6F,0x6E,0x3A,0x20,0x54,0x75,0x72,
- 0x6E,0x20,0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x20,0x6F,0x6E,
- 0x2F,0x6F,0x66,0x66,0x2E,0x35,0x3E,0x52,0x69,0x67,0x68,0x74,
- 0x20,0x62,0x75,0x74,0x74,0x6F,0x6E,0x3A,0x20,0x54,0x75,0x72,
- 0x6E,0x20,0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x20,0x6D,0x75,
- 0x6C,0x74,0x69,0x2D,0x72,0x65,0x63,0x6F,0x72,0x64,0x2F,0x65,
- 0x64,0x69,0x74,0x20,0x6F,0x6E,0x2F,0x6F,0x66,0x66,0x2E,0x42,
- 0x3E,0x4C,0x65,0x66,0x74,0x2B,0x72,0x69,0x67,0x68,0x74,0x20,
- 0x62,0x75,0x74,0x74,0x6F,0x6E,0x3A,0x20,0x54,0x75,0x72,0x6E,
- 0x20,0x61,0x6C,0x6C,0x20,0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,
- 0x73,0x20,0x6F,0x66,0x66,0x20,0x65,0x78,0x63,0x65,0x70,0x74,
- 0x20,0x74,0x68,0x65,0x20,0x73,0x65,0x6C,0x65,0x63,0x74,0x65,
- 0x64,0x20,0x6F,0x6E,0x65,0x2E,0x00,0x1C,0x40,0x58,0x30,0x32,
- 0x30,0x40,0x43,0x30,0x30,0x31,0x49,0x6E,0x73,0x74,0x72,0x75,
- 0x6D,0x65,0x6E,0x74,0x20,0x45,0x64,0x69,0x74,0x6F,0x72,0x3A,
+ 0x2A,0x2A,0x2A,0x1B,0x40,0x4C,0x48,0x6F,0x77,0x20,0x74,0x6F,
+ 0x20,0x75,0x73,0x65,0x20,0x46,0x61,0x73,0x74,0x74,0x72,0x61,
+ 0x63,0x6B,0x65,0x72,0x20,0x49,0x49,0x0B,0x3E,0x40,0x58,0x30,
+ 0x34,0x30,0x40,0x43,0x30,0x30,0x32,0x40,0x3E,0x41,0x6C,0x6C,
+ 0x20,0x22,0x6E,0x6F,0x74,0x2D,0x74,0x6F,0x6F,0x2D,0x74,0x72,
+ 0x69,0x76,0x69,0x61,0x6C,0x22,0x20,0x66,0x75,0x6E,0x63,0x74,
+ 0x69,0x6F,0x6E,0x73,0x20,0x61,0x72,0x65,0x20,0x70,0x72,0x65,
+ 0x73,0x65,0x6E,0x74,0x65,0x64,0x20,0x62,0x65,0x6C,0x6F,0x77,
+ 0x20,0x28,0x6F,0x72,0x64,0x65,0x72,0x65,0x64,0x20,0x69,0x6E,
+ 0x22,0x77,0x69,0x6E,0x64,0x6F,0x77,0x73,0x29,0x20,0x77,0x69,
+ 0x74,0x68,0x20,0x61,0x20,0x73,0x68,0x6F,0x72,0x74,0x20,0x64,
+ 0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x2E,0x00,
+ 0x17,0x3E,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,
+ 0x4D,0x61,0x69,0x6E,0x20,0x73,0x63,0x72,0x65,0x65,0x6E,0x3A,
0x01,0x3E,0x22,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
- 0x30,0x31,0x57,0x68,0x61,0x74,0x20,0x69,0x73,0x20,0x61,0x6E,
- 0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x3F,
+ 0x30,0x31,0x42,0x50,0x4D,0x20,0x28,0x42,0x65,0x61,0x74,0x73,
+ 0x20,0x70,0x65,0x72,0x20,0x6D,0x69,0x6E,0x75,0x74,0x65,0x29,
0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,
- 0x32,0x1E,0x41,0x20,0x46,0x61,0x73,0x74,0x74,0x72,0x61,0x63,
- 0x6B,0x65,0x72,0x20,0x32,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,
- 0x6D,0x65,0x6E,0x74,0x20,0x69,0x73,0x3A,0x15,0x3E,0x20,0x20,
- 0x20,0x31,0x20,0x56,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x65,0x6E,
- 0x76,0x65,0x6C,0x6F,0x70,0x65,0x16,0x3E,0x20,0x20,0x20,0x31,
- 0x20,0x50,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x65,0x6E,0x76,
- 0x65,0x6C,0x6F,0x70,0x65,0x1D,0x3E,0x20,0x20,0x20,0x31,0x20,
- 0x41,0x75,0x74,0x6F,0x2D,0x76,0x69,0x62,0x72,0x61,0x74,0x6F,
- 0x20,0x64,0x65,0x66,0x69,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x13,
- 0x3E,0x20,0x20,0x20,0x31,0x2E,0x2E,0x31,0x36,0x20,0x53,0x61,
- 0x6D,0x70,0x6C,0x65,0x28,0x73,0x29,0x1F,0x3E,0x20,0x20,0x20,
- 0x31,0x20,0x4B,0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x20,0x73,
- 0x70,0x6C,0x69,0x74,0x20,0x64,0x65,0x66,0x69,0x6E,0x69,0x74,
- 0x69,0x6F,0x6E,0x15,0x3E,0x20,0x20,0x20,0x31,0x20,0x4D,0x49,
- 0x44,0x49,0x20,0x64,0x65,0x66,0x69,0x6E,0x69,0x74,0x69,0x6F,
- 0x6E,0x00,0x1B,0x3E,0x41,0x20,0x46,0x61,0x73,0x74,0x74,0x72,
- 0x61,0x63,0x6B,0x65,0x72,0x20,0x32,0x20,0x73,0x61,0x6D,0x70,
- 0x6C,0x65,0x20,0x69,0x73,0x3A,0x29,0x3E,0x20,0x20,0x20,0x31,
- 0x20,0x56,0x6F,0x6C,0x75,0x6D,0x65,0x2F,0x50,0x61,0x6E,0x6E,
- 0x69,0x6E,0x67,0x2F,0x46,0x69,0x6E,0x65,0x2D,0x74,0x75,0x6E,
- 0x65,0x20,0x64,0x65,0x66,0x69,0x6E,0x69,0x74,0x69,0x6F,0x6E,
- 0x14,0x3E,0x20,0x20,0x20,0x31,0x20,0x52,0x65,0x6C,0x61,0x74,
- 0x69,0x76,0x65,0x20,0x74,0x6F,0x6E,0x65,0x2E,0x10,0x3E,0x20,
- 0x20,0x20,0x31,0x20,0x57,0x61,0x76,0x65,0x20,0x66,0x6F,0x72,
- 0x6D,0x2E,0x00,0x1F,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,
- 0x30,0x30,0x31,0x54,0x68,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,
- 0x65,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x3A,0x0B,
- 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x40,
- 0x3E,0x41,0x6E,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,
- 0x6E,0x74,0x27,0x73,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,
- 0x69,0x73,0x20,0x64,0x65,0x66,0x69,0x6E,0x65,0x64,0x20,0x62,
- 0x79,0x20,0x69,0x74,0x73,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,
- 0x70,0x65,0x20,0x63,0x75,0x72,0x76,0x65,0x2E,0x20,0x49,0x66,
- 0x20,0x74,0x68,0x65,0x3E,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,
- 0x65,0x6E,0x74,0x20,0x68,0x61,0x73,0x20,0x61,0x20,0x73,0x75,
- 0x73,0x74,0x61,0x69,0x6E,0x20,0x70,0x6F,0x69,0x6E,0x74,0x2C,
- 0x20,0x74,0x68,0x65,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,
- 0x65,0x20,0x77,0x69,0x6C,0x6C,0x20,0x73,0x74,0x6F,0x70,0x20,
- 0x61,0x74,0x20,0x74,0x68,0x61,0x74,0x42,0x70,0x6F,0x69,0x6E,
- 0x74,0x20,0x75,0x6E,0x74,0x69,0x6C,0x20,0x61,0x20,0x6B,0x65,
- 0x79,0x2D,0x6F,0x66,0x66,0x20,0x6E,0x6F,0x74,0x65,0x20,0x68,
- 0x61,0x73,0x20,0x62,0x65,0x65,0x6E,0x20,0x70,0x6C,0x61,0x79,
- 0x65,0x64,0x2E,0x20,0x57,0x68,0x65,0x6E,0x20,0x61,0x20,0x6B,
- 0x65,0x79,0x2D,0x6F,0x66,0x66,0x20,0x6E,0x6F,0x74,0x65,0x20,
- 0x69,0x73,0x1D,0x70,0x6C,0x61,0x79,0x65,0x64,0x2C,0x20,0x74,
- 0x68,0x65,0x20,0x22,0x66,0x61,0x64,0x65,0x6F,0x75,0x74,0x22,
- 0x20,0x62,0x65,0x67,0x69,0x6E,0x73,0x2E,0x44,0x3E,0x4F,0x6E,
- 0x65,0x20,0x70,0x69,0x78,0x65,0x6C,0x20,0x69,0x6E,0x20,0x74,
- 0x68,0x65,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x20,
- 0x77,0x69,0x6E,0x64,0x6F,0x77,0x20,0x63,0x6F,0x72,0x72,0x65,
- 0x73,0x70,0x6F,0x6E,0x64,0x73,0x20,0x74,0x6F,0x20,0x6F,0x6E,
- 0x65,0x20,0x70,0x6C,0x61,0x79,0x65,0x72,0x2D,0x74,0x69,0x63,
- 0x6B,0x2E,0x20,0x49,0x66,0x3C,0x74,0x68,0x65,0x20,0x42,0x50,
- 0x4D,0x20,0x69,0x73,0x20,0x31,0x32,0x35,0x2C,0x20,0x79,0x6F,
- 0x75,0x27,0x6C,0x6C,0x20,0x63,0x6F,0x6E,0x73,0x75,0x6D,0x65,
- 0x20,0x35,0x30,0x20,0x70,0x69,0x78,0x65,0x6C,0x2F,0x73,0x65,
- 0x63,0x6F,0x6E,0x64,0x2E,0x20,0x54,0x68,0x65,0x20,0x77,0x69,
- 0x6E,0x64,0x6F,0x77,0x27,0x73,0x1A,0x22,0x73,0x69,0x7A,0x65,
- 0x22,0x20,0x69,0x73,0x20,0x61,0x62,0x6F,0x75,0x74,0x20,0x36,
- 0x20,0x73,0x65,0x63,0x6F,0x6E,0x64,0x73,0x2E,0x3E,0x3E,0x49,
- 0x66,0x20,0x79,0x6F,0x75,0x20,0x70,0x72,0x65,0x73,0x73,0x20,
- 0x74,0x68,0x65,0x20,0x72,0x69,0x67,0x68,0x74,0x20,0x6D,0x6F,
- 0x75,0x73,0x65,0x20,0x62,0x75,0x74,0x74,0x6F,0x6E,0x20,0x61,
- 0x74,0x20,0x74,0x68,0x65,0x20,0x70,0x72,0x65,0x64,0x65,0x66,
- 0x69,0x6E,0x65,0x20,0x62,0x75,0x74,0x74,0x6F,0x6E,0x73,0x2C,
- 0x3F,0x79,0x6F,0x75,0x27,0x6C,0x6C,0x20,0x73,0x74,0x6F,0x72,
- 0x65,0x20,0x74,0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,
- 0x74,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x20,0x69,
- 0x6E,0x74,0x6F,0x20,0x74,0x68,0x61,0x74,0x20,0x70,0x72,0x65,
- 0x64,0x65,0x66,0x69,0x6E,0x65,0x20,0x63,0x65,0x6C,0x6C,0x2E,
- 0x20,0x54,0x68,0x65,0x30,0x70,0x72,0x65,0x64,0x65,0x66,0x69,
- 0x6E,0x65,0x73,0x20,0x61,0x72,0x65,0x20,0x73,0x74,0x6F,0x72,
- 0x65,0x64,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x63,0x6F,
- 0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,
- 0x66,0x69,0x6C,0x65,0x2E,0x43,0x3E,0x50,0x72,0x65,0x64,0x65,
- 0x66,0x69,0x6E,0x65,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,
- 0x31,0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x64,0x65,0x66,
- 0x61,0x75,0x6C,0x74,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,
- 0x65,0x2E,0x20,0x54,0x68,0x69,0x73,0x20,0x6D,0x65,0x61,0x6E,
- 0x73,0x20,0x74,0x68,0x61,0x74,0x20,0x69,0x66,0x20,0x79,0x6F,
- 0x75,0x42,0x6C,0x6F,0x61,0x64,0x20,0x61,0x20,0x73,0x61,0x6D,
- 0x70,0x6C,0x65,0x2C,0x20,0x69,0x74,0x20,0x77,0x69,0x6C,0x6C,
- 0x20,0x67,0x65,0x74,0x20,0x61,0x6C,0x6C,0x20,0x65,0x6E,0x76,
- 0x65,0x6C,0x6F,0x70,0x65,0x20,0x69,0x6E,0x66,0x6F,0x72,0x6D,
- 0x61,0x74,0x69,0x6F,0x6E,0x20,0x66,0x72,0x6F,0x6D,0x20,0x70,
- 0x72,0x65,0x64,0x65,0x66,0x69,0x6E,0x65,0x20,0x6E,0x75,0x6D,
- 0x62,0x65,0x72,0x20,0x31,0x2C,0x20,0x69,0x6E,0x63,0x6C,0x75,
- 0x64,0x69,0x6E,0x67,0x20,0x74,0x68,0x65,0x20,0x76,0x69,0x62,
- 0x72,0x61,0x74,0x6F,0x2E,0x42,0x3E,0x4E,0x6F,0x74,0x65,0x20,
- 0x74,0x68,0x61,0x74,0x20,0x69,0x66,0x20,0x79,0x6F,0x75,0x20,
- 0x74,0x75,0x72,0x6E,0x20,0x74,0x68,0x65,0x20,0x76,0x6F,0x6C,
- 0x75,0x6D,0x65,0x2D,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,
- 0x20,0x6F,0x66,0x66,0x2C,0x20,0x79,0x6F,0x75,0x20,0x64,0x6F,
- 0x6E,0x27,0x74,0x20,0x74,0x75,0x72,0x6E,0x20,0x74,0x68,0x65,
- 0x0C,0x76,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x6F,0x66,0x66,
- 0x2E,0x00,0x20,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
- 0x30,0x31,0x54,0x68,0x65,0x20,0x70,0x61,0x6E,0x6E,0x69,0x6E,
- 0x67,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x3A,0x0B,
- 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x40,
- 0x3E,0x53,0x61,0x6D,0x65,0x20,0x61,0x73,0x20,0x61,0x62,0x6F,
- 0x76,0x65,0x2C,0x20,0x65,0x78,0x63,0x65,0x70,0x74,0x20,0x66,
- 0x72,0x6F,0x6D,0x20,0x74,0x68,0x61,0x74,0x20,0x74,0x68,0x65,
- 0x20,0x76,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x69,0x73,0x20,
- 0x6E,0x6F,0x74,0x20,0x63,0x6F,0x6E,0x6E,0x65,0x63,0x74,0x65,
- 0x64,0x20,0x74,0x6F,0x15,0x74,0x68,0x65,0x20,0x70,0x61,0x6E,
- 0x6E,0x69,0x6E,0x67,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,
- 0x65,0x2E,0x00,0x10,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,
- 0x30,0x30,0x31,0x54,0x75,0x6E,0x65,0x3A,0x0B,0x3E,0x40,0x58,
- 0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3F,0x3E,0x54,0x68,
- 0x65,0x20,0x66,0x69,0x6E,0x65,0x2D,0x74,0x75,0x6E,0x65,0x20,
- 0x72,0x65,0x73,0x6F,0x6C,0x75,0x74,0x69,0x6F,0x6E,0x20,0x68,
- 0x61,0x73,0x20,0x62,0x65,0x65,0x6E,0x20,0x63,0x68,0x61,0x6E,
- 0x67,0x65,0x64,0x20,0x66,0x72,0x6F,0x6D,0x20,0x61,0x20,0x73,
- 0x69,0x67,0x6E,0x65,0x64,0x20,0x6E,0x69,0x62,0x62,0x6C,0x65,
- 0x27,0x28,0x2D,0x38,0x2E,0x2E,0x2B,0x37,0x29,0x20,0x74,0x6F,
- 0x20,0x61,0x20,0x73,0x69,0x67,0x6E,0x65,0x64,0x20,0x62,0x79,
- 0x74,0x65,0x20,0x28,0x2D,0x31,0x32,0x38,0x2E,0x2E,0x2B,0x31,
- 0x32,0x37,0x29,0x2E,0x00,0x13,0x3E,0x40,0x58,0x30,0x34,0x30,
- 0x40,0x43,0x30,0x30,0x31,0x46,0x61,0x64,0x65,0x6F,0x75,0x74,
- 0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,
- 0x32,0x1B,0x3E,0x54,0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x74,
- 0x68,0x65,0x20,0x66,0x61,0x64,0x65,0x6F,0x75,0x74,0x20,0x73,
- 0x70,0x65,0x65,0x64,0x2E,0x00,0x19,0x3E,0x40,0x58,0x30,0x34,
- 0x30,0x40,0x43,0x30,0x30,0x31,0x56,0x69,0x62,0x72,0x61,0x74,
- 0x6F,0x20,0x73,0x77,0x65,0x65,0x70,0x3A,0x0B,0x3E,0x40,0x58,
- 0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3E,0x3E,0x54,0x68,
- 0x69,0x73,0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x74,0x69,
- 0x6D,0x65,0x20,0x28,0x69,0x6E,0x20,0x70,0x6C,0x61,0x79,0x65,
- 0x72,0x20,0x74,0x69,0x63,0x6B,0x73,0x29,0x20,0x74,0x68,0x61,
- 0x74,0x20,0x77,0x69,0x6C,0x6C,0x20,0x62,0x79,0x70,0x61,0x73,
- 0x73,0x20,0x75,0x6E,0x74,0x69,0x6C,0x20,0x74,0x68,0x65,0x2D,
- 0x61,0x75,0x74,0x6F,0x2D,0x76,0x69,0x62,0x72,0x61,0x74,0x6F,
- 0x20,0x77,0x69,0x6C,0x6C,0x20,0x72,0x65,0x61,0x63,0x68,0x20,
- 0x69,0x74,0x27,0x73,0x20,0x66,0x69,0x6E,0x61,0x6C,0x20,0x61,
- 0x6D,0x70,0x6C,0x69,0x74,0x75,0x64,0x65,0x2E,0x00,0x1E,0x3E,
- 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x54,0x68,
- 0x65,0x20,0x70,0x69,0x61,0x6E,0x6F,0x20,0x6B,0x65,0x79,0x62,
- 0x6F,0x61,0x72,0x64,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
- 0x40,0x43,0x30,0x30,0x32,0x3F,0x3E,0x54,0x68,0x65,0x20,0x70,
+ 0x32,0x40,0x54,0x68,0x65,0x20,0x42,0x50,0x4D,0x20,0x73,0x65,
+ 0x74,0x74,0x69,0x6E,0x67,0x20,0x64,0x65,0x66,0x69,0x6E,0x65,
+ 0x73,0x20,0x68,0x6F,0x77,0x20,0x66,0x61,0x73,0x74,0x20,0x28,
+ 0x74,0x69,0x63,0x6B,0x73,0x2F,0x73,0x65,0x63,0x6F,0x6E,0x64,
+ 0x29,0x20,0x74,0x68,0x65,0x20,0x6D,0x75,0x73,0x69,0x63,0x20,
+ 0x70,0x6C,0x61,0x79,0x65,0x72,0x1C,0x77,0x69,0x6C,0x6C,0x20,
+ 0x72,0x75,0x6E,0x2E,0x20,0x31,0x32,0x35,0x20,0x42,0x50,0x4D,
+ 0x20,0x3C,0x2D,0x3E,0x20,0x35,0x30,0x20,0x48,0x7A,0x2E,0x28,
+ 0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,
+ 0x6C,0x61,0x79,0x65,0x72,0x20,0x74,0x69,0x63,0x6B,0x73,0x2F,
+ 0x73,0x65,0x63,0x6F,0x6E,0x64,0x20,0x3D,0x20,0x42,0x50,0x4D,
+ 0x2A,0x32,0x2F,0x35,0x00,0x16,0x3E,0x40,0x58,0x30,0x34,0x30,
+ 0x40,0x43,0x30,0x30,0x31,0x53,0x70,0x64,0x2C,0x20,0x53,0x70,
+ 0x65,0x65,0x64,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
+ 0x43,0x30,0x30,0x32,0x2C,0x53,0x70,0x65,0x65,0x64,0x20,0x3D,
+ 0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,
+ 0x6C,0x61,0x79,0x65,0x72,0x20,0x74,0x69,0x63,0x6B,0x73,0x2F,
+ 0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x6C,0x69,0x6E,0x65,
+ 0x2E,0x00,0x0F,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
+ 0x30,0x31,0x41,0x64,0x64,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,
+ 0x30,0x40,0x43,0x30,0x30,0x32,0x3E,0x22,0x41,0x64,0x64,0x22,
+ 0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x6E,0x75,0x6D,0x62,
+ 0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x61,0x74,0x74,0x65,0x72,
+ 0x6E,0x20,0x6C,0x69,0x6E,0x65,0x73,0x20,0x74,0x68,0x65,0x20,
+ 0x63,0x75,0x72,0x73,0x6F,0x72,0x20,0x6A,0x75,0x6D,0x70,0x73,
+ 0x20,0x77,0x68,0x65,0x6E,0x20,0x79,0x6F,0x75,0x0C,0x65,0x64,
+ 0x69,0x74,0x20,0x61,0x20,0x6E,0x6F,0x74,0x65,0x2E,0x00,0x0F,
+ 0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x50,
+ 0x74,0x6E,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
+ 0x30,0x30,0x32,0x1B,0x54,0x68,0x65,0x20,0x63,0x75,0x72,0x72,
+ 0x65,0x6E,0x74,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,
+ 0x6E,0x75,0x6D,0x62,0x65,0x72,0x2E,0x00,0x0E,0x3E,0x40,0x58,
+ 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x4C,0x6E,0x3A,0x0B,
+ 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x43,
+ 0x54,0x68,0x65,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,
+ 0x66,0x20,0x6C,0x69,0x6E,0x65,0x73,0x20,0x66,0x6F,0x72,0x20,
+ 0x74,0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,
+ 0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x2E,0x20,0x55,0x70,0x20,
+ 0x74,0x6F,0x20,0x24,0x31,0x30,0x30,0x20,0x6C,0x69,0x6E,0x65,
+ 0x73,0x2E,0x20,0x4E,0x6F,0x74,0x65,0x40,0x74,0x68,0x61,0x74,
+ 0x20,0x46,0x54,0x32,0x20,0x77,0x6F,0x6E,0x27,0x74,0x20,0x77,
+ 0x61,0x72,0x6E,0x20,0x79,0x6F,0x75,0x20,0x69,0x66,0x20,0x79,
+ 0x6F,0x75,0x20,0x64,0x65,0x63,0x72,0x65,0x61,0x73,0x65,0x20,
+ 0x74,0x68,0x69,0x73,0x20,0x76,0x61,0x6C,0x75,0x65,0x2E,0x20,
+ 0x54,0x68,0x65,0x20,0x6E,0x6F,0x74,0x65,0x73,0x20,0x61,0x74,
+ 0x37,0x74,0x68,0x65,0x20,0x62,0x6F,0x74,0x74,0x6F,0x6D,0x20,
+ 0x6C,0x69,0x6E,0x65,0x20,0x77,0x69,0x6C,0x6C,0x20,0x62,0x65,
+ 0x20,0x74,0x68,0x72,0x6F,0x77,0x6E,0x20,0x6F,0x75,0x74,0x20,
+ 0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x62,0x69,0x6E,0x61,0x72,
+ 0x79,0x20,0x73,0x70,0x61,0x63,0x65,0x2E,0x00,0x10,0x3E,0x40,
+ 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x45,0x78,0x70,
+ 0x64,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
+ 0x30,0x32,0x44,0x45,0x78,0x70,0x61,0x6E,0x64,0x20,0x70,0x61,
+ 0x74,0x74,0x65,0x72,0x6E,0x2E,0x20,0x49,0x6E,0x73,0x65,0x72,
+ 0x74,0x73,0x20,0x61,0x20,0x62,0x6C,0x61,0x6E,0x6B,0x20,0x6C,
+ 0x69,0x6E,0x65,0x20,0x61,0x66,0x74,0x65,0x72,0x20,0x65,0x61,
+ 0x63,0x68,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x6C,
+ 0x69,0x6E,0x65,0x2E,0x20,0x55,0x73,0x65,0x66,0x75,0x6C,0x3C,
+ 0x69,0x66,0x20,0x79,0x6F,0x75,0x20,0x77,0x61,0x6E,0x74,0x20,
+ 0x74,0x6F,0x20,0x63,0x6F,0x6E,0x76,0x65,0x72,0x74,0x20,0x61,
+ 0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x74,0x68,0x61,
+ 0x74,0x20,0x72,0x75,0x6E,0x73,0x20,0x69,0x6E,0x20,0x73,0x70,
+ 0x65,0x65,0x64,0x20,0x32,0x2A,0x78,0x20,0x74,0x6F,0x20,0x61,
+ 0x1D,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x74,0x68,0x61,
+ 0x74,0x20,0x72,0x75,0x6E,0x73,0x20,0x69,0x6E,0x20,0x73,0x70,
+ 0x65,0x65,0x64,0x20,0x78,0x2E,0x00,0x10,0x3E,0x40,0x58,0x30,
+ 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x68,0x6E,0x6B,0x3A,
+ 0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
+ 0x2E,0x53,0x68,0x72,0x69,0x6E,0x6B,0x20,0x70,0x61,0x74,0x74,
+ 0x65,0x72,0x6E,0x2E,0x20,0x44,0x65,0x6C,0x65,0x74,0x65,0x73,
+ 0x20,0x61,0x6C,0x6C,0x20,0x6F,0x64,0x64,0x20,0x70,0x61,0x74,
+ 0x74,0x65,0x72,0x6E,0x20,0x6C,0x69,0x6E,0x65,0x73,0x2E,0x00,
+ 0x2A,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
+ 0x54,0x68,0x65,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,
+ 0x6E,0x74,0x2F,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x73,0x65,
+ 0x6C,0x65,0x63,0x74,0x6F,0x72,0x3A,0x0B,0x3E,0x40,0x58,0x30,
+ 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3A,0x54,0x68,0x65,0x20,
+ 0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x74,
+ 0x68,0x61,0x74,0x20,0x68,0x61,0x73,0x20,0x61,0x20,0x6D,0x61,
+ 0x72,0x6B,0x20,0x6F,0x6E,0x20,0x69,0x74,0x27,0x73,0x20,0x6E,
+ 0x61,0x6D,0x65,0x20,0x73,0x74,0x72,0x69,0x6E,0x67,0x2C,0x20,
+ 0x69,0x73,0x20,0x74,0x68,0x65,0x17,0x64,0x65,0x73,0x74,0x69,
+ 0x6E,0x61,0x74,0x69,0x6F,0x6E,0x20,0x69,0x6E,0x73,0x74,0x72,
+ 0x75,0x6D,0x65,0x6E,0x74,0x2E,0x3D,0x3E,0x54,0x68,0x65,0x20,
+ 0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x74,
+ 0x68,0x61,0x74,0x20,0x68,0x61,0x73,0x20,0x61,0x20,0x6D,0x61,
+ 0x72,0x6B,0x20,0x6F,0x6E,0x20,0x69,0x74,0x27,0x73,0x20,0x6E,
+ 0x75,0x6D,0x62,0x65,0x72,0x2C,0x20,0x69,0x73,0x20,0x74,0x68,
+ 0x65,0x20,0x73,0x6F,0x75,0x72,0x63,0x65,0x0B,0x69,0x6E,0x73,
+ 0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x2E,0x1F,0x3E,0x54,0x68,
+ 0x65,0x20,0x73,0x61,0x6D,0x65,0x20,0x67,0x6F,0x65,0x73,0x20,
+ 0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x70,
+ 0x6C,0x65,0x73,0x2E,0x42,0x3E,0x59,0x6F,0x75,0x20,0x63,0x68,
+ 0x61,0x6E,0x67,0x65,0x20,0x74,0x68,0x65,0x20,0x6E,0x61,0x6D,
+ 0x65,0x20,0x6F,0x6E,0x20,0x61,0x6E,0x20,0x69,0x6E,0x73,0x74,
+ 0x72,0x75,0x6D,0x65,0x6E,0x74,0x2F,0x73,0x61,0x6D,0x70,0x6C,
+ 0x65,0x20,0x62,0x79,0x20,0x63,0x6C,0x69,0x63,0x6B,0x69,0x6E,
+ 0x67,0x20,0x74,0x68,0x65,0x20,0x72,0x69,0x67,0x68,0x74,0x07,
+ 0x62,0x75,0x74,0x74,0x6F,0x6E,0x2E,0x00,0x12,0x3E,0x40,0x58,
+ 0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x63,0x6F,0x70,
+ 0x65,0x73,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
+ 0x30,0x30,0x32,0x22,0x3E,0x4C,0x65,0x66,0x74,0x20,0x62,0x75,
+ 0x74,0x74,0x6F,0x6E,0x3A,0x20,0x54,0x75,0x72,0x6E,0x20,0x63,
+ 0x68,0x61,0x6E,0x6E,0x65,0x6C,0x20,0x6F,0x6E,0x2F,0x6F,0x66,
+ 0x66,0x2E,0x35,0x3E,0x52,0x69,0x67,0x68,0x74,0x20,0x62,0x75,
+ 0x74,0x74,0x6F,0x6E,0x3A,0x20,0x54,0x75,0x72,0x6E,0x20,0x63,
+ 0x68,0x61,0x6E,0x6E,0x65,0x6C,0x20,0x6D,0x75,0x6C,0x74,0x69,
+ 0x2D,0x72,0x65,0x63,0x6F,0x72,0x64,0x2F,0x65,0x64,0x69,0x74,
+ 0x20,0x6F,0x6E,0x2F,0x6F,0x66,0x66,0x2E,0x42,0x3E,0x4C,0x65,
+ 0x66,0x74,0x2B,0x72,0x69,0x67,0x68,0x74,0x20,0x62,0x75,0x74,
+ 0x74,0x6F,0x6E,0x3A,0x20,0x54,0x75,0x72,0x6E,0x20,0x61,0x6C,
+ 0x6C,0x20,0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x73,0x20,0x6F,
+ 0x66,0x66,0x20,0x65,0x78,0x63,0x65,0x70,0x74,0x20,0x74,0x68,
+ 0x65,0x20,0x73,0x65,0x6C,0x65,0x63,0x74,0x65,0x64,0x20,0x6F,
+ 0x6E,0x65,0x2E,0x00,0x1C,0x40,0x58,0x30,0x32,0x30,0x40,0x43,
+ 0x30,0x30,0x31,0x49,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,
+ 0x74,0x20,0x45,0x64,0x69,0x74,0x6F,0x72,0x3A,0x01,0x3E,0x22,
+ 0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x57,
+ 0x68,0x61,0x74,0x20,0x69,0x73,0x20,0x61,0x6E,0x20,0x69,0x6E,
+ 0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x3F,0x3A,0x0B,0x3E,
+ 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x1E,0x41,
+ 0x20,0x46,0x61,0x73,0x74,0x74,0x72,0x61,0x63,0x6B,0x65,0x72,
+ 0x20,0x32,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,
+ 0x74,0x20,0x69,0x73,0x3A,0x15,0x3E,0x20,0x20,0x20,0x31,0x20,
+ 0x56,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x65,0x6E,0x76,0x65,0x6C,
+ 0x6F,0x70,0x65,0x16,0x3E,0x20,0x20,0x20,0x31,0x20,0x50,0x61,
+ 0x6E,0x6E,0x69,0x6E,0x67,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,
+ 0x70,0x65,0x1D,0x3E,0x20,0x20,0x20,0x31,0x20,0x41,0x75,0x74,
+ 0x6F,0x2D,0x76,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x64,0x65,
+ 0x66,0x69,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x13,0x3E,0x20,0x20,
+ 0x20,0x31,0x2E,0x2E,0x31,0x36,0x20,0x53,0x61,0x6D,0x70,0x6C,
+ 0x65,0x28,0x73,0x29,0x1F,0x3E,0x20,0x20,0x20,0x31,0x20,0x4B,
+ 0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x20,0x73,0x70,0x6C,0x69,
+ 0x74,0x20,0x64,0x65,0x66,0x69,0x6E,0x69,0x74,0x69,0x6F,0x6E,
+ 0x15,0x3E,0x20,0x20,0x20,0x31,0x20,0x4D,0x49,0x44,0x49,0x20,
+ 0x64,0x65,0x66,0x69,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x00,0x1B,
+ 0x3E,0x41,0x20,0x46,0x61,0x73,0x74,0x74,0x72,0x61,0x63,0x6B,
+ 0x65,0x72,0x20,0x32,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,
+ 0x69,0x73,0x3A,0x29,0x3E,0x20,0x20,0x20,0x31,0x20,0x56,0x6F,
+ 0x6C,0x75,0x6D,0x65,0x2F,0x50,0x61,0x6E,0x6E,0x69,0x6E,0x67,
+ 0x2F,0x46,0x69,0x6E,0x65,0x2D,0x74,0x75,0x6E,0x65,0x20,0x64,
+ 0x65,0x66,0x69,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x14,0x3E,0x20,
+ 0x20,0x20,0x31,0x20,0x52,0x65,0x6C,0x61,0x74,0x69,0x76,0x65,
+ 0x20,0x74,0x6F,0x6E,0x65,0x2E,0x10,0x3E,0x20,0x20,0x20,0x31,
+ 0x20,0x57,0x61,0x76,0x65,0x20,0x66,0x6F,0x72,0x6D,0x2E,0x00,
+ 0x1F,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
+ 0x54,0x68,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x65,
+ 0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x3A,0x0B,0x3E,0x40,0x58,
+ 0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x40,0x3E,0x41,0x6E,
+ 0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x27,
+ 0x73,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x69,0x73,0x20,
+ 0x64,0x65,0x66,0x69,0x6E,0x65,0x64,0x20,0x62,0x79,0x20,0x69,
+ 0x74,0x73,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x20,
+ 0x63,0x75,0x72,0x76,0x65,0x2E,0x20,0x49,0x66,0x20,0x74,0x68,
+ 0x65,0x3E,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,
+ 0x20,0x68,0x61,0x73,0x20,0x61,0x20,0x73,0x75,0x73,0x74,0x61,
+ 0x69,0x6E,0x20,0x70,0x6F,0x69,0x6E,0x74,0x2C,0x20,0x74,0x68,
+ 0x65,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x20,0x77,
+ 0x69,0x6C,0x6C,0x20,0x73,0x74,0x6F,0x70,0x20,0x61,0x74,0x20,
+ 0x74,0x68,0x61,0x74,0x42,0x70,0x6F,0x69,0x6E,0x74,0x20,0x75,
+ 0x6E,0x74,0x69,0x6C,0x20,0x61,0x20,0x6B,0x65,0x79,0x2D,0x6F,
+ 0x66,0x66,0x20,0x6E,0x6F,0x74,0x65,0x20,0x68,0x61,0x73,0x20,
+ 0x62,0x65,0x65,0x6E,0x20,0x70,0x6C,0x61,0x79,0x65,0x64,0x2E,
+ 0x20,0x57,0x68,0x65,0x6E,0x20,0x61,0x20,0x6B,0x65,0x79,0x2D,
+ 0x6F,0x66,0x66,0x20,0x6E,0x6F,0x74,0x65,0x20,0x69,0x73,0x1D,
+ 0x70,0x6C,0x61,0x79,0x65,0x64,0x2C,0x20,0x74,0x68,0x65,0x20,
+ 0x22,0x66,0x61,0x64,0x65,0x6F,0x75,0x74,0x22,0x20,0x62,0x65,
+ 0x67,0x69,0x6E,0x73,0x2E,0x44,0x3E,0x4F,0x6E,0x65,0x20,0x70,
+ 0x69,0x78,0x65,0x6C,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,
+ 0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x20,0x77,0x69,0x6E,
+ 0x64,0x6F,0x77,0x20,0x63,0x6F,0x72,0x72,0x65,0x73,0x70,0x6F,
+ 0x6E,0x64,0x73,0x20,0x74,0x6F,0x20,0x6F,0x6E,0x65,0x20,0x70,
+ 0x6C,0x61,0x79,0x65,0x72,0x2D,0x74,0x69,0x63,0x6B,0x2E,0x20,
+ 0x49,0x66,0x3C,0x74,0x68,0x65,0x20,0x42,0x50,0x4D,0x20,0x69,
+ 0x73,0x20,0x31,0x32,0x35,0x2C,0x20,0x79,0x6F,0x75,0x27,0x6C,
+ 0x6C,0x20,0x63,0x6F,0x6E,0x73,0x75,0x6D,0x65,0x20,0x35,0x30,
+ 0x20,0x70,0x69,0x78,0x65,0x6C,0x2F,0x73,0x65,0x63,0x6F,0x6E,
+ 0x64,0x2E,0x20,0x54,0x68,0x65,0x20,0x77,0x69,0x6E,0x64,0x6F,
+ 0x77,0x27,0x73,0x1A,0x22,0x73,0x69,0x7A,0x65,0x22,0x20,0x69,
+ 0x73,0x20,0x61,0x62,0x6F,0x75,0x74,0x20,0x36,0x20,0x73,0x65,
+ 0x63,0x6F,0x6E,0x64,0x73,0x2E,0x3E,0x3E,0x49,0x66,0x20,0x79,
+ 0x6F,0x75,0x20,0x70,0x72,0x65,0x73,0x73,0x20,0x74,0x68,0x65,
+ 0x20,0x72,0x69,0x67,0x68,0x74,0x20,0x6D,0x6F,0x75,0x73,0x65,
+ 0x20,0x62,0x75,0x74,0x74,0x6F,0x6E,0x20,0x61,0x74,0x20,0x74,
+ 0x68,0x65,0x20,0x70,0x72,0x65,0x64,0x65,0x66,0x69,0x6E,0x65,
+ 0x20,0x62,0x75,0x74,0x74,0x6F,0x6E,0x73,0x2C,0x3F,0x79,0x6F,
+ 0x75,0x27,0x6C,0x6C,0x20,0x73,0x74,0x6F,0x72,0x65,0x20,0x74,
+ 0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x65,
+ 0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x20,0x69,0x6E,0x74,0x6F,
+ 0x20,0x74,0x68,0x61,0x74,0x20,0x70,0x72,0x65,0x64,0x65,0x66,
+ 0x69,0x6E,0x65,0x20,0x63,0x65,0x6C,0x6C,0x2E,0x20,0x54,0x68,
+ 0x65,0x30,0x70,0x72,0x65,0x64,0x65,0x66,0x69,0x6E,0x65,0x73,
+ 0x20,0x61,0x72,0x65,0x20,0x73,0x74,0x6F,0x72,0x65,0x64,0x20,
+ 0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x63,0x6F,0x6E,0x66,0x69,
+ 0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x66,0x69,0x6C,
+ 0x65,0x2E,0x43,0x3E,0x50,0x72,0x65,0x64,0x65,0x66,0x69,0x6E,
+ 0x65,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,0x31,0x20,0x69,
+ 0x73,0x20,0x74,0x68,0x65,0x20,0x64,0x65,0x66,0x61,0x75,0x6C,
+ 0x74,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x2E,0x20,
+ 0x54,0x68,0x69,0x73,0x20,0x6D,0x65,0x61,0x6E,0x73,0x20,0x74,
+ 0x68,0x61,0x74,0x20,0x69,0x66,0x20,0x79,0x6F,0x75,0x42,0x6C,
+ 0x6F,0x61,0x64,0x20,0x61,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,
+ 0x2C,0x20,0x69,0x74,0x20,0x77,0x69,0x6C,0x6C,0x20,0x67,0x65,
+ 0x74,0x20,0x61,0x6C,0x6C,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,
+ 0x70,0x65,0x20,0x69,0x6E,0x66,0x6F,0x72,0x6D,0x61,0x74,0x69,
+ 0x6F,0x6E,0x20,0x66,0x72,0x6F,0x6D,0x20,0x70,0x72,0x65,0x64,
+ 0x65,0x66,0x69,0x6E,0x65,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,
+ 0x20,0x31,0x2C,0x20,0x69,0x6E,0x63,0x6C,0x75,0x64,0x69,0x6E,
+ 0x67,0x20,0x74,0x68,0x65,0x20,0x76,0x69,0x62,0x72,0x61,0x74,
+ 0x6F,0x2E,0x42,0x3E,0x4E,0x6F,0x74,0x65,0x20,0x74,0x68,0x61,
+ 0x74,0x20,0x69,0x66,0x20,0x79,0x6F,0x75,0x20,0x74,0x75,0x72,
+ 0x6E,0x20,0x74,0x68,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,
+ 0x2D,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x20,0x6F,0x66,
+ 0x66,0x2C,0x20,0x79,0x6F,0x75,0x20,0x64,0x6F,0x6E,0x27,0x74,
+ 0x20,0x74,0x75,0x72,0x6E,0x20,0x74,0x68,0x65,0x0C,0x76,0x69,
+ 0x62,0x72,0x61,0x74,0x6F,0x20,0x6F,0x66,0x66,0x2E,0x00,0x20,
+ 0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x54,
+ 0x68,0x65,0x20,0x70,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x65,
+ 0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x3A,0x0B,0x3E,0x40,0x58,
+ 0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x40,0x3E,0x53,0x61,
+ 0x6D,0x65,0x20,0x61,0x73,0x20,0x61,0x62,0x6F,0x76,0x65,0x2C,
+ 0x20,0x65,0x78,0x63,0x65,0x70,0x74,0x20,0x66,0x72,0x6F,0x6D,
+ 0x20,0x74,0x68,0x61,0x74,0x20,0x74,0x68,0x65,0x20,0x76,0x69,
+ 0x62,0x72,0x61,0x74,0x6F,0x20,0x69,0x73,0x20,0x6E,0x6F,0x74,
+ 0x20,0x63,0x6F,0x6E,0x6E,0x65,0x63,0x74,0x65,0x64,0x20,0x74,
+ 0x6F,0x15,0x74,0x68,0x65,0x20,0x70,0x61,0x6E,0x6E,0x69,0x6E,
+ 0x67,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x2E,0x00,
+ 0x10,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
+ 0x54,0x75,0x6E,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
+ 0x40,0x43,0x30,0x30,0x32,0x3F,0x3E,0x54,0x68,0x65,0x20,0x66,
+ 0x69,0x6E,0x65,0x2D,0x74,0x75,0x6E,0x65,0x20,0x72,0x65,0x73,
+ 0x6F,0x6C,0x75,0x74,0x69,0x6F,0x6E,0x20,0x68,0x61,0x73,0x20,
+ 0x62,0x65,0x65,0x6E,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x64,
+ 0x20,0x66,0x72,0x6F,0x6D,0x20,0x61,0x20,0x73,0x69,0x67,0x6E,
+ 0x65,0x64,0x20,0x6E,0x69,0x62,0x62,0x6C,0x65,0x27,0x28,0x2D,
+ 0x38,0x2E,0x2E,0x2B,0x37,0x29,0x20,0x74,0x6F,0x20,0x61,0x20,
+ 0x73,0x69,0x67,0x6E,0x65,0x64,0x20,0x62,0x79,0x74,0x65,0x20,
+ 0x28,0x2D,0x31,0x32,0x38,0x2E,0x2E,0x2B,0x31,0x32,0x37,0x29,
+ 0x2E,0x00,0x13,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
+ 0x30,0x31,0x46,0x61,0x64,0x65,0x6F,0x75,0x74,0x3A,0x0B,0x3E,
+ 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x1B,0x3E,
+ 0x54,0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,
+ 0x66,0x61,0x64,0x65,0x6F,0x75,0x74,0x20,0x73,0x70,0x65,0x65,
+ 0x64,0x2E,0x00,0x19,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,
+ 0x30,0x30,0x31,0x56,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x73,
+ 0x77,0x65,0x65,0x70,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
+ 0x40,0x43,0x30,0x30,0x32,0x3E,0x3E,0x54,0x68,0x69,0x73,0x20,
+ 0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x74,0x69,0x6D,0x65,0x20,
+ 0x28,0x69,0x6E,0x20,0x70,0x6C,0x61,0x79,0x65,0x72,0x20,0x74,
+ 0x69,0x63,0x6B,0x73,0x29,0x20,0x74,0x68,0x61,0x74,0x20,0x77,
+ 0x69,0x6C,0x6C,0x20,0x62,0x79,0x70,0x61,0x73,0x73,0x20,0x75,
+ 0x6E,0x74,0x69,0x6C,0x20,0x74,0x68,0x65,0x2D,0x61,0x75,0x74,
+ 0x6F,0x2D,0x76,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x77,0x69,
+ 0x6C,0x6C,0x20,0x72,0x65,0x61,0x63,0x68,0x20,0x69,0x74,0x27,
+ 0x73,0x20,0x66,0x69,0x6E,0x61,0x6C,0x20,0x61,0x6D,0x70,0x6C,
+ 0x69,0x74,0x75,0x64,0x65,0x2E,0x00,0x1E,0x3E,0x40,0x58,0x30,
+ 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x54,0x68,0x65,0x20,0x70,
0x69,0x61,0x6E,0x6F,0x20,0x6B,0x65,0x79,0x62,0x6F,0x61,0x72,
- 0x64,0x20,0x64,0x65,0x66,0x69,0x6E,0x65,0x73,0x20,0x74,0x68,
- 0x65,0x20,0x6B,0x65,0x79,0x20,0x73,0x70,0x6C,0x69,0x74,0x20,
- 0x66,0x6F,0x72,0x20,0x61,0x6E,0x20,0x69,0x6E,0x73,0x74,0x72,
- 0x75,0x6D,0x65,0x6E,0x74,0x2E,0x20,0x54,0x6F,0x3F,0x63,0x68,
- 0x61,0x6E,0x67,0x65,0x20,0x74,0x68,0x65,0x20,0x6B,0x65,0x79,
- 0x20,0x73,0x70,0x6C,0x69,0x74,0x2C,0x20,0x63,0x68,0x6F,0x6F,
- 0x73,0x65,0x20,0x61,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,
- 0x77,0x69,0x74,0x68,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x69,
- 0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x61,0x6E,
- 0x64,0x1C,0x74,0x68,0x65,0x6E,0x20,0x22,0x64,0x72,0x61,0x77,
- 0x22,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x20,0x6B,0x65,0x79,
- 0x62,0x6F,0x61,0x72,0x64,0x2E,0x42,0x3E,0x54,0x68,0x65,0x20,
- 0x6E,0x6F,0x74,0x65,0x73,0x20,0x70,0x6C,0x61,0x79,0x65,0x64,
- 0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x68,0x65,0x20,0x63,0x75,
- 0x72,0x72,0x65,0x6E,0x74,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,
- 0x6D,0x65,0x6E,0x74,0x20,0x61,0x72,0x65,0x20,0x69,0x6E,0x64,
- 0x69,0x63,0x61,0x74,0x65,0x64,0x20,0x6F,0x6E,0x20,0x74,0x68,
- 0x65,0x09,0x6B,0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x2E,0x00,
- 0x1A,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
- 0x49,0x6D,0x70,0x6F,0x72,0x74,0x61,0x6E,0x74,0x20,0x6E,0x6F,
- 0x74,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
- 0x30,0x30,0x32,0x40,0x3E,0x54,0x68,0x65,0x20,0x76,0x6F,0x6C,
- 0x75,0x6D,0x65,0x2C,0x20,0x70,0x61,0x6E,0x6E,0x69,0x6E,0x67,
- 0x2C,0x20,0x74,0x75,0x6E,0x65,0x20,0x61,0x6E,0x64,0x20,0x72,
- 0x65,0x6C,0x61,0x74,0x69,0x76,0x65,0x20,0x74,0x6F,0x6E,0x65,
- 0x20,0x69,0x73,0x20,0x64,0x65,0x66,0x69,0x6E,0x65,0x64,0x20,
- 0x66,0x6F,0x72,0x20,0x45,0x41,0x43,0x48,0x41,0x53,0x41,0x4D,
- 0x50,0x4C,0x45,0x20,0x69,0x6E,0x20,0x61,0x6E,0x20,0x69,0x6E,
- 0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x2E,0x20,0x41,0x6C,
- 0x6C,0x20,0x6F,0x74,0x68,0x65,0x72,0x20,0x69,0x6E,0x66,0x6F,
- 0x72,0x6D,0x61,0x74,0x69,0x6F,0x6E,0x20,0x69,0x73,0x20,0x64,
- 0x65,0x66,0x69,0x6E,0x65,0x64,0x20,0x66,0x6F,0x72,0x20,0x74,
- 0x68,0x65,0x12,0x65,0x6E,0x74,0x69,0x72,0x65,0x20,0x69,0x6E,
- 0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x2E,0x00,0x31,0x40,
- 0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,0x49,0x6E,0x73,
- 0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x45,0x64,0x69,0x74,
- 0x6F,0x72,0x20,0x45,0x78,0x74,0x65,0x6E,0x73,0x69,0x6F,0x6E,
- 0x3A,0x20,0x28,0x49,0x2E,0x45,0x2E,0x45,0x78,0x74,0x2E,0x29,
- 0x01,0x3E,0x10,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
- 0x30,0x31,0x4D,0x49,0x44,0x49,0x3A,0x0B,0x3E,0x40,0x58,0x30,
- 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x28,0x3E,0x27,0x70,0x2E,
- 0x27,0x20,0x73,0x74,0x61,0x6E,0x64,0x73,0x20,0x66,0x6F,0x72,
- 0x20,0x22,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x22,0x20,0x28,
- 0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x29,0x2E,
- 0x40,0x3E,0x53,0x65,0x76,0x65,0x72,0x61,0x6C,0x20,0x69,0x6E,
- 0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x73,0x20,0x63,0x61,
- 0x6E,0x20,0x68,0x61,0x76,0x65,0x20,0x74,0x68,0x65,0x20,0x73,
- 0x61,0x6D,0x65,0x20,0x74,0x72,0x61,0x6E,0x73,0x6D,0x69,0x74,
- 0x20,0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x20,0x62,0x75,0x74,
- 0x20,0x77,0x69,0x74,0x68,0x33,0x64,0x69,0x66,0x66,0x65,0x72,
- 0x65,0x6E,0x74,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x73,
- 0x2E,0x20,0x46,0x54,0x32,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,
- 0x73,0x20,0x74,0x68,0x65,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,
- 0x6D,0x73,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x43,0x4D,0x49,
- 0x44,0x49,0x2D,0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x73,0x20,
- 0x69,0x6E,0x73,0x74,0x61,0x6E,0x74,0x6C,0x79,0x20,0x64,0x75,
- 0x72,0x69,0x6E,0x67,0x20,0x70,0x6C,0x61,0x79,0x20,0x69,0x66,
- 0x20,0x64,0x69,0x66,0x66,0x65,0x72,0x65,0x6E,0x74,0x20,0x70,
- 0x72,0x6F,0x67,0x72,0x61,0x6D,0x73,0x20,0x61,0x72,0x65,0x20,
- 0x75,0x73,0x65,0x64,0x2E,0x3E,0x44,0x69,0x66,0x66,0x65,0x72,
- 0x65,0x6E,0x74,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x73,
- 0x20,0x63,0x61,0x6E,0x6E,0x6F,0x74,0x20,0x62,0x65,0x20,0x70,
- 0x6C,0x61,0x79,0x65,0x64,0x20,0x61,0x74,0x20,0x74,0x68,0x65,
- 0x20,0x73,0x61,0x6D,0x65,0x20,0x63,0x68,0x61,0x6E,0x6E,0x65,
- 0x6C,0x20,0x61,0x74,0x20,0x74,0x68,0x65,0x11,0x73,0x61,0x6D,
- 0x65,0x20,0x74,0x69,0x6D,0x65,0x20,0x74,0x68,0x6F,0x75,0x67,
- 0x68,0x2E,0x44,0x3E,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x63,
- 0x68,0x61,0x6E,0x67,0x65,0x20,0x74,0x68,0x69,0x73,0x20,0x76,
- 0x61,0x6C,0x75,0x65,0x2C,0x20,0x74,0x68,0x65,0x20,0x70,0x72,
- 0x6F,0x67,0x72,0x61,0x6D,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,
- 0x20,0x77,0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x74,0x72,0x61,
- 0x6E,0x73,0x6D,0x69,0x74,0x74,0x65,0x64,0x20,0x74,0x6F,0x1C,
- 0x74,0x68,0x65,0x20,0x73,0x79,0x6E,0x74,0x68,0x65,0x73,0x69,
- 0x7A,0x65,0x72,0x20,0x69,0x6D,0x6D,0x65,0x64,0x69,0x61,0x74,
- 0x65,0x6C,0x79,0x2E,0x3E,0x3E,0x53,0x6F,0x6D,0x65,0x20,0x73,
- 0x79,0x6E,0x74,0x68,0x65,0x73,0x69,0x7A,0x65,0x72,0x73,0x20,
- 0x74,0x72,0x61,0x6E,0x73,0x6D,0x69,0x74,0x20,0x70,0x72,0x6F,
- 0x67,0x72,0x61,0x6D,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x20,
- 0x69,0x6E,0x66,0x6F,0x72,0x6D,0x61,0x74,0x69,0x6F,0x6E,0x2E,
- 0x20,0x49,0x66,0x20,0x74,0x68,0x65,0x43,0x63,0x75,0x72,0x72,
- 0x65,0x6E,0x74,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,
- 0x6E,0x74,0x20,0x69,0x6E,0x20,0x46,0x54,0x32,0x20,0x69,0x73,
- 0x20,0x61,0x20,0x4D,0x49,0x44,0x49,0x2D,0x69,0x6E,0x73,0x74,
- 0x72,0x2E,0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x68,0x65,0x20,
- 0x73,0x61,0x6D,0x65,0x20,0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,
- 0x20,0x61,0x73,0x3F,0x74,0x68,0x65,0x20,0x72,0x65,0x63,0x65,
- 0x69,0x76,0x65,0x64,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,
- 0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x2C,0x20,0x69,0x74,0x27,
- 0x73,0x20,0x4D,0x49,0x44,0x49,0x2D,0x70,0x72,0x6F,0x67,0x72,
- 0x61,0x6D,0x20,0x77,0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x63,
- 0x68,0x61,0x6E,0x67,0x65,0x64,0x2E,0x40,0x3E,0x49,0x66,0x20,
- 0x79,0x6F,0x75,0x72,0x20,0x73,0x79,0x6E,0x74,0x68,0x65,0x73,
- 0x69,0x7A,0x65,0x72,0x20,0x64,0x6F,0x65,0x73,0x6E,0x27,0x74,
- 0x20,0x74,0x72,0x61,0x6E,0x73,0x6D,0x69,0x74,0x20,0x70,0x72,
- 0x6F,0x67,0x72,0x61,0x6D,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,
- 0x2C,0x20,0x74,0x68,0x65,0x72,0x65,0x27,0x73,0x20,0x6E,0x6F,
- 0x3E,0x70,0x6F,0x69,0x6E,0x74,0x20,0x69,0x6E,0x20,0x63,0x68,
- 0x61,0x6E,0x67,0x69,0x6E,0x67,0x20,0x69,0x74,0x20,0x6F,0x6E,
- 0x20,0x74,0x68,0x65,0x20,0x73,0x79,0x6E,0x74,0x68,0x65,0x73,
- 0x69,0x7A,0x65,0x72,0x2C,0x20,0x64,0x6F,0x20,0x69,0x74,0x20,
- 0x69,0x6E,0x20,0x46,0x54,0x32,0x20,0x69,0x6E,0x73,0x74,0x65,
- 0x61,0x64,0x2E,0x00,0x18,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,
- 0x43,0x30,0x30,0x31,0x42,0x65,0x6E,0x64,0x65,0x72,0x20,0x72,
- 0x61,0x6E,0x67,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
- 0x40,0x43,0x30,0x30,0x32,0x38,0x3E,0x54,0x68,0x69,0x73,0x20,
- 0x76,0x61,0x6C,0x75,0x65,0x20,0x64,0x65,0x66,0x69,0x6E,0x65,
- 0x73,0x20,0x68,0x6F,0x77,0x20,0x6D,0x61,0x6E,0x79,0x20,0x6E,
- 0x6F,0x74,0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x69,0x6E,0x73,
- 0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x6F,0x6E,0x20,0x74,
- 0x68,0x65,0x37,0x73,0x79,0x6E,0x74,0x68,0x65,0x73,0x69,0x7A,
- 0x65,0x72,0x20,0x63,0x61,0x6E,0x20,0x62,0x65,0x20,0x70,0x69,
- 0x74,0x63,0x68,0x62,0x65,0x6E,0x64,0x65,0x64,0x2E,0x20,0x46,
- 0x54,0x32,0x20,0x75,0x73,0x65,0x73,0x20,0x74,0x68,0x69,0x73,
- 0x20,0x76,0x61,0x6C,0x75,0x65,0x20,0x66,0x6F,0x72,0x37,0x74,
- 0x72,0x61,0x6E,0x73,0x6D,0x69,0x74,0x74,0x69,0x6E,0x67,0x20,
- 0x74,0x68,0x65,0x20,0x70,0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,
- 0x74,0x6F,0x20,0x75,0x70,0x2F,0x64,0x6F,0x77,0x6E,0x20,0x61,
- 0x6E,0x64,0x20,0x74,0x6F,0x6E,0x65,0x2D,0x70,0x6F,0x72,0x74,
- 0x61,0x6D,0x65,0x6E,0x74,0x6F,0x13,0x63,0x6F,0x6D,0x6D,0x61,
- 0x6E,0x64,0x73,0x20,0x63,0x6F,0x72,0x72,0x65,0x63,0x74,0x6C,
- 0x79,0x2E,0x45,0x3E,0x54,0x68,0x65,0x20,0x4D,0x49,0x44,0x49,
- 0x2D,0x70,0x69,0x74,0x63,0x68,0x62,0x65,0x6E,0x64,0x20,0x77,
- 0x6F,0x72,0x6B,0x73,0x20,0x63,0x6F,0x72,0x72,0x65,0x63,0x74,
- 0x6C,0x79,0x20,0x6F,0x6E,0x6C,0x79,0x20,0x77,0x69,0x74,0x68,
- 0x20,0x6C,0x69,0x6E,0x65,0x61,0x72,0x20,0x66,0x72,0x65,0x71,
- 0x75,0x65,0x6E,0x63,0x79,0x20,0x74,0x61,0x62,0x6C,0x65,0x2E,
- 0x00,0x18,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,
- 0x53,0x61,0x6D,0x70,0x6C,0x65,0x20,0x45,0x64,0x69,0x74,0x6F,
- 0x72,0x3A,0x01,0x3E,0x2C,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,
- 0x43,0x30,0x30,0x31,0x50,0x6C,0x61,0x79,0x20,0x28,0x57,0x61,
- 0x76,0x65,0x20,0x66,0x6F,0x72,0x6D,0x2C,0x20,0x72,0x61,0x6E,
- 0x67,0x65,0x2C,0x20,0x64,0x69,0x73,0x70,0x6C,0x61,0x79,0x29,
- 0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,
- 0x32,0x3C,0x3E,0x50,0x6C,0x61,0x79,0x73,0x20,0x74,0x68,0x65,
- 0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x73,0x61,0x6D,
- 0x70,0x6C,0x65,0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x6F,0x6E,
- 0x65,0x20,0x64,0x69,0x73,0x70,0x6C,0x61,0x79,0x20,0x61,0x62,
- 0x6F,0x76,0x65,0x20,0x74,0x68,0x65,0x20,0x22,0x73,0x74,0x6F,
- 0x70,0x22,0x3D,0x62,0x75,0x74,0x74,0x6F,0x6E,0x2E,0x20,0x4E,
- 0x6F,0x74,0x65,0x20,0x74,0x68,0x61,0x74,0x20,0x72,0x65,0x73,
- 0x70,0x65,0x63,0x74,0x20,0x69,0x73,0x20,0x74,0x61,0x6B,0x65,
- 0x6E,0x20,0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x70,0x61,0x72,
- 0x74,0x69,0x63,0x75,0x6C,0x61,0x72,0x20,0x73,0x61,0x6D,0x70,
- 0x6C,0x65,0x27,0x73,0x0E,0x72,0x65,0x6C,0x61,0x74,0x69,0x76,
- 0x65,0x20,0x74,0x6F,0x6E,0x65,0x2E,0x00,0x16,0x3E,0x40,0x58,
- 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x61,0x76,0x65,
- 0x20,0x72,0x61,0x6E,0x67,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,
- 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3C,0x3E,0x53,0x74,0x6F,
- 0x72,0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x72,0x61,0x6E,0x67,
- 0x65,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x69,0x65,0x64,0x20,
- 0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,
- 0x6E,0x74,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x64,0x69,
- 0x72,0x65,0x63,0x74,0x6F,0x72,0x79,0x2E,0x00,0x11,0x3E,0x40,
- 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x50,0x61,0x73,
- 0x74,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
- 0x30,0x30,0x32,0x40,0x3E,0x54,0x68,0x65,0x20,0x73,0x61,0x6D,
- 0x70,0x6C,0x65,0x20,0x64,0x61,0x74,0x61,0x20,0x69,0x6E,0x20,
- 0x74,0x68,0x65,0x20,0x63,0x6F,0x70,0x79,0x20,0x62,0x75,0x66,
- 0x66,0x65,0x72,0x20,0x69,0x73,0x20,0x73,0x74,0x6F,0x72,0x65,
- 0x64,0x20,0x49,0x4E,0x54,0x4F,0x20,0x74,0x68,0x65,0x20,0x73,
- 0x70,0x65,0x63,0x69,0x66,0x69,0x65,0x64,0x06,0x72,0x61,0x6E,
- 0x67,0x65,0x2E,0x00,0x10,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,
- 0x43,0x30,0x30,0x31,0x43,0x72,0x6F,0x70,0x3A,0x0B,0x3E,0x40,
- 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3E,0x3E,0x43,
- 0x75,0x74,0x73,0x20,0x65,0x76,0x65,0x72,0x79,0x74,0x68,0x69,
- 0x6E,0x67,0x20,0x62,0x75,0x74,0x20,0x74,0x68,0x65,0x20,0x72,
- 0x61,0x6E,0x67,0x65,0x2E,0x20,0x4E,0x6F,0x74,0x68,0x69,0x6E,
- 0x67,0x20,0x69,0x73,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x64,
- 0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x63,0x6F,0x70,0x79,
- 0x19,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x62,0x79,0x20,0x74,
- 0x68,0x69,0x73,0x20,0x6F,0x70,0x65,0x72,0x61,0x74,0x69,0x6F,
- 0x6E,0x2E,0x00,0x12,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,
- 0x30,0x30,0x31,0x56,0x6F,0x6C,0x75,0x6D,0x65,0x3A,0x0B,0x3E,
- 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x17,0x3E,
- 0x4F,0x70,0x65,0x72,0x61,0x74,0x65,0x73,0x20,0x6F,0x6E,0x20,
- 0x74,0x68,0x65,0x20,0x72,0x61,0x6E,0x67,0x65,0x2E,0x00,0x12,
- 0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x58,
- 0x2D,0x46,0x61,0x64,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,
+ 0x64,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
+ 0x30,0x32,0x3F,0x3E,0x54,0x68,0x65,0x20,0x70,0x69,0x61,0x6E,
+ 0x6F,0x20,0x6B,0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x20,0x64,
+ 0x65,0x66,0x69,0x6E,0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x6B,
+ 0x65,0x79,0x20,0x73,0x70,0x6C,0x69,0x74,0x20,0x66,0x6F,0x72,
+ 0x20,0x61,0x6E,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,
+ 0x6E,0x74,0x2E,0x20,0x54,0x6F,0x3F,0x63,0x68,0x61,0x6E,0x67,
+ 0x65,0x20,0x74,0x68,0x65,0x20,0x6B,0x65,0x79,0x20,0x73,0x70,
+ 0x6C,0x69,0x74,0x2C,0x20,0x63,0x68,0x6F,0x6F,0x73,0x65,0x20,
+ 0x61,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x77,0x69,0x74,
+ 0x68,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x69,0x6E,0x73,0x74,
+ 0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x61,0x6E,0x64,0x1C,0x74,
+ 0x68,0x65,0x6E,0x20,0x22,0x64,0x72,0x61,0x77,0x22,0x20,0x6F,
+ 0x6E,0x20,0x74,0x68,0x65,0x20,0x6B,0x65,0x79,0x62,0x6F,0x61,
+ 0x72,0x64,0x2E,0x42,0x3E,0x54,0x68,0x65,0x20,0x6E,0x6F,0x74,
+ 0x65,0x73,0x20,0x70,0x6C,0x61,0x79,0x65,0x64,0x20,0x77,0x69,
+ 0x74,0x68,0x20,0x74,0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,
+ 0x6E,0x74,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,
+ 0x74,0x20,0x61,0x72,0x65,0x20,0x69,0x6E,0x64,0x69,0x63,0x61,
+ 0x74,0x65,0x64,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x09,0x6B,
+ 0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x2E,0x00,0x1A,0x3E,0x40,
+ 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x49,0x6D,0x70,
+ 0x6F,0x72,0x74,0x61,0x6E,0x74,0x20,0x6E,0x6F,0x74,0x65,0x3A,
+ 0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
+ 0x40,0x3E,0x54,0x68,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,
+ 0x2C,0x20,0x70,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x2C,0x20,0x74,
+ 0x75,0x6E,0x65,0x20,0x61,0x6E,0x64,0x20,0x72,0x65,0x6C,0x61,
+ 0x74,0x69,0x76,0x65,0x20,0x74,0x6F,0x6E,0x65,0x20,0x69,0x73,
+ 0x20,0x64,0x65,0x66,0x69,0x6E,0x65,0x64,0x20,0x66,0x6F,0x72,
+ 0x20,0x45,0x41,0x43,0x48,0x41,0x53,0x41,0x4D,0x50,0x4C,0x45,
+ 0x20,0x69,0x6E,0x20,0x61,0x6E,0x20,0x69,0x6E,0x73,0x74,0x72,
+ 0x75,0x6D,0x65,0x6E,0x74,0x2E,0x20,0x41,0x6C,0x6C,0x20,0x6F,
+ 0x74,0x68,0x65,0x72,0x20,0x69,0x6E,0x66,0x6F,0x72,0x6D,0x61,
+ 0x74,0x69,0x6F,0x6E,0x20,0x69,0x73,0x20,0x64,0x65,0x66,0x69,
+ 0x6E,0x65,0x64,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x12,
+ 0x65,0x6E,0x74,0x69,0x72,0x65,0x20,0x69,0x6E,0x73,0x74,0x72,
+ 0x75,0x6D,0x65,0x6E,0x74,0x2E,0x00,0x31,0x40,0x58,0x30,0x32,
+ 0x30,0x40,0x43,0x30,0x30,0x31,0x49,0x6E,0x73,0x74,0x72,0x75,
+ 0x6D,0x65,0x6E,0x74,0x20,0x45,0x64,0x69,0x74,0x6F,0x72,0x20,
+ 0x45,0x78,0x74,0x65,0x6E,0x73,0x69,0x6F,0x6E,0x3A,0x20,0x28,
+ 0x49,0x2E,0x45,0x2E,0x45,0x78,0x74,0x2E,0x29,0x01,0x3E,0x10,
+ 0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x4D,
+ 0x49,0x44,0x49,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
+ 0x43,0x30,0x30,0x32,0x28,0x3E,0x27,0x70,0x2E,0x27,0x20,0x73,
+ 0x74,0x61,0x6E,0x64,0x73,0x20,0x66,0x6F,0x72,0x20,0x22,0x70,
+ 0x72,0x6F,0x67,0x72,0x61,0x6D,0x22,0x20,0x28,0x69,0x6E,0x73,
+ 0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x29,0x2E,0x40,0x3E,0x53,
+ 0x65,0x76,0x65,0x72,0x61,0x6C,0x20,0x69,0x6E,0x73,0x74,0x72,
+ 0x75,0x6D,0x65,0x6E,0x74,0x73,0x20,0x63,0x61,0x6E,0x20,0x68,
+ 0x61,0x76,0x65,0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x65,
+ 0x20,0x74,0x72,0x61,0x6E,0x73,0x6D,0x69,0x74,0x20,0x63,0x68,
+ 0x61,0x6E,0x6E,0x65,0x6C,0x20,0x62,0x75,0x74,0x20,0x77,0x69,
+ 0x74,0x68,0x33,0x64,0x69,0x66,0x66,0x65,0x72,0x65,0x6E,0x74,
+ 0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x73,0x2E,0x20,0x46,
+ 0x54,0x32,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x73,0x20,0x74,
+ 0x68,0x65,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x73,0x20,
+ 0x6F,0x6E,0x20,0x74,0x68,0x65,0x43,0x4D,0x49,0x44,0x49,0x2D,
+ 0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x73,0x20,0x69,0x6E,0x73,
+ 0x74,0x61,0x6E,0x74,0x6C,0x79,0x20,0x64,0x75,0x72,0x69,0x6E,
+ 0x67,0x20,0x70,0x6C,0x61,0x79,0x20,0x69,0x66,0x20,0x64,0x69,
+ 0x66,0x66,0x65,0x72,0x65,0x6E,0x74,0x20,0x70,0x72,0x6F,0x67,
+ 0x72,0x61,0x6D,0x73,0x20,0x61,0x72,0x65,0x20,0x75,0x73,0x65,
+ 0x64,0x2E,0x3E,0x44,0x69,0x66,0x66,0x65,0x72,0x65,0x6E,0x74,
+ 0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x73,0x20,0x63,0x61,
+ 0x6E,0x6E,0x6F,0x74,0x20,0x62,0x65,0x20,0x70,0x6C,0x61,0x79,
+ 0x65,0x64,0x20,0x61,0x74,0x20,0x74,0x68,0x65,0x20,0x73,0x61,
+ 0x6D,0x65,0x20,0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x20,0x61,
+ 0x74,0x20,0x74,0x68,0x65,0x11,0x73,0x61,0x6D,0x65,0x20,0x74,
+ 0x69,0x6D,0x65,0x20,0x74,0x68,0x6F,0x75,0x67,0x68,0x2E,0x44,
+ 0x3E,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x63,0x68,0x61,0x6E,
+ 0x67,0x65,0x20,0x74,0x68,0x69,0x73,0x20,0x76,0x61,0x6C,0x75,
+ 0x65,0x2C,0x20,0x74,0x68,0x65,0x20,0x70,0x72,0x6F,0x67,0x72,
+ 0x61,0x6D,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,0x77,0x69,
+ 0x6C,0x6C,0x20,0x62,0x65,0x20,0x74,0x72,0x61,0x6E,0x73,0x6D,
+ 0x69,0x74,0x74,0x65,0x64,0x20,0x74,0x6F,0x1C,0x74,0x68,0x65,
+ 0x20,0x73,0x79,0x6E,0x74,0x68,0x65,0x73,0x69,0x7A,0x65,0x72,
+ 0x20,0x69,0x6D,0x6D,0x65,0x64,0x69,0x61,0x74,0x65,0x6C,0x79,
+ 0x2E,0x3E,0x3E,0x53,0x6F,0x6D,0x65,0x20,0x73,0x79,0x6E,0x74,
+ 0x68,0x65,0x73,0x69,0x7A,0x65,0x72,0x73,0x20,0x74,0x72,0x61,
+ 0x6E,0x73,0x6D,0x69,0x74,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,
+ 0x6D,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x20,0x69,0x6E,0x66,
+ 0x6F,0x72,0x6D,0x61,0x74,0x69,0x6F,0x6E,0x2E,0x20,0x49,0x66,
+ 0x20,0x74,0x68,0x65,0x43,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,
+ 0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,
+ 0x69,0x6E,0x20,0x46,0x54,0x32,0x20,0x69,0x73,0x20,0x61,0x20,
+ 0x4D,0x49,0x44,0x49,0x2D,0x69,0x6E,0x73,0x74,0x72,0x2E,0x20,
+ 0x77,0x69,0x74,0x68,0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,
+ 0x65,0x20,0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x20,0x61,0x73,
+ 0x3F,0x74,0x68,0x65,0x20,0x72,0x65,0x63,0x65,0x69,0x76,0x65,
+ 0x64,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,0x63,0x68,
+ 0x61,0x6E,0x67,0x65,0x2C,0x20,0x69,0x74,0x27,0x73,0x20,0x4D,
+ 0x49,0x44,0x49,0x2D,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,
+ 0x77,0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x63,0x68,0x61,0x6E,
+ 0x67,0x65,0x64,0x2E,0x40,0x3E,0x49,0x66,0x20,0x79,0x6F,0x75,
+ 0x72,0x20,0x73,0x79,0x6E,0x74,0x68,0x65,0x73,0x69,0x7A,0x65,
+ 0x72,0x20,0x64,0x6F,0x65,0x73,0x6E,0x27,0x74,0x20,0x74,0x72,
+ 0x61,0x6E,0x73,0x6D,0x69,0x74,0x20,0x70,0x72,0x6F,0x67,0x72,
+ 0x61,0x6D,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x2C,0x20,0x74,
+ 0x68,0x65,0x72,0x65,0x27,0x73,0x20,0x6E,0x6F,0x3E,0x70,0x6F,
+ 0x69,0x6E,0x74,0x20,0x69,0x6E,0x20,0x63,0x68,0x61,0x6E,0x67,
+ 0x69,0x6E,0x67,0x20,0x69,0x74,0x20,0x6F,0x6E,0x20,0x74,0x68,
+ 0x65,0x20,0x73,0x79,0x6E,0x74,0x68,0x65,0x73,0x69,0x7A,0x65,
+ 0x72,0x2C,0x20,0x64,0x6F,0x20,0x69,0x74,0x20,0x69,0x6E,0x20,
+ 0x46,0x54,0x32,0x20,0x69,0x6E,0x73,0x74,0x65,0x61,0x64,0x2E,
+ 0x00,0x18,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
+ 0x31,0x42,0x65,0x6E,0x64,0x65,0x72,0x20,0x72,0x61,0x6E,0x67,
+ 0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
+ 0x30,0x32,0x38,0x3E,0x54,0x68,0x69,0x73,0x20,0x76,0x61,0x6C,
+ 0x75,0x65,0x20,0x64,0x65,0x66,0x69,0x6E,0x65,0x73,0x20,0x68,
+ 0x6F,0x77,0x20,0x6D,0x61,0x6E,0x79,0x20,0x6E,0x6F,0x74,0x65,
+ 0x73,0x20,0x74,0x68,0x65,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,
+ 0x6D,0x65,0x6E,0x74,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x37,
+ 0x73,0x79,0x6E,0x74,0x68,0x65,0x73,0x69,0x7A,0x65,0x72,0x20,
+ 0x63,0x61,0x6E,0x20,0x62,0x65,0x20,0x70,0x69,0x74,0x63,0x68,
+ 0x62,0x65,0x6E,0x64,0x65,0x64,0x2E,0x20,0x46,0x54,0x32,0x20,
+ 0x75,0x73,0x65,0x73,0x20,0x74,0x68,0x69,0x73,0x20,0x76,0x61,
+ 0x6C,0x75,0x65,0x20,0x66,0x6F,0x72,0x37,0x74,0x72,0x61,0x6E,
+ 0x73,0x6D,0x69,0x74,0x74,0x69,0x6E,0x67,0x20,0x74,0x68,0x65,
+ 0x20,0x70,0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,
+ 0x75,0x70,0x2F,0x64,0x6F,0x77,0x6E,0x20,0x61,0x6E,0x64,0x20,
+ 0x74,0x6F,0x6E,0x65,0x2D,0x70,0x6F,0x72,0x74,0x61,0x6D,0x65,
+ 0x6E,0x74,0x6F,0x13,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x73,
+ 0x20,0x63,0x6F,0x72,0x72,0x65,0x63,0x74,0x6C,0x79,0x2E,0x45,
+ 0x3E,0x54,0x68,0x65,0x20,0x4D,0x49,0x44,0x49,0x2D,0x70,0x69,
+ 0x74,0x63,0x68,0x62,0x65,0x6E,0x64,0x20,0x77,0x6F,0x72,0x6B,
+ 0x73,0x20,0x63,0x6F,0x72,0x72,0x65,0x63,0x74,0x6C,0x79,0x20,
+ 0x6F,0x6E,0x6C,0x79,0x20,0x77,0x69,0x74,0x68,0x20,0x6C,0x69,
+ 0x6E,0x65,0x61,0x72,0x20,0x66,0x72,0x65,0x71,0x75,0x65,0x6E,
+ 0x63,0x79,0x20,0x74,0x61,0x62,0x6C,0x65,0x2E,0x00,0x18,0x40,
+ 0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x61,0x6D,
+ 0x70,0x6C,0x65,0x20,0x45,0x64,0x69,0x74,0x6F,0x72,0x3A,0x01,
+ 0x3E,0x2C,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
+ 0x31,0x50,0x6C,0x61,0x79,0x20,0x28,0x57,0x61,0x76,0x65,0x20,
+ 0x66,0x6F,0x72,0x6D,0x2C,0x20,0x72,0x61,0x6E,0x67,0x65,0x2C,
+ 0x20,0x64,0x69,0x73,0x70,0x6C,0x61,0x79,0x29,0x3A,0x0B,0x3E,
+ 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3C,0x3E,
+ 0x50,0x6C,0x61,0x79,0x73,0x20,0x74,0x68,0x65,0x20,0x63,0x75,
+ 0x72,0x72,0x65,0x6E,0x74,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,
+ 0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x6F,0x6E,0x65,0x20,0x64,
+ 0x69,0x73,0x70,0x6C,0x61,0x79,0x20,0x61,0x62,0x6F,0x76,0x65,
+ 0x20,0x74,0x68,0x65,0x20,0x22,0x73,0x74,0x6F,0x70,0x22,0x3D,
+ 0x62,0x75,0x74,0x74,0x6F,0x6E,0x2E,0x20,0x4E,0x6F,0x74,0x65,
+ 0x20,0x74,0x68,0x61,0x74,0x20,0x72,0x65,0x73,0x70,0x65,0x63,
+ 0x74,0x20,0x69,0x73,0x20,0x74,0x61,0x6B,0x65,0x6E,0x20,0x74,
+ 0x6F,0x20,0x74,0x68,0x65,0x20,0x70,0x61,0x72,0x74,0x69,0x63,
+ 0x75,0x6C,0x61,0x72,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x27,
+ 0x73,0x0E,0x72,0x65,0x6C,0x61,0x74,0x69,0x76,0x65,0x20,0x74,
+ 0x6F,0x6E,0x65,0x2E,0x00,0x16,0x3E,0x40,0x58,0x30,0x34,0x30,
+ 0x40,0x43,0x30,0x30,0x31,0x53,0x61,0x76,0x65,0x20,0x72,0x61,
+ 0x6E,0x67,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
+ 0x43,0x30,0x30,0x32,0x3C,0x3E,0x53,0x74,0x6F,0x72,0x65,0x73,
+ 0x20,0x74,0x68,0x65,0x20,0x72,0x61,0x6E,0x67,0x65,0x20,0x73,
+ 0x70,0x65,0x63,0x69,0x66,0x69,0x65,0x64,0x20,0x69,0x6E,0x20,
+ 0x74,0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,
+ 0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x64,0x69,0x72,0x65,0x63,
+ 0x74,0x6F,0x72,0x79,0x2E,0x00,0x11,0x3E,0x40,0x58,0x30,0x34,
+ 0x30,0x40,0x43,0x30,0x30,0x31,0x50,0x61,0x73,0x74,0x65,0x3A,
+ 0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
+ 0x40,0x3E,0x54,0x68,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,
+ 0x20,0x64,0x61,0x74,0x61,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,
+ 0x20,0x63,0x6F,0x70,0x79,0x20,0x62,0x75,0x66,0x66,0x65,0x72,
+ 0x20,0x69,0x73,0x20,0x73,0x74,0x6F,0x72,0x65,0x64,0x20,0x49,
+ 0x4E,0x54,0x4F,0x20,0x74,0x68,0x65,0x20,0x73,0x70,0x65,0x63,
+ 0x69,0x66,0x69,0x65,0x64,0x06,0x72,0x61,0x6E,0x67,0x65,0x2E,
+ 0x00,0x10,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
+ 0x31,0x43,0x72,0x6F,0x70,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,
+ 0x30,0x40,0x43,0x30,0x30,0x32,0x3E,0x3E,0x43,0x75,0x74,0x73,
+ 0x20,0x65,0x76,0x65,0x72,0x79,0x74,0x68,0x69,0x6E,0x67,0x20,
+ 0x62,0x75,0x74,0x20,0x74,0x68,0x65,0x20,0x72,0x61,0x6E,0x67,
+ 0x65,0x2E,0x20,0x4E,0x6F,0x74,0x68,0x69,0x6E,0x67,0x20,0x69,
+ 0x73,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x64,0x20,0x69,0x6E,
+ 0x20,0x74,0x68,0x65,0x20,0x63,0x6F,0x70,0x79,0x19,0x62,0x75,
+ 0x66,0x66,0x65,0x72,0x20,0x62,0x79,0x20,0x74,0x68,0x69,0x73,
+ 0x20,0x6F,0x70,0x65,0x72,0x61,0x74,0x69,0x6F,0x6E,0x2E,0x00,
+ 0x12,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
+ 0x56,0x6F,0x6C,0x75,0x6D,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,
+ 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x17,0x3E,0x4F,0x70,0x65,
+ 0x72,0x61,0x74,0x65,0x73,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,
+ 0x20,0x72,0x61,0x6E,0x67,0x65,0x2E,0x00,0x12,0x3E,0x40,0x58,
+ 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x58,0x2D,0x46,0x61,
+ 0x64,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
+ 0x30,0x30,0x32,0x44,0x3E,0x54,0x68,0x69,0x73,0x20,0x69,0x73,
+ 0x20,0x61,0x20,0x74,0x6F,0x6F,0x6C,0x20,0x66,0x6F,0x72,0x20,
+ 0x6D,0x61,0x6B,0x69,0x6E,0x67,0x20,0x73,0x6D,0x6F,0x6F,0x74,
+ 0x68,0x20,0x6C,0x6F,0x6F,0x70,0x73,0x2E,0x20,0x53,0x70,0x65,
+ 0x63,0x69,0x66,0x79,0x20,0x61,0x20,0x72,0x61,0x6E,0x67,0x65,
+ 0x20,0x74,0x68,0x61,0x74,0x20,0x63,0x6F,0x76,0x65,0x72,0x73,
+ 0x41,0x74,0x68,0x65,0x20,0x66,0x69,0x72,0x73,0x74,0x20,0x6C,
+ 0x6F,0x6F,0x70,0x20,0x70,0x6F,0x69,0x6E,0x74,0x2E,0x20,0x4D,
+ 0x61,0x6B,0x65,0x20,0x73,0x75,0x72,0x65,0x20,0x74,0x68,0x61,
+ 0x74,0x20,0x74,0x68,0x65,0x72,0x65,0x20,0x69,0x73,0x20,0x61,
+ 0x73,0x20,0x6D,0x75,0x63,0x68,0x20,0x73,0x70,0x61,0x63,0x65,
+ 0x20,0x61,0x66,0x74,0x65,0x72,0x41,0x74,0x68,0x65,0x20,0x73,
+ 0x65,0x63,0x6F,0x6E,0x64,0x20,0x6C,0x6F,0x6F,0x70,0x20,0x70,
+ 0x6F,0x69,0x6E,0x74,0x20,0x61,0x73,0x20,0x74,0x68,0x65,0x20,
+ 0x72,0x61,0x6E,0x67,0x65,0x20,0x62,0x79,0x70,0x61,0x73,0x73,
+ 0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x66,0x69,0x72,0x73,0x74,
+ 0x20,0x6C,0x6F,0x6F,0x70,0x20,0x70,0x6F,0x69,0x6E,0x74,0x2E,
+ 0x1F,0x50,0x72,0x65,0x73,0x73,0x20,0x74,0x68,0x65,0x20,0x58,
+ 0x2D,0x66,0x61,0x64,0x65,0x20,0x62,0x75,0x74,0x74,0x6F,0x6E,
+ 0x2E,0x20,0x45,0x6E,0x6A,0x6F,0x79,0x21,0x00,0x18,0x3E,0x40,
+ 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x38,0x2D,0x42,
+ 0x69,0x74,0x2F,0x31,0x36,0x2D,0x62,0x69,0x74,0x3A,0x0B,0x3E,
+ 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x42,0x3E,
+ 0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x6C,0x6F,0x61,0x64,0x20,
+ 0x61,0x20,0x31,0x36,0x2D,0x62,0x69,0x74,0x20,0x73,0x61,0x6D,
+ 0x70,0x6C,0x65,0x20,0x77,0x69,0x74,0x68,0x6F,0x75,0x74,0x20,
+ 0x68,0x65,0x61,0x64,0x65,0x72,0x2C,0x20,0x46,0x54,0x32,0x20,
+ 0x61,0x73,0x73,0x75,0x6D,0x65,0x73,0x20,0x74,0x68,0x61,0x74,
+ 0x20,0x69,0x74,0x27,0x73,0x3E,0x61,0x6E,0x20,0x38,0x2D,0x62,
+ 0x69,0x74,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x2E,0x20,0x57,
+ 0x68,0x65,0x6E,0x20,0x70,0x72,0x65,0x73,0x73,0x69,0x6E,0x67,
+ 0x20,0x74,0x68,0x65,0x20,0x31,0x36,0x2D,0x62,0x69,0x74,0x20,
+ 0x62,0x75,0x74,0x74,0x6F,0x6E,0x2C,0x20,0x64,0x6F,0x20,0x6E,
+ 0x6F,0x74,0x20,0x70,0x72,0x65,0x73,0x73,0x23,0x22,0x63,0x6F,
+ 0x6E,0x76,0x65,0x72,0x74,0x22,0x20,0x77,0x68,0x65,0x6E,0x20,
+ 0x74,0x68,0x65,0x20,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x20,
+ 0x69,0x73,0x20,0x6D,0x61,0x64,0x65,0x2E,0x00,0x14,0x3E,0x40,
+ 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x4D,0x69,0x6E,
+ 0x69,0x6D,0x69,0x7A,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,
0x30,0x40,0x43,0x30,0x30,0x32,0x44,0x3E,0x54,0x68,0x69,0x73,
- 0x20,0x69,0x73,0x20,0x61,0x20,0x74,0x6F,0x6F,0x6C,0x20,0x66,
- 0x6F,0x72,0x20,0x6D,0x61,0x6B,0x69,0x6E,0x67,0x20,0x73,0x6D,
- 0x6F,0x6F,0x74,0x68,0x20,0x6C,0x6F,0x6F,0x70,0x73,0x2E,0x20,
- 0x53,0x70,0x65,0x63,0x69,0x66,0x79,0x20,0x61,0x20,0x72,0x61,
- 0x6E,0x67,0x65,0x20,0x74,0x68,0x61,0x74,0x20,0x63,0x6F,0x76,
- 0x65,0x72,0x73,0x41,0x74,0x68,0x65,0x20,0x66,0x69,0x72,0x73,
- 0x74,0x20,0x6C,0x6F,0x6F,0x70,0x20,0x70,0x6F,0x69,0x6E,0x74,
- 0x2E,0x20,0x4D,0x61,0x6B,0x65,0x20,0x73,0x75,0x72,0x65,0x20,
- 0x74,0x68,0x61,0x74,0x20,0x74,0x68,0x65,0x72,0x65,0x20,0x69,
- 0x73,0x20,0x61,0x73,0x20,0x6D,0x75,0x63,0x68,0x20,0x73,0x70,
- 0x61,0x63,0x65,0x20,0x61,0x66,0x74,0x65,0x72,0x41,0x74,0x68,
- 0x65,0x20,0x73,0x65,0x63,0x6F,0x6E,0x64,0x20,0x6C,0x6F,0x6F,
- 0x70,0x20,0x70,0x6F,0x69,0x6E,0x74,0x20,0x61,0x73,0x20,0x74,
- 0x68,0x65,0x20,0x72,0x61,0x6E,0x67,0x65,0x20,0x62,0x79,0x70,
- 0x61,0x73,0x73,0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x66,0x69,
- 0x72,0x73,0x74,0x20,0x6C,0x6F,0x6F,0x70,0x20,0x70,0x6F,0x69,
- 0x6E,0x74,0x2E,0x1F,0x50,0x72,0x65,0x73,0x73,0x20,0x74,0x68,
- 0x65,0x20,0x58,0x2D,0x66,0x61,0x64,0x65,0x20,0x62,0x75,0x74,
- 0x74,0x6F,0x6E,0x2E,0x20,0x45,0x6E,0x6A,0x6F,0x79,0x21,0x00,
- 0x18,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
- 0x38,0x2D,0x42,0x69,0x74,0x2F,0x31,0x36,0x2D,0x62,0x69,0x74,
+ 0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x20,0x63,0x75,
+ 0x74,0x73,0x20,0x74,0x68,0x65,0x20,0x70,0x61,0x72,0x74,0x20,
+ 0x6F,0x66,0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,
+ 0x65,0x20,0x74,0x68,0x61,0x74,0x20,0x69,0x73,0x20,0x62,0x65,
+ 0x79,0x6F,0x6E,0x64,0x20,0x74,0x68,0x65,0x20,0x73,0x65,0x63,
+ 0x6F,0x6E,0x64,0x0B,0x6C,0x6F,0x6F,0x70,0x20,0x70,0x6F,0x69,
+ 0x6E,0x74,0x2E,0x00,0x2D,0x40,0x58,0x30,0x32,0x30,0x40,0x43,
+ 0x30,0x30,0x31,0x53,0x61,0x6D,0x70,0x6C,0x65,0x20,0x45,0x64,
+ 0x69,0x74,0x6F,0x72,0x20,0x45,0x78,0x74,0x65,0x6E,0x73,0x69,
+ 0x6F,0x6E,0x3A,0x20,0x28,0x53,0x2E,0x45,0x2E,0x45,0x78,0x74,
+ 0x2E,0x29,0x01,0x3E,0x27,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,
+ 0x43,0x30,0x30,0x31,0x43,0x6F,0x70,0x79,0x2F,0x58,0x63,0x68,
+ 0x67,0x20,0x53,0x61,0x6D,0x70,0x6C,0x65,0x2F,0x49,0x6E,0x73,
+ 0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x3A,0x0B,0x3E,0x40,0x58,
+ 0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3C,0x3E,0x54,0x68,
+ 0x65,0x20,0x73,0x6F,0x75,0x72,0x63,0x65,0x20,0x69,0x73,0x20,
+ 0x73,0x70,0x65,0x63,0x69,0x66,0x69,0x65,0x64,0x20,0x69,0x6E,
+ 0x20,0x74,0x68,0x65,0x20,0x6C,0x69,0x6E,0x65,0x20,0x6E,0x75,
+ 0x6D,0x62,0x65,0x72,0x69,0x6E,0x67,0x20,0x63,0x6F,0x6C,0x75,
+ 0x6D,0x6E,0x20,0x6F,0x66,0x20,0x74,0x68,0x65,0x40,0x69,0x6E,
+ 0x73,0x74,0x72,0x2E,0x2F,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,
+ 0x6C,0x69,0x73,0x74,0x73,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,
+ 0x20,0x75,0x70,0x70,0x65,0x72,0x2D,0x72,0x69,0x67,0x68,0x74,
+ 0x20,0x63,0x6F,0x72,0x6E,0x65,0x72,0x20,0x6F,0x66,0x20,0x74,
+ 0x68,0x65,0x20,0x73,0x63,0x72,0x65,0x65,0x6E,0x2E,0x20,0x54,
+ 0x68,0x65,0x29,0x64,0x65,0x73,0x74,0x69,0x6E,0x61,0x74,0x69,
+ 0x6F,0x6E,0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x63,0x75,
+ 0x72,0x72,0x65,0x6E,0x74,0x20,0x69,0x6E,0x73,0x74,0x72,0x2E,
+ 0x2F,0x73,0x61,0x6D,0x70,0x6C,0x65,0x2E,0x00,0x15,0x3E,0x40,
+ 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x42,0x61,0x63,
+ 0x6B,0x77,0x61,0x72,0x64,0x73,0x3A,0x0B,0x3E,0x40,0x58,0x30,
+ 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x40,0x3E,0x4F,0x70,0x65,
+ 0x72,0x61,0x74,0x65,0x73,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,
+ 0x20,0x72,0x61,0x6E,0x67,0x65,0x20,0x28,0x6F,0x72,0x20,0x74,
+ 0x68,0x65,0x20,0x77,0x68,0x6F,0x6C,0x65,0x20,0x73,0x61,0x6D,
+ 0x70,0x6C,0x65,0x20,0x69,0x66,0x20,0x6E,0x6F,0x20,0x72,0x61,
+ 0x6E,0x67,0x65,0x20,0x69,0x73,0x20,0x73,0x65,0x74,0x29,0x2E,
+ 0x00,0x13,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
+ 0x31,0x43,0x6F,0x6E,0x76,0x65,0x72,0x74,0x3A,0x0B,0x3E,0x40,
+ 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x34,0x3E,0x43,
+ 0x6F,0x6E,0x76,0x65,0x72,0x74,0x73,0x20,0x74,0x68,0x65,0x20,
+ 0x65,0x6E,0x74,0x69,0x72,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,
+ 0x65,0x20,0x66,0x72,0x6F,0x6D,0x2F,0x74,0x6F,0x20,0x73,0x69,
+ 0x67,0x6E,0x65,0x64,0x2F,0x75,0x6E,0x73,0x69,0x67,0x6E,0x65,
+ 0x64,0x2E,0x00,0x15,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,
+ 0x30,0x30,0x31,0x43,0x6F,0x6E,0x76,0x65,0x72,0x74,0x20,0x57,
0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,
- 0x32,0x42,0x3E,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x6C,0x6F,
- 0x61,0x64,0x20,0x61,0x20,0x31,0x36,0x2D,0x62,0x69,0x74,0x20,
- 0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x77,0x69,0x74,0x68,0x6F,
- 0x75,0x74,0x20,0x68,0x65,0x61,0x64,0x65,0x72,0x2C,0x20,0x46,
- 0x54,0x32,0x20,0x61,0x73,0x73,0x75,0x6D,0x65,0x73,0x20,0x74,
- 0x68,0x61,0x74,0x20,0x69,0x74,0x27,0x73,0x3E,0x61,0x6E,0x20,
- 0x38,0x2D,0x62,0x69,0x74,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,
- 0x2E,0x20,0x57,0x68,0x65,0x6E,0x20,0x70,0x72,0x65,0x73,0x73,
- 0x69,0x6E,0x67,0x20,0x74,0x68,0x65,0x20,0x31,0x36,0x2D,0x62,
- 0x69,0x74,0x20,0x62,0x75,0x74,0x74,0x6F,0x6E,0x2C,0x20,0x64,
- 0x6F,0x20,0x6E,0x6F,0x74,0x20,0x70,0x72,0x65,0x73,0x73,0x23,
- 0x22,0x63,0x6F,0x6E,0x76,0x65,0x72,0x74,0x22,0x20,0x77,0x68,
- 0x65,0x6E,0x20,0x74,0x68,0x65,0x20,0x72,0x65,0x71,0x75,0x65,
- 0x73,0x74,0x20,0x69,0x73,0x20,0x6D,0x61,0x64,0x65,0x2E,0x00,
- 0x14,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
- 0x4D,0x69,0x6E,0x69,0x6D,0x69,0x7A,0x65,0x3A,0x0B,0x3E,0x40,
- 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x44,0x3E,0x54,
- 0x68,0x69,0x73,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,
- 0x20,0x63,0x75,0x74,0x73,0x20,0x74,0x68,0x65,0x20,0x70,0x61,
- 0x72,0x74,0x20,0x6F,0x66,0x20,0x74,0x68,0x65,0x20,0x73,0x61,
- 0x6D,0x70,0x6C,0x65,0x20,0x74,0x68,0x61,0x74,0x20,0x69,0x73,
- 0x20,0x62,0x65,0x79,0x6F,0x6E,0x64,0x20,0x74,0x68,0x65,0x20,
- 0x73,0x65,0x63,0x6F,0x6E,0x64,0x0B,0x6C,0x6F,0x6F,0x70,0x20,
- 0x70,0x6F,0x69,0x6E,0x74,0x2E,0x00,0x2D,0x40,0x58,0x30,0x32,
- 0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x61,0x6D,0x70,0x6C,0x65,
- 0x20,0x45,0x64,0x69,0x74,0x6F,0x72,0x20,0x45,0x78,0x74,0x65,
- 0x6E,0x73,0x69,0x6F,0x6E,0x3A,0x20,0x28,0x53,0x2E,0x45,0x2E,
- 0x45,0x78,0x74,0x2E,0x29,0x01,0x3E,0x27,0x3E,0x40,0x58,0x30,
- 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x43,0x6F,0x70,0x79,0x2F,
- 0x58,0x63,0x68,0x67,0x20,0x53,0x61,0x6D,0x70,0x6C,0x65,0x2F,
- 0x49,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x3A,0x0B,
+ 0x32,0x3F,0x53,0x77,0x61,0x70,0x73,0x20,0x74,0x68,0x65,0x20,
+ 0x62,0x79,0x74,0x65,0x20,0x6F,0x72,0x64,0x65,0x72,0x20,0x74,
+ 0x6F,0x2F,0x66,0x72,0x6F,0x6D,0x20,0x49,0x6E,0x74,0x65,0x6C,
+ 0x20,0x66,0x72,0x6F,0x6D,0x2F,0x74,0x6F,0x20,0x4D,0x6F,0x74,
+ 0x6F,0x72,0x6F,0x6C,0x61,0x20,0x73,0x74,0x61,0x6E,0x64,0x61,
+ 0x72,0x64,0x20,0x6F,0x6E,0x12,0x74,0x68,0x65,0x20,0x65,0x6E,
+ 0x74,0x69,0x72,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x2E,
+ 0x44,0x59,0x6F,0x75,0x27,0x6C,0x6C,0x20,0x6E,0x65,0x65,0x64,
+ 0x20,0x74,0x68,0x69,0x73,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,
+ 0x6F,0x6E,0x20,0x69,0x66,0x20,0x79,0x6F,0x75,0x20,0x69,0x6D,
+ 0x70,0x6F,0x72,0x74,0x20,0x31,0x36,0x2D,0x62,0x69,0x74,0x20,
+ 0x73,0x61,0x6D,0x70,0x6C,0x65,0x73,0x20,0x77,0x69,0x74,0x68,
+ 0x20,0x4D,0x6F,0x74,0x6F,0x72,0x6F,0x6C,0x61,0x2D,0x62,0x79,
+ 0x74,0x65,0x2D,0x6F,0x72,0x64,0x65,0x72,0x69,0x6E,0x67,0x20,
+ 0x28,0x66,0x2E,0x65,0x78,0x2E,0x20,0x4B,0x75,0x72,0x7A,0x77,
+ 0x65,0x69,0x6C,0x20,0x4B,0x32,0x30,0x30,0x30,0x20,0x73,0x61,
+ 0x6D,0x70,0x6C,0x65,0x73,0x2E,0x29,0x00,0x10,0x3E,0x40,0x58,
+ 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x45,0x63,0x68,0x6F,
+ 0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,
+ 0x32,0x1E,0x4F,0x70,0x65,0x72,0x61,0x74,0x65,0x73,0x20,0x6F,
+ 0x6E,0x20,0x74,0x68,0x65,0x20,0x65,0x6E,0x74,0x69,0x72,0x65,
+ 0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x2E,0x00,0x12,0x3E,0x40,
+ 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x46,0x69,0x78,
+ 0x20,0x44,0x43,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
+ 0x43,0x30,0x30,0x32,0x3D,0x41,0x74,0x74,0x65,0x6D,0x70,0x74,
+ 0x73,0x20,0x74,0x6F,0x20,0x63,0x65,0x6E,0x74,0x65,0x72,0x20,
+ 0x61,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x74,0x68,0x61,
+ 0x74,0x20,0x68,0x61,0x73,0x20,0x75,0x6E,0x77,0x61,0x6E,0x74,
+ 0x65,0x64,0x20,0x44,0x43,0x20,0x6F,0x66,0x66,0x73,0x65,0x74,
+ 0x2F,0x62,0x69,0x61,0x73,0x2E,0x43,0x50,0x6C,0x65,0x61,0x73,
+ 0x65,0x20,0x6E,0x6F,0x74,0x65,0x20,0x74,0x68,0x61,0x74,0x20,
+ 0x69,0x74,0x20,0x69,0x73,0x20,0x75,0x73,0x69,0x6E,0x67,0x20,
+ 0x61,0x20,0x63,0x72,0x75,0x64,0x65,0x20,0x61,0x6C,0x67,0x6F,
+ 0x72,0x69,0x74,0x68,0x6D,0x2C,0x20,0x73,0x6F,0x20,0x69,0x74,
+ 0x20,0x63,0x61,0x6E,0x20,0x73,0x6F,0x6D,0x65,0x74,0x69,0x6D,
+ 0x65,0x73,0x22,0x66,0x61,0x69,0x6C,0x20,0x64,0x65,0x70,0x65,
+ 0x6E,0x64,0x69,0x6E,0x67,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,
+ 0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x64,0x61,0x74,0x61,
+ 0x2E,0x00,0x14,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
+ 0x30,0x31,0x52,0x65,0x73,0x61,0x6D,0x70,0x6C,0x65,0x3A,0x0B,
0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3C,
- 0x3E,0x54,0x68,0x65,0x20,0x73,0x6F,0x75,0x72,0x63,0x65,0x20,
- 0x69,0x73,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x69,0x65,0x64,
- 0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x6C,0x69,0x6E,0x65,
- 0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x69,0x6E,0x67,0x20,0x63,
- 0x6F,0x6C,0x75,0x6D,0x6E,0x20,0x6F,0x66,0x20,0x74,0x68,0x65,
- 0x40,0x69,0x6E,0x73,0x74,0x72,0x2E,0x2F,0x73,0x61,0x6D,0x70,
- 0x6C,0x65,0x20,0x6C,0x69,0x73,0x74,0x73,0x20,0x69,0x6E,0x20,
- 0x74,0x68,0x65,0x20,0x75,0x70,0x70,0x65,0x72,0x2D,0x72,0x69,
- 0x67,0x68,0x74,0x20,0x63,0x6F,0x72,0x6E,0x65,0x72,0x20,0x6F,
- 0x66,0x20,0x74,0x68,0x65,0x20,0x73,0x63,0x72,0x65,0x65,0x6E,
- 0x2E,0x20,0x54,0x68,0x65,0x29,0x64,0x65,0x73,0x74,0x69,0x6E,
- 0x61,0x74,0x69,0x6F,0x6E,0x20,0x69,0x73,0x20,0x74,0x68,0x65,
- 0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x69,0x6E,0x73,
- 0x74,0x72,0x2E,0x2F,0x73,0x61,0x6D,0x70,0x6C,0x65,0x2E,0x00,
- 0x15,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
- 0x42,0x61,0x63,0x6B,0x77,0x61,0x72,0x64,0x73,0x3A,0x0B,0x3E,
- 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x40,0x3E,
0x4F,0x70,0x65,0x72,0x61,0x74,0x65,0x73,0x20,0x6F,0x6E,0x20,
- 0x74,0x68,0x65,0x20,0x72,0x61,0x6E,0x67,0x65,0x20,0x28,0x6F,
- 0x72,0x20,0x74,0x68,0x65,0x20,0x77,0x68,0x6F,0x6C,0x65,0x20,
- 0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x69,0x66,0x20,0x6E,0x6F,
- 0x20,0x72,0x61,0x6E,0x67,0x65,0x20,0x69,0x73,0x20,0x73,0x65,
- 0x74,0x29,0x2E,0x00,0x13,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,
- 0x43,0x30,0x30,0x31,0x43,0x6F,0x6E,0x76,0x65,0x72,0x74,0x3A,
- 0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
- 0x34,0x3E,0x43,0x6F,0x6E,0x76,0x65,0x72,0x74,0x73,0x20,0x74,
- 0x68,0x65,0x20,0x65,0x6E,0x74,0x69,0x72,0x65,0x20,0x73,0x61,
- 0x6D,0x70,0x6C,0x65,0x20,0x66,0x72,0x6F,0x6D,0x2F,0x74,0x6F,
- 0x20,0x73,0x69,0x67,0x6E,0x65,0x64,0x2F,0x75,0x6E,0x73,0x69,
- 0x67,0x6E,0x65,0x64,0x2E,0x00,0x15,0x3E,0x40,0x58,0x30,0x34,
- 0x30,0x40,0x43,0x30,0x30,0x31,0x43,0x6F,0x6E,0x76,0x65,0x72,
- 0x74,0x20,0x57,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
- 0x43,0x30,0x30,0x32,0x3F,0x53,0x77,0x61,0x70,0x73,0x20,0x74,
- 0x68,0x65,0x20,0x62,0x79,0x74,0x65,0x20,0x6F,0x72,0x64,0x65,
- 0x72,0x20,0x74,0x6F,0x2F,0x66,0x72,0x6F,0x6D,0x20,0x49,0x6E,
- 0x74,0x65,0x6C,0x20,0x66,0x72,0x6F,0x6D,0x2F,0x74,0x6F,0x20,
- 0x4D,0x6F,0x74,0x6F,0x72,0x6F,0x6C,0x61,0x20,0x73,0x74,0x61,
- 0x6E,0x64,0x61,0x72,0x64,0x20,0x6F,0x6E,0x12,0x74,0x68,0x65,
- 0x20,0x65,0x6E,0x74,0x69,0x72,0x65,0x20,0x73,0x61,0x6D,0x70,
- 0x6C,0x65,0x2E,0x44,0x59,0x6F,0x75,0x27,0x6C,0x6C,0x20,0x6E,
- 0x65,0x65,0x64,0x20,0x74,0x68,0x69,0x73,0x20,0x66,0x75,0x6E,
- 0x63,0x74,0x69,0x6F,0x6E,0x20,0x69,0x66,0x20,0x79,0x6F,0x75,
- 0x20,0x69,0x6D,0x70,0x6F,0x72,0x74,0x20,0x31,0x36,0x2D,0x62,
- 0x69,0x74,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x73,0x20,0x77,
- 0x69,0x74,0x68,0x20,0x4D,0x6F,0x74,0x6F,0x72,0x6F,0x6C,0x61,
- 0x2D,0x62,0x79,0x74,0x65,0x2D,0x6F,0x72,0x64,0x65,0x72,0x69,
- 0x6E,0x67,0x20,0x28,0x66,0x2E,0x65,0x78,0x2E,0x20,0x4B,0x75,
- 0x72,0x7A,0x77,0x65,0x69,0x6C,0x20,0x4B,0x32,0x30,0x30,0x30,
- 0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x73,0x2E,0x29,0x00,0x10,
- 0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x45,
- 0x63,0x68,0x6F,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
- 0x43,0x30,0x30,0x32,0x1E,0x4F,0x70,0x65,0x72,0x61,0x74,0x65,
- 0x73,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x20,0x65,0x6E,0x74,
- 0x69,0x72,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x2E,0x00,
- 0x12,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
- 0x46,0x69,0x78,0x20,0x44,0x43,0x3A,0x0B,0x3E,0x40,0x58,0x30,
- 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3D,0x41,0x74,0x74,0x65,
- 0x6D,0x70,0x74,0x73,0x20,0x74,0x6F,0x20,0x63,0x65,0x6E,0x74,
- 0x65,0x72,0x20,0x61,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,
- 0x74,0x68,0x61,0x74,0x20,0x68,0x61,0x73,0x20,0x75,0x6E,0x77,
- 0x61,0x6E,0x74,0x65,0x64,0x20,0x44,0x43,0x20,0x6F,0x66,0x66,
- 0x73,0x65,0x74,0x2F,0x62,0x69,0x61,0x73,0x2E,0x43,0x50,0x6C,
- 0x65,0x61,0x73,0x65,0x20,0x6E,0x6F,0x74,0x65,0x20,0x74,0x68,
- 0x61,0x74,0x20,0x69,0x74,0x20,0x69,0x73,0x20,0x75,0x73,0x69,
- 0x6E,0x67,0x20,0x61,0x20,0x63,0x72,0x75,0x64,0x65,0x20,0x61,
- 0x6C,0x67,0x6F,0x72,0x69,0x74,0x68,0x6D,0x2C,0x20,0x73,0x6F,
- 0x20,0x69,0x74,0x20,0x63,0x61,0x6E,0x20,0x73,0x6F,0x6D,0x65,
- 0x74,0x69,0x6D,0x65,0x73,0x22,0x66,0x61,0x69,0x6C,0x20,0x64,
- 0x65,0x70,0x65,0x6E,0x64,0x69,0x6E,0x67,0x20,0x6F,0x6E,0x20,
- 0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x64,
- 0x61,0x74,0x61,0x2E,0x00,0x14,0x3E,0x40,0x58,0x30,0x34,0x30,
- 0x40,0x43,0x30,0x30,0x31,0x52,0x65,0x73,0x61,0x6D,0x70,0x6C,
+ 0x74,0x68,0x65,0x20,0x65,0x6E,0x74,0x69,0x72,0x65,0x20,0x73,
+ 0x61,0x6D,0x70,0x6C,0x65,0x2E,0x20,0x54,0x68,0x65,0x20,0x73,
+ 0x61,0x6D,0x70,0x6C,0x65,0x27,0x73,0x20,0x72,0x65,0x6C,0x61,
+ 0x74,0x69,0x76,0x65,0x20,0x74,0x6F,0x6E,0x65,0x20,0x69,0x73,
+ 0x2C,0x63,0x68,0x61,0x6E,0x67,0x65,0x64,0x20,0x77,0x69,0x74,
+ 0x68,0x20,0x72,0x65,0x73,0x70,0x65,0x63,0x74,0x20,0x74,0x6F,
+ 0x20,0x74,0x68,0x65,0x20,0x72,0x65,0x73,0x61,0x6D,0x70,0x6C,
+ 0x69,0x6E,0x67,0x20,0x72,0x61,0x74,0x65,0x2E,0x00,0x16,0x3E,
+ 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x4D,0x69,
+ 0x78,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x3A,0x0B,0x3E,0x40,
+ 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x35,0x3E,0x4D,
+ 0x69,0x78,0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x73,0x6F,0x75,
+ 0x72,0x63,0x65,0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x68,0x65,
+ 0x20,0x64,0x65,0x73,0x74,0x69,0x6E,0x61,0x74,0x69,0x6F,0x6E,
+ 0x20,0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x73,0x6F,0x75,0x72,
+ 0x63,0x65,0x2E,0x00,0x15,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,
+ 0x43,0x30,0x30,0x31,0x44,0x72,0x61,0x77,0x20,0x6D,0x6F,0x64,
0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
- 0x30,0x32,0x3C,0x4F,0x70,0x65,0x72,0x61,0x74,0x65,0x73,0x20,
- 0x6F,0x6E,0x20,0x74,0x68,0x65,0x20,0x65,0x6E,0x74,0x69,0x72,
- 0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x2E,0x20,0x54,0x68,
- 0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x27,0x73,0x20,0x72,
- 0x65,0x6C,0x61,0x74,0x69,0x76,0x65,0x20,0x74,0x6F,0x6E,0x65,
- 0x20,0x69,0x73,0x2C,0x63,0x68,0x61,0x6E,0x67,0x65,0x64,0x20,
- 0x77,0x69,0x74,0x68,0x20,0x72,0x65,0x73,0x70,0x65,0x63,0x74,
- 0x20,0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x72,0x65,0x73,0x61,
- 0x6D,0x70,0x6C,0x69,0x6E,0x67,0x20,0x72,0x61,0x74,0x65,0x2E,
- 0x00,0x16,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
- 0x31,0x4D,0x69,0x78,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x3A,
- 0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
- 0x35,0x3E,0x4D,0x69,0x78,0x65,0x73,0x20,0x74,0x68,0x65,0x20,
- 0x73,0x6F,0x75,0x72,0x63,0x65,0x20,0x77,0x69,0x74,0x68,0x20,
- 0x74,0x68,0x65,0x20,0x64,0x65,0x73,0x74,0x69,0x6E,0x61,0x74,
- 0x69,0x6F,0x6E,0x20,0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x73,
- 0x6F,0x75,0x72,0x63,0x65,0x2E,0x00,0x15,0x3E,0x40,0x58,0x30,
- 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x44,0x72,0x61,0x77,0x20,
- 0x6D,0x6F,0x64,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
- 0x40,0x43,0x30,0x30,0x32,0x40,0x42,0x79,0x20,0x70,0x72,0x65,
- 0x73,0x73,0x69,0x6E,0x67,0x20,0x74,0x68,0x65,0x20,0x72,0x69,
- 0x67,0x68,0x74,0x20,0x6D,0x6F,0x75,0x73,0x65,0x20,0x62,0x75,
- 0x74,0x74,0x6F,0x6E,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,
- 0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x77,0x69,0x6E,0x64,0x6F,
- 0x77,0x2C,0x20,0x79,0x6F,0x75,0x20,0x63,0x61,0x6E,0x1D,0x64,
- 0x72,0x61,0x77,0x20,0x79,0x6F,0x75,0x72,0x20,0x77,0x61,0x76,
- 0x65,0x66,0x6F,0x72,0x6D,0x73,0x20,0x6D,0x61,0x6E,0x75,0x61,
- 0x6C,0x6C,0x79,0x2E,0x00,0x18,0x40,0x58,0x30,0x32,0x30,0x40,
- 0x43,0x30,0x30,0x31,0x43,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,
- 0x61,0x74,0x69,0x6F,0x6E,0x3A,0x01,0x3E,0x15,0x3E,0x40,0x58,
- 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x41,0x75,0x74,0x6F,
- 0x20,0x73,0x61,0x76,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,
- 0x30,0x40,0x43,0x30,0x30,0x32,0x43,0x49,0x66,0x20,0x74,0x68,
- 0x65,0x20,0x61,0x75,0x74,0x6F,0x20,0x73,0x61,0x76,0x65,0x20,
- 0x69,0x73,0x20,0x6F,0x6E,0x2C,0x20,0x46,0x54,0x32,0x20,0x77,
- 0x69,0x6C,0x6C,0x20,0x75,0x70,0x64,0x61,0x74,0x65,0x20,0x74,
- 0x68,0x65,0x20,0x63,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,
- 0x74,0x69,0x6F,0x6E,0x20,0x66,0x69,0x6C,0x65,0x20,0x77,0x68,
- 0x65,0x6E,0x15,0x79,0x6F,0x75,0x20,0x65,0x78,0x69,0x74,0x20,
- 0x74,0x68,0x65,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x2E,
- 0x00,0x25,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,
- 0x43,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,
- 0x6E,0x2C,0x20,0x49,0x2F,0x4F,0x20,0x64,0x65,0x76,0x69,0x63,
- 0x65,0x73,0x3A,0x01,0x3E,0x19,0x3E,0x40,0x58,0x30,0x34,0x30,
- 0x40,0x43,0x30,0x30,0x31,0x49,0x6E,0x74,0x65,0x72,0x70,0x6F,
- 0x6C,0x61,0x74,0x69,0x6F,0x6E,0x3A,0x0B,0x3E,0x40,0x58,0x30,
- 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x35,0x53,0x65,0x6C,0x65,
- 0x63,0x74,0x73,0x20,0x77,0x68,0x61,0x74,0x20,0x74,0x79,0x70,
- 0x65,0x20,0x6F,0x66,0x20,0x72,0x65,0x73,0x61,0x6D,0x70,0x6C,
- 0x69,0x6E,0x67,0x20,0x69,0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C,
- 0x61,0x74,0x69,0x6F,0x6E,0x20,0x74,0x6F,0x20,0x75,0x73,0x65,
- 0x2E,0x45,0x22,0x4E,0x6F,0x6E,0x65,0x22,0x20,0x75,0x73,0x65,
- 0x73,0x20,0x6E,0x6F,0x20,0x69,0x6E,0x74,0x65,0x72,0x70,0x6F,
- 0x6C,0x61,0x74,0x69,0x6F,0x6E,0x20,0x28,0x6E,0x65,0x61,0x72,
- 0x65,0x73,0x74,0x20,0x6E,0x65,0x69,0x67,0x68,0x62,0x6F,0x72,
- 0x29,0x2C,0x20,0x77,0x68,0x69,0x63,0x68,0x20,0x77,0x69,0x6C,
- 0x6C,0x20,0x72,0x65,0x73,0x75,0x6C,0x74,0x20,0x69,0x6E,0x49,
- 0x61,0x6C,0x69,0x61,0x73,0x69,0x6E,0x67,0x20,0x28,0x6E,0x6F,
- 0x69,0x73,0x65,0x29,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,
- 0x73,0x6F,0x75,0x6E,0x64,0x2E,0x20,0x22,0x4C,0x69,0x6E,0x65,
- 0x61,0x72,0x22,0x20,0x69,0x73,0x20,0x77,0x68,0x61,0x74,0x20,
- 0x72,0x65,0x61,0x6C,0x20,0x46,0x54,0x32,0x20,0x75,0x73,0x65,
- 0x73,0x2C,0x20,0x77,0x68,0x69,0x63,0x68,0x20,0x69,0x73,0x20,
- 0x61,0x47,0x6D,0x65,0x64,0x69,0x6F,0x63,0x72,0x65,0x20,0x69,
- 0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,0x74,0x69,0x6F,0x6E,
- 0x20,0x74,0x79,0x70,0x65,0x2E,0x20,0x22,0x57,0x69,0x6E,0x64,
- 0x6F,0x77,0x65,0x64,0x2D,0x73,0x69,0x6E,0x63,0x22,0x20,0x69,
- 0x73,0x20,0x74,0x68,0x65,0x20,0x72,0x65,0x63,0x6F,0x6D,0x6D,
- 0x65,0x6E,0x64,0x65,0x64,0x20,0x73,0x65,0x74,0x74,0x69,0x6E,
- 0x67,0x48,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x62,0x65,
- 0x73,0x74,0x20,0x61,0x75,0x64,0x69,0x6F,0x20,0x71,0x75,0x61,
- 0x6C,0x69,0x74,0x79,0x2C,0x20,0x61,0x6C,0x74,0x68,0x6F,0x75,
- 0x67,0x68,0x20,0x69,0x74,0x20,0x6D,0x61,0x79,0x20,0x73,0x6F,
- 0x6D,0x65,0x74,0x69,0x6D,0x65,0x73,0x20,0x73,0x6F,0x75,0x6E,
- 0x64,0x20,0x74,0x6F,0x6F,0x20,0x66,0x69,0x6C,0x74,0x65,0x72,
- 0x65,0x64,0x2A,0x6F,0x6E,0x20,0x6C,0x6F,0x77,0x2D,0x71,0x75,
- 0x61,0x6C,0x69,0x74,0x79,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,
- 0x73,0x20,0x28,0x66,0x2E,0x65,0x78,0x2E,0x20,0x41,0x6D,0x69,
- 0x67,0x61,0x20,0x4D,0x4F,0x44,0x73,0x29,0x2E,0x00,0x1A,0x3E,
- 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x56,0x6F,
- 0x6C,0x75,0x6D,0x65,0x20,0x72,0x61,0x6D,0x70,0x69,0x6E,0x67,
- 0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,
- 0x32,0x3B,0x45,0x6E,0x61,0x62,0x6C,0x65,0x73,0x20,0x74,0x68,
- 0x65,0x20,0x61,0x6E,0x74,0x69,0x2D,0x63,0x6C,0x69,0x63,0x6B,
- 0x20,0x73,0x79,0x73,0x74,0x65,0x6D,0x20,0x69,0x6E,0x20,0x74,
- 0x68,0x65,0x20,0x61,0x75,0x64,0x69,0x6F,0x20,0x6D,0x69,0x78,
- 0x65,0x72,0x20,0x28,0x46,0x54,0x32,0x2E,0x30,0x38,0x2B,0x29,
- 0x2E,0x3B,0x50,0x6C,0x65,0x61,0x73,0x65,0x20,0x6E,0x6F,0x74,
- 0x65,0x20,0x74,0x68,0x61,0x74,0x20,0x6F,0x72,0x69,0x67,0x69,
- 0x6E,0x61,0x6C,0x20,0x46,0x54,0x32,0x20,0x63,0x61,0x6E,0x27,
- 0x74,0x20,0x6C,0x6F,0x61,0x64,0x20,0x74,0x68,0x69,0x73,0x20,
- 0x63,0x6F,0x6E,0x66,0x69,0x67,0x20,0x65,0x6E,0x74,0x72,0x79,
- 0x2C,0x0B,0x63,0x6C,0x6F,0x6E,0x65,0x20,0x6F,0x6E,0x6C,0x79,
- 0x2E,0x00,0x19,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
- 0x30,0x31,0x41,0x6D,0x70,0x6C,0x69,0x66,0x69,0x63,0x61,0x74,
+ 0x30,0x32,0x40,0x42,0x79,0x20,0x70,0x72,0x65,0x73,0x73,0x69,
+ 0x6E,0x67,0x20,0x74,0x68,0x65,0x20,0x72,0x69,0x67,0x68,0x74,
+ 0x20,0x6D,0x6F,0x75,0x73,0x65,0x20,0x62,0x75,0x74,0x74,0x6F,
+ 0x6E,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,
+ 0x70,0x6C,0x65,0x20,0x77,0x69,0x6E,0x64,0x6F,0x77,0x2C,0x20,
+ 0x79,0x6F,0x75,0x20,0x63,0x61,0x6E,0x1D,0x64,0x72,0x61,0x77,
+ 0x20,0x79,0x6F,0x75,0x72,0x20,0x77,0x61,0x76,0x65,0x66,0x6F,
+ 0x72,0x6D,0x73,0x20,0x6D,0x61,0x6E,0x75,0x61,0x6C,0x6C,0x79,
+ 0x2E,0x00,0x18,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,
+ 0x31,0x43,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,
+ 0x6F,0x6E,0x3A,0x01,0x3E,0x15,0x3E,0x40,0x58,0x30,0x34,0x30,
+ 0x40,0x43,0x30,0x30,0x31,0x41,0x75,0x74,0x6F,0x20,0x73,0x61,
+ 0x76,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
+ 0x30,0x30,0x32,0x43,0x49,0x66,0x20,0x74,0x68,0x65,0x20,0x61,
+ 0x75,0x74,0x6F,0x20,0x73,0x61,0x76,0x65,0x20,0x69,0x73,0x20,
+ 0x6F,0x6E,0x2C,0x20,0x46,0x54,0x32,0x20,0x77,0x69,0x6C,0x6C,
+ 0x20,0x75,0x70,0x64,0x61,0x74,0x65,0x20,0x74,0x68,0x65,0x20,
+ 0x63,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,
+ 0x6E,0x20,0x66,0x69,0x6C,0x65,0x20,0x77,0x68,0x65,0x6E,0x15,
+ 0x79,0x6F,0x75,0x20,0x65,0x78,0x69,0x74,0x20,0x74,0x68,0x65,
+ 0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x2E,0x00,0x25,0x40,
+ 0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,0x43,0x6F,0x6E,
+ 0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x2C,0x20,
+ 0x49,0x2F,0x4F,0x20,0x64,0x65,0x76,0x69,0x63,0x65,0x73,0x3A,
+ 0x01,0x3E,0x19,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
+ 0x30,0x31,0x49,0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,0x74,
0x69,0x6F,0x6E,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
- 0x43,0x30,0x30,0x32,0x46,0x41,0x6D,0x70,0x6C,0x69,0x66,0x69,
- 0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,
- 0x65,0x20,0x77,0x68,0x65,0x6E,0x20,0x6D,0x69,0x78,0x69,0x6E,
- 0x67,0x2E,0x20,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x73,0x65,
- 0x74,0x20,0x74,0x68,0x69,0x73,0x20,0x6F,0x6E,0x65,0x20,0x74,
- 0x6F,0x6F,0x20,0x68,0x69,0x67,0x68,0x2C,0x20,0x79,0x6F,0x75,
- 0x27,0x6C,0x6C,0x3A,0x67,0x65,0x74,0x20,0x64,0x69,0x73,0x74,
- 0x6F,0x72,0x74,0x69,0x6F,0x6E,0x2E,0x20,0x33,0x32,0x58,0x20,
- 0x65,0x71,0x75,0x61,0x6C,0x73,0x20,0x66,0x75,0x6C,0x6C,0x20,
- 0x61,0x6D,0x70,0x6C,0x69,0x74,0x75,0x64,0x65,0x20,0x66,0x6F,
- 0x72,0x20,0x6F,0x6E,0x65,0x20,0x63,0x68,0x61,0x6E,0x6E,0x65,
- 0x6C,0x2E,0x00,0x1B,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,
- 0x30,0x30,0x31,0x46,0x72,0x65,0x71,0x75,0x65,0x6E,0x63,0x79,
- 0x20,0x74,0x61,0x62,0x6C,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,
- 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x40,0x54,0x68,0x65,0x20,
- 0x6C,0x69,0x6E,0x65,0x61,0x72,0x20,0x66,0x72,0x65,0x71,0x75,
- 0x65,0x6E,0x63,0x79,0x20,0x74,0x61,0x62,0x6C,0x65,0x20,0x6D,
- 0x61,0x6B,0x65,0x73,0x20,0x61,0x6C,0x6C,0x20,0x70,0x69,0x74,
- 0x63,0x68,0x20,0x62,0x65,0x6E,0x64,0x73,0x20,0x72,0x75,0x6E,
- 0x20,0x69,0x6E,0x20,0x63,0x6F,0x6E,0x73,0x74,0x61,0x6E,0x74,
- 0x3F,0x73,0x70,0x65,0x65,0x64,0x2C,0x20,0x69,0x6E,0x64,0x65,
- 0x70,0x65,0x6E,0x64,0x65,0x6E,0x74,0x20,0x6F,0x66,0x20,0x74,
- 0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x66,
- 0x72,0x65,0x71,0x75,0x65,0x6E,0x63,0x79,0x2E,0x20,0x49,0x66,
- 0x20,0x79,0x6F,0x75,0x20,0x73,0x77,0x69,0x74,0x63,0x68,0x20,
- 0x74,0x68,0x69,0x73,0x41,0x6F,0x6E,0x65,0x2C,0x20,0x6F,0x6E,
- 0x20,0x61,0x20,0x66,0x69,0x6E,0x69,0x73,0x68,0x65,0x64,0x20,
- 0x73,0x6F,0x6E,0x67,0x2C,0x20,0x69,0x74,0x20,0x6D,0x69,0x67,
- 0x68,0x74,0x20,0x73,0x6F,0x75,0x6E,0x64,0x20,0x73,0x74,0x72,
- 0x61,0x6E,0x67,0x65,0x20,0x69,0x66,0x20,0x74,0x68,0x65,0x20,
- 0x73,0x6F,0x75,0x6E,0x64,0x20,0x75,0x73,0x65,0x73,0x0D,0x70,
- 0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x65,0x73,0x2E,
- 0x00,0x20,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,
- 0x43,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,
- 0x6E,0x2C,0x20,0x4C,0x61,0x79,0x6F,0x75,0x74,0x3A,0x01,0x3E,
- 0x29,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
- 0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x6C,0x61,0x79,0x6F,
- 0x75,0x74,0x2C,0x20,0x68,0x65,0x78,0x20,0x6E,0x75,0x6D,0x62,
- 0x65,0x72,0x69,0x6E,0x67,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,
- 0x30,0x40,0x43,0x30,0x30,0x32,0x41,0x49,0x66,0x20,0x79,0x6F,
- 0x75,0x20,0x75,0x73,0x65,0x20,0x70,0x61,0x74,0x74,0x65,0x72,
- 0x6E,0x73,0x20,0x74,0x68,0x61,0x74,0x20,0x61,0x72,0x65,0x20,
- 0x6C,0x6F,0x6E,0x67,0x65,0x72,0x20,0x74,0x68,0x61,0x6E,0x20,
- 0x39,0x39,0x20,0x6C,0x69,0x6E,0x65,0x73,0x2C,0x20,0x79,0x6F,
- 0x75,0x20,0x73,0x68,0x6F,0x75,0x6C,0x64,0x20,0x75,0x73,0x65,
- 0x45,0x68,0x65,0x78,0x20,0x63,0x6F,0x75,0x6E,0x74,0x69,0x6E,
- 0x67,0x20,0x73,0x69,0x6E,0x63,0x65,0x20,0x74,0x68,0x65,0x72,
- 0x65,0x20,0x61,0x72,0x65,0x20,0x6F,0x6E,0x6C,0x79,0x20,0x32,
- 0x20,0x64,0x69,0x67,0x69,0x74,0x73,0x20,0x69,0x6E,0x20,0x74,
- 0x68,0x65,0x20,0x6C,0x69,0x6E,0x65,0x20,0x6E,0x75,0x6D,0x62,
- 0x65,0x72,0x20,0x63,0x6F,0x6C,0x75,0x6D,0x6E,0x2E,0x00,0x12,
- 0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,
- 0x63,0x6F,0x70,0x65,0x73,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,
- 0x30,0x40,0x43,0x30,0x30,0x32,0x43,0x22,0x53,0x74,0x64,0x2E,
- 0x22,0x20,0x28,0x73,0x74,0x61,0x6E,0x64,0x61,0x72,0x64,0x29,
- 0x20,0x77,0x69,0x6C,0x6C,0x20,0x73,0x68,0x6F,0x77,0x20,0x74,
- 0x68,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x70,0x6F,
- 0x69,0x6E,0x74,0x73,0x20,0x61,0x73,0x20,0x70,0x69,0x78,0x65,
- 0x6C,0x73,0x20,0x28,0x6C,0x69,0x6B,0x65,0x20,0x46,0x54,0x32,
- 0x29,0x2E,0x41,0x22,0x4C,0x69,0x6E,0x65,0x64,0x22,0x20,0x77,
- 0x69,0x6C,0x6C,0x20,0x64,0x72,0x61,0x77,0x20,0x6C,0x69,0x6E,
- 0x65,0x73,0x20,0x62,0x65,0x74,0x77,0x65,0x65,0x6E,0x20,0x74,
- 0x68,0x65,0x20,0x70,0x6F,0x69,0x6E,0x74,0x73,0x2C,0x20,0x6C,
- 0x69,0x6B,0x65,0x20,0x61,0x6E,0x20,0x6F,0x73,0x63,0x69,0x6C,
- 0x6C,0x6F,0x73,0x63,0x6F,0x70,0x65,0x2E,0x00,0x27,0x40,0x58,
- 0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,0x43,0x6F,0x6E,0x66,
- 0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x2C,0x20,0x4D,
- 0x69,0x73,0x63,0x65,0x6C,0x6C,0x61,0x6E,0x65,0x6F,0x75,0x73,
- 0x3A,0x01,0x3E,0x15,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,
- 0x30,0x30,0x31,0x56,0x53,0x79,0x6E,0x63,0x20,0x6F,0x66,0x66,
+ 0x43,0x30,0x30,0x32,0x35,0x53,0x65,0x6C,0x65,0x63,0x74,0x73,
+ 0x20,0x77,0x68,0x61,0x74,0x20,0x74,0x79,0x70,0x65,0x20,0x6F,
+ 0x66,0x20,0x72,0x65,0x73,0x61,0x6D,0x70,0x6C,0x69,0x6E,0x67,
+ 0x20,0x69,0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,0x74,0x69,
+ 0x6F,0x6E,0x20,0x74,0x6F,0x20,0x75,0x73,0x65,0x2E,0x45,0x22,
+ 0x4E,0x6F,0x6E,0x65,0x22,0x20,0x75,0x73,0x65,0x73,0x20,0x6E,
+ 0x6F,0x20,0x69,0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,0x74,
+ 0x69,0x6F,0x6E,0x20,0x28,0x6E,0x65,0x61,0x72,0x65,0x73,0x74,
+ 0x20,0x6E,0x65,0x69,0x67,0x68,0x62,0x6F,0x72,0x29,0x2C,0x20,
+ 0x77,0x68,0x69,0x63,0x68,0x20,0x77,0x69,0x6C,0x6C,0x20,0x72,
+ 0x65,0x73,0x75,0x6C,0x74,0x20,0x69,0x6E,0x49,0x61,0x6C,0x69,
+ 0x61,0x73,0x69,0x6E,0x67,0x20,0x28,0x6E,0x6F,0x69,0x73,0x65,
+ 0x29,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x73,0x6F,0x75,
+ 0x6E,0x64,0x2E,0x20,0x22,0x4C,0x69,0x6E,0x65,0x61,0x72,0x22,
+ 0x20,0x69,0x73,0x20,0x77,0x68,0x61,0x74,0x20,0x72,0x65,0x61,
+ 0x6C,0x20,0x46,0x54,0x32,0x20,0x75,0x73,0x65,0x73,0x2C,0x20,
+ 0x77,0x68,0x69,0x63,0x68,0x20,0x69,0x73,0x20,0x61,0x47,0x6D,
+ 0x65,0x64,0x69,0x6F,0x63,0x72,0x65,0x20,0x69,0x6E,0x74,0x65,
+ 0x72,0x70,0x6F,0x6C,0x61,0x74,0x69,0x6F,0x6E,0x20,0x74,0x79,
+ 0x70,0x65,0x2E,0x20,0x22,0x57,0x69,0x6E,0x64,0x6F,0x77,0x65,
+ 0x64,0x2D,0x73,0x69,0x6E,0x63,0x22,0x20,0x69,0x73,0x20,0x74,
+ 0x68,0x65,0x20,0x72,0x65,0x63,0x6F,0x6D,0x6D,0x65,0x6E,0x64,
+ 0x65,0x64,0x20,0x73,0x65,0x74,0x74,0x69,0x6E,0x67,0x48,0x66,
+ 0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x62,0x65,0x73,0x74,0x20,
+ 0x61,0x75,0x64,0x69,0x6F,0x20,0x71,0x75,0x61,0x6C,0x69,0x74,
+ 0x79,0x2C,0x20,0x61,0x6C,0x74,0x68,0x6F,0x75,0x67,0x68,0x20,
+ 0x69,0x74,0x20,0x6D,0x61,0x79,0x20,0x73,0x6F,0x6D,0x65,0x74,
+ 0x69,0x6D,0x65,0x73,0x20,0x73,0x6F,0x75,0x6E,0x64,0x20,0x74,
+ 0x6F,0x6F,0x20,0x66,0x69,0x6C,0x74,0x65,0x72,0x65,0x64,0x2A,
+ 0x6F,0x6E,0x20,0x6C,0x6F,0x77,0x2D,0x71,0x75,0x61,0x6C,0x69,
+ 0x74,0x79,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x73,0x20,0x28,
+ 0x66,0x2E,0x65,0x78,0x2E,0x20,0x41,0x6D,0x69,0x67,0x61,0x20,
+ 0x4D,0x4F,0x44,0x73,0x29,0x2E,0x00,0x1A,0x3E,0x40,0x58,0x30,
+ 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x56,0x6F,0x6C,0x75,0x6D,
+ 0x65,0x20,0x72,0x61,0x6D,0x70,0x69,0x6E,0x67,0x3A,0x0B,0x3E,
+ 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3B,0x45,
+ 0x6E,0x61,0x62,0x6C,0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x61,
+ 0x6E,0x74,0x69,0x2D,0x63,0x6C,0x69,0x63,0x6B,0x20,0x73,0x79,
+ 0x73,0x74,0x65,0x6D,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,
+ 0x61,0x75,0x64,0x69,0x6F,0x20,0x6D,0x69,0x78,0x65,0x72,0x20,
+ 0x28,0x46,0x54,0x32,0x2E,0x30,0x38,0x2B,0x29,0x2E,0x3B,0x50,
+ 0x6C,0x65,0x61,0x73,0x65,0x20,0x6E,0x6F,0x74,0x65,0x20,0x74,
+ 0x68,0x61,0x74,0x20,0x6F,0x72,0x69,0x67,0x69,0x6E,0x61,0x6C,
+ 0x20,0x46,0x54,0x32,0x20,0x63,0x61,0x6E,0x27,0x74,0x20,0x6C,
+ 0x6F,0x61,0x64,0x20,0x74,0x68,0x69,0x73,0x20,0x63,0x6F,0x6E,
+ 0x66,0x69,0x67,0x20,0x65,0x6E,0x74,0x72,0x79,0x2C,0x0B,0x63,
+ 0x6C,0x6F,0x6E,0x65,0x20,0x6F,0x6E,0x6C,0x79,0x2E,0x00,0x19,
+ 0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x41,
+ 0x6D,0x70,0x6C,0x69,0x66,0x69,0x63,0x61,0x74,0x69,0x6F,0x6E,
0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,
- 0x32,0x3F,0x54,0x65,0x6C,0x6C,0x73,0x20,0x74,0x68,0x65,0x20,
- 0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,0x74,0x6F,0x20,0x6E,
- 0x6F,0x74,0x20,0x75,0x73,0x65,0x20,0x56,0x53,0x79,0x6E,0x63,
- 0x20,0x66,0x6F,0x72,0x20,0x76,0x69,0x64,0x65,0x6F,0x2E,0x20,
- 0x49,0x66,0x20,0x79,0x6F,0x75,0x72,0x20,0x6D,0x6F,0x6E,0x69,
- 0x74,0x6F,0x72,0x27,0x73,0x40,0x72,0x65,0x66,0x72,0x65,0x73,
- 0x68,0x20,0x72,0x61,0x74,0x65,0x20,0x69,0x73,0x20,0x6E,0x6F,
- 0x74,0x20,0x36,0x30,0x48,0x7A,0x20,0x28,0x6F,0x72,0x20,0x35,
- 0x39,0x48,0x7A,0x29,0x2C,0x20,0x74,0x68,0x65,0x6E,0x20,0x56,
- 0x53,0x79,0x6E,0x63,0x20,0x69,0x73,0x20,0x61,0x6C,0x77,0x61,
- 0x79,0x73,0x20,0x6F,0x66,0x66,0x20,0x66,0x6F,0x72,0x45,0x74,
- 0x68,0x69,0x73,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x2E,
- 0x20,0x4E,0x6F,0x74,0x20,0x68,0x61,0x76,0x69,0x6E,0x67,0x20,
- 0x56,0x53,0x79,0x6E,0x63,0x20,0x77,0x69,0x6C,0x6C,0x20,0x72,
- 0x65,0x73,0x75,0x6C,0x74,0x20,0x69,0x6E,0x20,0x6C,0x65,0x73,
- 0x73,0x20,0x69,0x6E,0x70,0x75,0x74,0x2F,0x76,0x69,0x64,0x65,
- 0x6F,0x20,0x64,0x65,0x6C,0x61,0x79,0x2C,0x1E,0x62,0x75,0x74,
- 0x20,0x61,0x6C,0x73,0x6F,0x20,0x70,0x6F,0x74,0x65,0x6E,0x74,
- 0x69,0x61,0x6C,0x20,0x73,0x74,0x75,0x74,0x74,0x65,0x72,0x69,
- 0x6E,0x67,0x2E,0x00,0x15,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,
- 0x43,0x30,0x30,0x31,0x53,0x74,0x72,0x65,0x74,0x63,0x68,0x65,
- 0x64,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
- 0x30,0x32,0x4A,0x4D,0x61,0x6B,0x65,0x73,0x20,0x66,0x75,0x6C,
- 0x6C,0x73,0x63,0x72,0x65,0x65,0x6E,0x20,0x6D,0x6F,0x64,0x65,
- 0x20,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65,0x6C,0x79,0x20,
- 0x73,0x74,0x72,0x65,0x74,0x63,0x68,0x20,0x6F,0x75,0x74,0x20,
- 0x74,0x68,0x65,0x20,0x69,0x6D,0x61,0x67,0x65,0x2E,0x20,0x54,
- 0x68,0x69,0x73,0x20,0x63,0x61,0x6E,0x20,0x72,0x65,0x73,0x75,
- 0x6C,0x74,0x20,0x69,0x6E,0x4E,0x61,0x6C,0x69,0x61,0x73,0x69,
- 0x6E,0x67,0x20,0x28,0x75,0x6E,0x65,0x76,0x65,0x6E,0x20,0x70,
- 0x69,0x78,0x65,0x6C,0x20,0x77,0x69,0x64,0x74,0x68,0x73,0x29,
- 0x20,0x69,0x66,0x20,0x74,0x68,0x65,0x20,0x61,0x73,0x70,0x65,
- 0x63,0x74,0x20,0x72,0x61,0x74,0x69,0x6F,0x20,0x6F,0x66,0x20,
- 0x74,0x68,0x65,0x20,0x73,0x63,0x72,0x65,0x65,0x6E,0x20,0x69,
- 0x73,0x20,0x6E,0x6F,0x74,0x20,0x31,0x36,0x3A,0x31,0x30,0x2E,
- 0x52,0x54,0x68,0x65,0x20,0x22,0x50,0x69,0x78,0x65,0x6C,0x20,
- 0x66,0x69,0x6C,0x74,0x65,0x72,0x22,0x20,0x73,0x65,0x74,0x74,
- 0x69,0x6E,0x67,0x20,0x63,0x61,0x6E,0x20,0x68,0x65,0x6C,0x70,
- 0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x68,0x69,0x73,0x2C,0x20,
- 0x62,0x75,0x74,0x20,0x69,0x74,0x20,0x6D,0x61,0x6B,0x65,0x73,
- 0x20,0x74,0x68,0x65,0x20,0x69,0x6D,0x61,0x67,0x65,0x20,0x6C,
- 0x6F,0x6F,0x6B,0x20,0x62,0x6C,0x75,0x72,0x72,0x79,0x2E,0x01,
- 0x20,0x18,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
- 0x31,0x50,0x69,0x78,0x65,0x6C,0x20,0x66,0x69,0x6C,0x74,0x65,
- 0x72,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
- 0x30,0x32,0x52,0x41,0x70,0x70,0x6C,0x69,0x65,0x73,0x20,0x61,
- 0x6E,0x20,0x61,0x6E,0x74,0x69,0x2D,0x61,0x6C,0x69,0x61,0x73,
- 0x69,0x6E,0x67,0x20,0x73,0x75,0x62,0x70,0x69,0x78,0x65,0x6C,
- 0x20,0x66,0x69,0x6C,0x74,0x65,0x72,0x20,0x74,0x68,0x61,0x74,
- 0x20,0x69,0x73,0x20,0x75,0x73,0x65,0x64,0x20,0x77,0x68,0x65,
- 0x6E,0x20,0x74,0x68,0x65,0x20,0x77,0x69,0x6E,0x64,0x6F,0x77,
- 0x20,0x69,0x73,0x20,0x75,0x70,0x73,0x63,0x61,0x6C,0x65,0x64,
- 0x2E,0x3B,0x50,0x6C,0x65,0x61,0x73,0x65,0x20,0x6B,0x65,0x65,
- 0x70,0x20,0x69,0x6E,0x20,0x6D,0x69,0x6E,0x64,0x20,0x74,0x68,
- 0x61,0x74,0x20,0x74,0x68,0x69,0x73,0x20,0x77,0x69,0x6C,0x6C,
- 0x20,0x6D,0x61,0x6B,0x65,0x20,0x70,0x69,0x78,0x65,0x6C,0x73,
- 0x20,0x6C,0x6F,0x6F,0x6B,0x20,0x62,0x6C,0x75,0x72,0x72,0x79,
- 0x2E,0x00,0x23,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,
- 0x31,0x41,0x64,0x76,0x61,0x6E,0x63,0x65,0x64,0x20,0x65,0x64,
- 0x69,0x74,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x73,
- 0x3A,0x20,0x01,0x3E,0x1E,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,
- 0x43,0x30,0x30,0x31,0x43,0x6F,0x70,0x79,0x2F,0x50,0x61,0x73,
- 0x74,0x65,0x20,0x6D,0x61,0x73,0x6B,0x69,0x6E,0x67,0x3A,0x0B,
- 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x37,
- 0x54,0x68,0x65,0x20,0x6D,0x61,0x73,0x6B,0x69,0x6E,0x67,0x20,
- 0x69,0x73,0x20,0x75,0x73,0x65,0x64,0x20,0x66,0x6F,0x72,0x20,
- 0x63,0x6F,0x70,0x79,0x69,0x6E,0x67,0x2F,0x70,0x61,0x73,0x74,
- 0x69,0x6E,0x67,0x20,0x6F,0x6E,0x6C,0x79,0x20,0x70,0x61,0x72,
- 0x74,0x73,0x20,0x6F,0x66,0x20,0x61,0x46,0x22,0x6E,0x6F,0x74,
- 0x65,0x2D,0x63,0x65,0x6C,0x6C,0x22,0x2E,0x20,0x54,0x68,0x65,
- 0x20,0x64,0x69,0x66,0x66,0x65,0x72,0x65,0x6E,0x74,0x20,0x70,
- 0x61,0x72,0x74,0x73,0x20,0x6F,0x66,0x20,0x61,0x20,0x22,0x6E,
- 0x6F,0x74,0x65,0x2D,0x63,0x65,0x6C,0x6C,0x22,0x20,0x69,0x73,
- 0x20,0x4E,0x6F,0x74,0x65,0x2C,0x20,0x49,0x6E,0x73,0x74,0x72,
- 0x2E,0x20,0x6E,0x72,0x2E,0x2C,0x20,0x56,0x6F,0x6C,0x75,0x6D,
- 0x65,0x2C,0x20,0x45,0x66,0x66,0x65,0x63,0x74,0x20,0x6E,0x72,
- 0x20,0x26,0x20,0x45,0x66,0x66,0x65,0x63,0x74,0x20,0x64,0x61,
- 0x74,0x61,0x2E,0x34,0x3E,0x41,0x73,0x20,0x79,0x6F,0x75,0x20,
- 0x63,0x61,0x6E,0x20,0x73,0x65,0x65,0x20,0x69,0x6E,0x20,0x74,
- 0x68,0x65,0x20,0x77,0x69,0x6E,0x64,0x6F,0x77,0x20,0x74,0x68,
- 0x65,0x72,0x65,0x20,0x61,0x72,0x65,0x20,0x33,0x20,0x63,0x6F,
- 0x6C,0x75,0x6D,0x6E,0x73,0x20,0x6F,0x66,0x3D,0x22,0x65,0x6E,
- 0x61,0x62,0x6C,0x65,0x2F,0x64,0x69,0x73,0x61,0x62,0x6C,0x65,
- 0x20,0x62,0x75,0x74,0x74,0x6F,0x6E,0x73,0x22,0x20,0x77,0x68,
- 0x69,0x63,0x68,0x20,0x68,0x61,0x73,0x20,0x74,0x68,0x65,0x20,
- 0x6C,0x65,0x74,0x74,0x65,0x72,0x73,0x20,0x43,0x2C,0x50,0x20,
- 0x26,0x20,0x54,0x20,0x61,0x62,0x6F,0x76,0x65,0x2E,0x45,0x3E,
- 0x43,0x20,0x6D,0x65,0x61,0x6E,0x73,0x20,0x63,0x6F,0x70,0x79,
- 0x2C,0x20,0x69,0x74,0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,
- 0x73,0x20,0x77,0x68,0x69,0x63,0x68,0x20,0x70,0x61,0x72,0x74,
- 0x73,0x20,0x74,0x68,0x61,0x74,0x20,0x67,0x6F,0x65,0x73,0x20,
- 0x69,0x6E,0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x63,0x6F,0x70,
- 0x79,0x62,0x75,0x66,0x66,0x65,0x72,0x2E,0x3E,0x3E,0x50,0x20,
- 0x6D,0x65,0x61,0x6E,0x73,0x20,0x70,0x61,0x73,0x74,0x65,0x20,
- 0x61,0x6E,0x64,0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x73,
- 0x20,0x77,0x68,0x69,0x63,0x68,0x20,0x70,0x61,0x72,0x74,0x73,
- 0x20,0x74,0x68,0x61,0x74,0x20,0x67,0x6F,0x65,0x73,0x20,0x6F,
- 0x75,0x74,0x20,0x66,0x72,0x6F,0x6D,0x20,0x74,0x68,0x65,0x0B,
- 0x63,0x6F,0x70,0x79,0x62,0x75,0x66,0x66,0x65,0x72,0x2E,0x45,
- 0x3E,0x54,0x20,0x6D,0x65,0x61,0x6E,0x73,0x20,0x74,0x72,0x61,
- 0x6E,0x73,0x70,0x61,0x72,0x65,0x6E,0x63,0x79,0x2E,0x20,0x49,
- 0x66,0x20,0x69,0x74,0x27,0x73,0x20,0x65,0x6E,0x61,0x62,0x6C,
- 0x65,0x64,0x2C,0x20,0x74,0x68,0x65,0x20,0x70,0x61,0x73,0x74,
- 0x69,0x6E,0x67,0x20,0x64,0x6F,0x65,0x73,0x6E,0x27,0x74,0x20,
- 0x6F,0x76,0x65,0x72,0x77,0x72,0x69,0x74,0x65,0x3D,0x64,0x61,
- 0x74,0x61,0x20,0x77,0x69,0x74,0x68,0x20,0x6E,0x69,0x6C,0x2D,
- 0x69,0x6E,0x66,0x6F,0x72,0x6D,0x61,0x74,0x69,0x6F,0x6E,0x2C,
- 0x20,0x6F,0x6E,0x6C,0x79,0x20,0x77,0x69,0x74,0x68,0x20,0x61,
- 0x20,0x6E,0x6F,0x74,0x65,0x20,0x6F,0x72,0x20,0x61,0x20,0x6E,
- 0x75,0x6D,0x62,0x65,0x72,0x20,0x3C,0x3E,0x20,0x30,0x2E,0x01,
- 0x3E,0x40,0x3E,0x54,0x68,0x65,0x20,0x63,0x75,0x74,0x20,0x66,
- 0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x73,0x20,0x77,0x6F,0x72,
- 0x6B,0x73,0x20,0x6C,0x69,0x6B,0x65,0x20,0x70,0x61,0x73,0x74,
- 0x69,0x6E,0x67,0x20,0x77,0x69,0x74,0x68,0x20,0x7A,0x65,0x72,
- 0x6F,0x2D,0x64,0x61,0x74,0x61,0x2E,0x20,0x54,0x68,0x69,0x73,
- 0x20,0x6D,0x65,0x61,0x6E,0x73,0x3B,0x74,0x68,0x61,0x74,0x20,
- 0x74,0x68,0x65,0x20,0x63,0x75,0x74,0x74,0x69,0x6E,0x67,0x20,
- 0x69,0x73,0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x6C,0x65,
- 0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x50,0x2D,0x63,0x6F,0x6C,
- 0x75,0x6D,0x6E,0x20,0x28,0x6F,0x72,0x20,0x54,0x2D,0x63,0x6F,
- 0x6C,0x75,0x6D,0x6E,0x29,0x2E,0x3C,0x3E,0x57,0x68,0x65,0x6E,
- 0x20,0x79,0x6F,0x75,0x20,0x63,0x6F,0x70,0x79,0x20,0x64,0x61,
- 0x74,0x61,0x20,0x77,0x69,0x74,0x68,0x20,0x6D,0x61,0x73,0x6B,
- 0x69,0x6E,0x67,0x2C,0x20,0x74,0x68,0x65,0x20,0x64,0x69,0x73,
- 0x61,0x62,0x6C,0x65,0x64,0x20,0x70,0x61,0x72,0x74,0x73,0x20,
- 0x61,0x72,0x65,0x20,0x6E,0x6F,0x74,0x43,0x63,0x6C,0x65,0x61,
- 0x72,0x65,0x64,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x63,
- 0x6F,0x70,0x79,0x62,0x75,0x66,0x66,0x65,0x72,0x2E,0x20,0x28,
- 0x4D,0x61,0x6B,0x69,0x6E,0x67,0x20,0x69,0x74,0x20,0x70,0x6F,
- 0x73,0x73,0x69,0x62,0x6C,0x65,0x20,0x74,0x6F,0x20,0x63,0x6F,
- 0x6C,0x6C,0x65,0x63,0x74,0x20,0x64,0x61,0x74,0x61,0x20,0x66,
- 0x72,0x6F,0x6D,0x27,0x73,0x65,0x76,0x65,0x72,0x61,0x6C,0x20,
- 0x6C,0x6F,0x63,0x61,0x74,0x69,0x6F,0x6E,0x73,0x20,0x69,0x6E,
- 0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x63,0x6F,0x70,0x79,0x62,
- 0x75,0x66,0x66,0x65,0x72,0x2E,0x29,0x00,0x03,0x45,0x4E,0x44,
- 0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
+ 0x32,0x46,0x41,0x6D,0x70,0x6C,0x69,0x66,0x69,0x65,0x73,0x20,
+ 0x74,0x68,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x77,
+ 0x68,0x65,0x6E,0x20,0x6D,0x69,0x78,0x69,0x6E,0x67,0x2E,0x20,
+ 0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x73,0x65,0x74,0x20,0x74,
+ 0x68,0x69,0x73,0x20,0x6F,0x6E,0x65,0x20,0x74,0x6F,0x6F,0x20,
+ 0x68,0x69,0x67,0x68,0x2C,0x20,0x79,0x6F,0x75,0x27,0x6C,0x6C,
+ 0x3A,0x67,0x65,0x74,0x20,0x64,0x69,0x73,0x74,0x6F,0x72,0x74,
+ 0x69,0x6F,0x6E,0x2E,0x20,0x33,0x32,0x58,0x20,0x65,0x71,0x75,
+ 0x61,0x6C,0x73,0x20,0x66,0x75,0x6C,0x6C,0x20,0x61,0x6D,0x70,
+ 0x6C,0x69,0x74,0x75,0x64,0x65,0x20,0x66,0x6F,0x72,0x20,0x6F,
+ 0x6E,0x65,0x20,0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x2E,0x00,
+ 0x1B,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
+ 0x46,0x72,0x65,0x71,0x75,0x65,0x6E,0x63,0x79,0x20,0x74,0x61,
+ 0x62,0x6C,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
+ 0x43,0x30,0x30,0x32,0x40,0x54,0x68,0x65,0x20,0x6C,0x69,0x6E,
+ 0x65,0x61,0x72,0x20,0x66,0x72,0x65,0x71,0x75,0x65,0x6E,0x63,
+ 0x79,0x20,0x74,0x61,0x62,0x6C,0x65,0x20,0x6D,0x61,0x6B,0x65,
+ 0x73,0x20,0x61,0x6C,0x6C,0x20,0x70,0x69,0x74,0x63,0x68,0x20,
+ 0x62,0x65,0x6E,0x64,0x73,0x20,0x72,0x75,0x6E,0x20,0x69,0x6E,
+ 0x20,0x63,0x6F,0x6E,0x73,0x74,0x61,0x6E,0x74,0x3F,0x73,0x70,
+ 0x65,0x65,0x64,0x2C,0x20,0x69,0x6E,0x64,0x65,0x70,0x65,0x6E,
+ 0x64,0x65,0x6E,0x74,0x20,0x6F,0x66,0x20,0x74,0x68,0x65,0x20,
+ 0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x66,0x72,0x65,0x71,
+ 0x75,0x65,0x6E,0x63,0x79,0x2E,0x20,0x49,0x66,0x20,0x79,0x6F,
+ 0x75,0x20,0x73,0x77,0x69,0x74,0x63,0x68,0x20,0x74,0x68,0x69,
+ 0x73,0x41,0x6F,0x6E,0x65,0x2C,0x20,0x6F,0x6E,0x20,0x61,0x20,
+ 0x66,0x69,0x6E,0x69,0x73,0x68,0x65,0x64,0x20,0x73,0x6F,0x6E,
+ 0x67,0x2C,0x20,0x69,0x74,0x20,0x6D,0x69,0x67,0x68,0x74,0x20,
+ 0x73,0x6F,0x75,0x6E,0x64,0x20,0x73,0x74,0x72,0x61,0x6E,0x67,
+ 0x65,0x20,0x69,0x66,0x20,0x74,0x68,0x65,0x20,0x73,0x6F,0x75,
+ 0x6E,0x64,0x20,0x75,0x73,0x65,0x73,0x0D,0x70,0x6F,0x72,0x74,
+ 0x61,0x6D,0x65,0x6E,0x74,0x6F,0x65,0x73,0x2E,0x00,0x20,0x40,
+ 0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,0x43,0x6F,0x6E,
+ 0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x2C,0x20,
+ 0x4C,0x61,0x79,0x6F,0x75,0x74,0x3A,0x01,0x3E,0x29,0x3E,0x40,
+ 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x50,0x61,0x74,
+ 0x74,0x65,0x72,0x6E,0x20,0x6C,0x61,0x79,0x6F,0x75,0x74,0x2C,
+ 0x20,0x68,0x65,0x78,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x69,
+ 0x6E,0x67,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
+ 0x30,0x30,0x32,0x41,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x75,
+ 0x73,0x65,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x73,0x20,
+ 0x74,0x68,0x61,0x74,0x20,0x61,0x72,0x65,0x20,0x6C,0x6F,0x6E,
+ 0x67,0x65,0x72,0x20,0x74,0x68,0x61,0x6E,0x20,0x39,0x39,0x20,
+ 0x6C,0x69,0x6E,0x65,0x73,0x2C,0x20,0x79,0x6F,0x75,0x20,0x73,
+ 0x68,0x6F,0x75,0x6C,0x64,0x20,0x75,0x73,0x65,0x45,0x68,0x65,
+ 0x78,0x20,0x63,0x6F,0x75,0x6E,0x74,0x69,0x6E,0x67,0x20,0x73,
+ 0x69,0x6E,0x63,0x65,0x20,0x74,0x68,0x65,0x72,0x65,0x20,0x61,
+ 0x72,0x65,0x20,0x6F,0x6E,0x6C,0x79,0x20,0x32,0x20,0x64,0x69,
+ 0x67,0x69,0x74,0x73,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,
+ 0x6C,0x69,0x6E,0x65,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,
+ 0x63,0x6F,0x6C,0x75,0x6D,0x6E,0x2E,0x00,0x12,0x3E,0x40,0x58,
+ 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x63,0x6F,0x70,
+ 0x65,0x73,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
+ 0x30,0x30,0x32,0x43,0x22,0x53,0x74,0x64,0x2E,0x22,0x20,0x28,
+ 0x73,0x74,0x61,0x6E,0x64,0x61,0x72,0x64,0x29,0x20,0x77,0x69,
+ 0x6C,0x6C,0x20,0x73,0x68,0x6F,0x77,0x20,0x74,0x68,0x65,0x20,
+ 0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x70,0x6F,0x69,0x6E,0x74,
+ 0x73,0x20,0x61,0x73,0x20,0x70,0x69,0x78,0x65,0x6C,0x73,0x20,
+ 0x28,0x6C,0x69,0x6B,0x65,0x20,0x46,0x54,0x32,0x29,0x2E,0x41,
+ 0x22,0x4C,0x69,0x6E,0x65,0x64,0x22,0x20,0x77,0x69,0x6C,0x6C,
+ 0x20,0x64,0x72,0x61,0x77,0x20,0x6C,0x69,0x6E,0x65,0x73,0x20,
+ 0x62,0x65,0x74,0x77,0x65,0x65,0x6E,0x20,0x74,0x68,0x65,0x20,
+ 0x70,0x6F,0x69,0x6E,0x74,0x73,0x2C,0x20,0x6C,0x69,0x6B,0x65,
+ 0x20,0x61,0x6E,0x20,0x6F,0x73,0x63,0x69,0x6C,0x6C,0x6F,0x73,
+ 0x63,0x6F,0x70,0x65,0x2E,0x00,0x27,0x40,0x58,0x30,0x32,0x30,
+ 0x40,0x43,0x30,0x30,0x31,0x43,0x6F,0x6E,0x66,0x69,0x67,0x75,
+ 0x72,0x61,0x74,0x69,0x6F,0x6E,0x2C,0x20,0x4D,0x69,0x73,0x63,
+ 0x65,0x6C,0x6C,0x61,0x6E,0x65,0x6F,0x75,0x73,0x3A,0x01,0x3E,
+ 0x15,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
+ 0x56,0x53,0x79,0x6E,0x63,0x20,0x6F,0x66,0x66,0x3A,0x0B,0x3E,
+ 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3F,0x54,
+ 0x65,0x6C,0x6C,0x73,0x20,0x74,0x68,0x65,0x20,0x70,0x72,0x6F,
+ 0x67,0x72,0x61,0x6D,0x20,0x74,0x6F,0x20,0x6E,0x6F,0x74,0x20,
+ 0x75,0x73,0x65,0x20,0x56,0x53,0x79,0x6E,0x63,0x20,0x66,0x6F,
+ 0x72,0x20,0x76,0x69,0x64,0x65,0x6F,0x2E,0x20,0x49,0x66,0x20,
+ 0x79,0x6F,0x75,0x72,0x20,0x6D,0x6F,0x6E,0x69,0x74,0x6F,0x72,
+ 0x27,0x73,0x40,0x72,0x65,0x66,0x72,0x65,0x73,0x68,0x20,0x72,
+ 0x61,0x74,0x65,0x20,0x69,0x73,0x20,0x6E,0x6F,0x74,0x20,0x36,
+ 0x30,0x48,0x7A,0x20,0x28,0x6F,0x72,0x20,0x35,0x39,0x48,0x7A,
+ 0x29,0x2C,0x20,0x74,0x68,0x65,0x6E,0x20,0x56,0x53,0x79,0x6E,
+ 0x63,0x20,0x69,0x73,0x20,0x61,0x6C,0x77,0x61,0x79,0x73,0x20,
+ 0x6F,0x66,0x66,0x20,0x66,0x6F,0x72,0x45,0x74,0x68,0x69,0x73,
+ 0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x2E,0x20,0x4E,0x6F,
+ 0x74,0x20,0x68,0x61,0x76,0x69,0x6E,0x67,0x20,0x56,0x53,0x79,
+ 0x6E,0x63,0x20,0x77,0x69,0x6C,0x6C,0x20,0x72,0x65,0x73,0x75,
+ 0x6C,0x74,0x20,0x69,0x6E,0x20,0x6C,0x65,0x73,0x73,0x20,0x69,
+ 0x6E,0x70,0x75,0x74,0x2F,0x76,0x69,0x64,0x65,0x6F,0x20,0x64,
+ 0x65,0x6C,0x61,0x79,0x2C,0x1E,0x62,0x75,0x74,0x20,0x61,0x6C,
+ 0x73,0x6F,0x20,0x70,0x6F,0x74,0x65,0x6E,0x74,0x69,0x61,0x6C,
+ 0x20,0x73,0x74,0x75,0x74,0x74,0x65,0x72,0x69,0x6E,0x67,0x2E,
+ 0x00,0x15,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
+ 0x31,0x53,0x74,0x72,0x65,0x74,0x63,0x68,0x65,0x64,0x3A,0x0B,
+ 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x4A,
+ 0x4D,0x61,0x6B,0x65,0x73,0x20,0x66,0x75,0x6C,0x6C,0x73,0x63,
+ 0x72,0x65,0x65,0x6E,0x20,0x6D,0x6F,0x64,0x65,0x20,0x63,0x6F,
+ 0x6D,0x70,0x6C,0x65,0x74,0x65,0x6C,0x79,0x20,0x73,0x74,0x72,
+ 0x65,0x74,0x63,0x68,0x20,0x6F,0x75,0x74,0x20,0x74,0x68,0x65,
+ 0x20,0x69,0x6D,0x61,0x67,0x65,0x2E,0x20,0x54,0x68,0x69,0x73,
+ 0x20,0x63,0x61,0x6E,0x20,0x72,0x65,0x73,0x75,0x6C,0x74,0x20,
+ 0x69,0x6E,0x4E,0x61,0x6C,0x69,0x61,0x73,0x69,0x6E,0x67,0x20,
+ 0x28,0x75,0x6E,0x65,0x76,0x65,0x6E,0x20,0x70,0x69,0x78,0x65,
+ 0x6C,0x20,0x77,0x69,0x64,0x74,0x68,0x73,0x29,0x20,0x69,0x66,
+ 0x20,0x74,0x68,0x65,0x20,0x61,0x73,0x70,0x65,0x63,0x74,0x20,
+ 0x72,0x61,0x74,0x69,0x6F,0x20,0x6F,0x66,0x20,0x74,0x68,0x65,
+ 0x20,0x73,0x63,0x72,0x65,0x65,0x6E,0x20,0x69,0x73,0x20,0x6E,
+ 0x6F,0x74,0x20,0x31,0x36,0x3A,0x31,0x30,0x2E,0x52,0x54,0x68,
+ 0x65,0x20,0x22,0x50,0x69,0x78,0x65,0x6C,0x20,0x66,0x69,0x6C,
+ 0x74,0x65,0x72,0x22,0x20,0x73,0x65,0x74,0x74,0x69,0x6E,0x67,
+ 0x20,0x63,0x61,0x6E,0x20,0x68,0x65,0x6C,0x70,0x20,0x77,0x69,
+ 0x74,0x68,0x20,0x74,0x68,0x69,0x73,0x2C,0x20,0x62,0x75,0x74,
+ 0x20,0x69,0x74,0x20,0x6D,0x61,0x6B,0x65,0x73,0x20,0x74,0x68,
+ 0x65,0x20,0x69,0x6D,0x61,0x67,0x65,0x20,0x6C,0x6F,0x6F,0x6B,
+ 0x20,0x62,0x6C,0x75,0x72,0x72,0x79,0x2E,0x01,0x20,0x18,0x3E,
+ 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x50,0x69,
+ 0x78,0x65,0x6C,0x20,0x66,0x69,0x6C,0x74,0x65,0x72,0x3A,0x0B,
+ 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x52,
+ 0x41,0x70,0x70,0x6C,0x69,0x65,0x73,0x20,0x61,0x6E,0x20,0x61,
+ 0x6E,0x74,0x69,0x2D,0x61,0x6C,0x69,0x61,0x73,0x69,0x6E,0x67,
+ 0x20,0x73,0x75,0x62,0x70,0x69,0x78,0x65,0x6C,0x20,0x66,0x69,
+ 0x6C,0x74,0x65,0x72,0x20,0x74,0x68,0x61,0x74,0x20,0x69,0x73,
+ 0x20,0x75,0x73,0x65,0x64,0x20,0x77,0x68,0x65,0x6E,0x20,0x74,
+ 0x68,0x65,0x20,0x77,0x69,0x6E,0x64,0x6F,0x77,0x20,0x69,0x73,
+ 0x20,0x75,0x70,0x73,0x63,0x61,0x6C,0x65,0x64,0x2E,0x3B,0x50,
+ 0x6C,0x65,0x61,0x73,0x65,0x20,0x6B,0x65,0x65,0x70,0x20,0x69,
+ 0x6E,0x20,0x6D,0x69,0x6E,0x64,0x20,0x74,0x68,0x61,0x74,0x20,
+ 0x74,0x68,0x69,0x73,0x20,0x77,0x69,0x6C,0x6C,0x20,0x6D,0x61,
+ 0x6B,0x65,0x20,0x70,0x69,0x78,0x65,0x6C,0x73,0x20,0x6C,0x6F,
+ 0x6F,0x6B,0x20,0x62,0x6C,0x75,0x72,0x72,0x79,0x2E,0x00,0x23,
+ 0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,0x41,0x64,
+ 0x76,0x61,0x6E,0x63,0x65,0x64,0x20,0x65,0x64,0x69,0x74,0x20,
+ 0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x73,0x3A,0x20,0x01,
+ 0x3E,0x1E,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
+ 0x31,0x43,0x6F,0x70,0x79,0x2F,0x50,0x61,0x73,0x74,0x65,0x20,
+ 0x6D,0x61,0x73,0x6B,0x69,0x6E,0x67,0x3A,0x0B,0x3E,0x40,0x58,
+ 0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x37,0x54,0x68,0x65,
+ 0x20,0x6D,0x61,0x73,0x6B,0x69,0x6E,0x67,0x20,0x69,0x73,0x20,
+ 0x75,0x73,0x65,0x64,0x20,0x66,0x6F,0x72,0x20,0x63,0x6F,0x70,
+ 0x79,0x69,0x6E,0x67,0x2F,0x70,0x61,0x73,0x74,0x69,0x6E,0x67,
+ 0x20,0x6F,0x6E,0x6C,0x79,0x20,0x70,0x61,0x72,0x74,0x73,0x20,
+ 0x6F,0x66,0x20,0x61,0x46,0x22,0x6E,0x6F,0x74,0x65,0x2D,0x63,
+ 0x65,0x6C,0x6C,0x22,0x2E,0x20,0x54,0x68,0x65,0x20,0x64,0x69,
+ 0x66,0x66,0x65,0x72,0x65,0x6E,0x74,0x20,0x70,0x61,0x72,0x74,
+ 0x73,0x20,0x6F,0x66,0x20,0x61,0x20,0x22,0x6E,0x6F,0x74,0x65,
+ 0x2D,0x63,0x65,0x6C,0x6C,0x22,0x20,0x69,0x73,0x20,0x4E,0x6F,
+ 0x74,0x65,0x2C,0x20,0x49,0x6E,0x73,0x74,0x72,0x2E,0x20,0x6E,
+ 0x72,0x2E,0x2C,0x20,0x56,0x6F,0x6C,0x75,0x6D,0x65,0x2C,0x20,
+ 0x45,0x66,0x66,0x65,0x63,0x74,0x20,0x6E,0x72,0x20,0x26,0x20,
+ 0x45,0x66,0x66,0x65,0x63,0x74,0x20,0x64,0x61,0x74,0x61,0x2E,
+ 0x34,0x3E,0x41,0x73,0x20,0x79,0x6F,0x75,0x20,0x63,0x61,0x6E,
+ 0x20,0x73,0x65,0x65,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,
+ 0x77,0x69,0x6E,0x64,0x6F,0x77,0x20,0x74,0x68,0x65,0x72,0x65,
+ 0x20,0x61,0x72,0x65,0x20,0x33,0x20,0x63,0x6F,0x6C,0x75,0x6D,
+ 0x6E,0x73,0x20,0x6F,0x66,0x3D,0x22,0x65,0x6E,0x61,0x62,0x6C,
+ 0x65,0x2F,0x64,0x69,0x73,0x61,0x62,0x6C,0x65,0x20,0x62,0x75,
+ 0x74,0x74,0x6F,0x6E,0x73,0x22,0x20,0x77,0x68,0x69,0x63,0x68,
+ 0x20,0x68,0x61,0x73,0x20,0x74,0x68,0x65,0x20,0x6C,0x65,0x74,
+ 0x74,0x65,0x72,0x73,0x20,0x43,0x2C,0x50,0x20,0x26,0x20,0x54,
+ 0x20,0x61,0x62,0x6F,0x76,0x65,0x2E,0x45,0x3E,0x43,0x20,0x6D,
+ 0x65,0x61,0x6E,0x73,0x20,0x63,0x6F,0x70,0x79,0x2C,0x20,0x69,
+ 0x74,0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x73,0x20,0x77,
+ 0x68,0x69,0x63,0x68,0x20,0x70,0x61,0x72,0x74,0x73,0x20,0x74,
+ 0x68,0x61,0x74,0x20,0x67,0x6F,0x65,0x73,0x20,0x69,0x6E,0x74,
+ 0x6F,0x20,0x74,0x68,0x65,0x20,0x63,0x6F,0x70,0x79,0x62,0x75,
+ 0x66,0x66,0x65,0x72,0x2E,0x3E,0x3E,0x50,0x20,0x6D,0x65,0x61,
+ 0x6E,0x73,0x20,0x70,0x61,0x73,0x74,0x65,0x20,0x61,0x6E,0x64,
+ 0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x73,0x20,0x77,0x68,
+ 0x69,0x63,0x68,0x20,0x70,0x61,0x72,0x74,0x73,0x20,0x74,0x68,
+ 0x61,0x74,0x20,0x67,0x6F,0x65,0x73,0x20,0x6F,0x75,0x74,0x20,
+ 0x66,0x72,0x6F,0x6D,0x20,0x74,0x68,0x65,0x0B,0x63,0x6F,0x70,
+ 0x79,0x62,0x75,0x66,0x66,0x65,0x72,0x2E,0x45,0x3E,0x54,0x20,
+ 0x6D,0x65,0x61,0x6E,0x73,0x20,0x74,0x72,0x61,0x6E,0x73,0x70,
+ 0x61,0x72,0x65,0x6E,0x63,0x79,0x2E,0x20,0x49,0x66,0x20,0x69,
+ 0x74,0x27,0x73,0x20,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x2C,
+ 0x20,0x74,0x68,0x65,0x20,0x70,0x61,0x73,0x74,0x69,0x6E,0x67,
+ 0x20,0x64,0x6F,0x65,0x73,0x6E,0x27,0x74,0x20,0x6F,0x76,0x65,
+ 0x72,0x77,0x72,0x69,0x74,0x65,0x3D,0x64,0x61,0x74,0x61,0x20,
+ 0x77,0x69,0x74,0x68,0x20,0x6E,0x69,0x6C,0x2D,0x69,0x6E,0x66,
+ 0x6F,0x72,0x6D,0x61,0x74,0x69,0x6F,0x6E,0x2C,0x20,0x6F,0x6E,
+ 0x6C,0x79,0x20,0x77,0x69,0x74,0x68,0x20,0x61,0x20,0x6E,0x6F,
+ 0x74,0x65,0x20,0x6F,0x72,0x20,0x61,0x20,0x6E,0x75,0x6D,0x62,
+ 0x65,0x72,0x20,0x3C,0x3E,0x20,0x30,0x2E,0x01,0x3E,0x40,0x3E,
+ 0x54,0x68,0x65,0x20,0x63,0x75,0x74,0x20,0x66,0x75,0x6E,0x63,
+ 0x74,0x69,0x6F,0x6E,0x73,0x20,0x77,0x6F,0x72,0x6B,0x73,0x20,
+ 0x6C,0x69,0x6B,0x65,0x20,0x70,0x61,0x73,0x74,0x69,0x6E,0x67,
+ 0x20,0x77,0x69,0x74,0x68,0x20,0x7A,0x65,0x72,0x6F,0x2D,0x64,
+ 0x61,0x74,0x61,0x2E,0x20,0x54,0x68,0x69,0x73,0x20,0x6D,0x65,
+ 0x61,0x6E,0x73,0x3B,0x74,0x68,0x61,0x74,0x20,0x74,0x68,0x65,
+ 0x20,0x63,0x75,0x74,0x74,0x69,0x6E,0x67,0x20,0x69,0x73,0x20,
+ 0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x6C,0x65,0x64,0x20,0x77,
+ 0x69,0x74,0x68,0x20,0x50,0x2D,0x63,0x6F,0x6C,0x75,0x6D,0x6E,
+ 0x20,0x28,0x6F,0x72,0x20,0x54,0x2D,0x63,0x6F,0x6C,0x75,0x6D,
+ 0x6E,0x29,0x2E,0x3C,0x3E,0x57,0x68,0x65,0x6E,0x20,0x79,0x6F,
+ 0x75,0x20,0x63,0x6F,0x70,0x79,0x20,0x64,0x61,0x74,0x61,0x20,
+ 0x77,0x69,0x74,0x68,0x20,0x6D,0x61,0x73,0x6B,0x69,0x6E,0x67,
+ 0x2C,0x20,0x74,0x68,0x65,0x20,0x64,0x69,0x73,0x61,0x62,0x6C,
+ 0x65,0x64,0x20,0x70,0x61,0x72,0x74,0x73,0x20,0x61,0x72,0x65,
+ 0x20,0x6E,0x6F,0x74,0x43,0x63,0x6C,0x65,0x61,0x72,0x65,0x64,
+ 0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x63,0x6F,0x70,0x79,
+ 0x62,0x75,0x66,0x66,0x65,0x72,0x2E,0x20,0x28,0x4D,0x61,0x6B,
+ 0x69,0x6E,0x67,0x20,0x69,0x74,0x20,0x70,0x6F,0x73,0x73,0x69,
+ 0x62,0x6C,0x65,0x20,0x74,0x6F,0x20,0x63,0x6F,0x6C,0x6C,0x65,
+ 0x63,0x74,0x20,0x64,0x61,0x74,0x61,0x20,0x66,0x72,0x6F,0x6D,
+ 0x27,0x73,0x65,0x76,0x65,0x72,0x61,0x6C,0x20,0x6C,0x6F,0x63,
+ 0x61,0x74,0x69,0x6F,0x6E,0x73,0x20,0x69,0x6E,0x74,0x6F,0x20,
+ 0x74,0x68,0x65,0x20,0x63,0x6F,0x70,0x79,0x62,0x75,0x66,0x66,
+ 0x65,0x72,0x2E,0x29,0x00,0x03,0x45,0x4E,0x44,0x4C,0x3B,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
- 0x2A,0x2A,0x2A,0x2A,0x2A,0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
+ 0x2A,0x2A,0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
- 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x0E,0x40,
- 0x4C,0x50,0x72,0x6F,0x62,0x6C,0x65,0x6D,0x73,0x2F,0x46,0x41,
- 0x51,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x2A,0x3E,0x40,0x43,
- 0x30,0x30,0x31,0x51,0x3A,0x20,0x48,0x6F,0x77,0x20,0x63,0x61,
- 0x6E,0x20,0x49,0x20,0x74,0x6F,0x67,0x67,0x6C,0x65,0x20,0x66,
- 0x75,0x6C,0x6C,0x73,0x63,0x72,0x65,0x65,0x6E,0x20,0x6D,0x6F,
- 0x64,0x65,0x3F,0x37,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,
- 0x20,0x50,0x72,0x65,0x73,0x73,0x20,0x41,0x6C,0x74,0x2B,0x45,
- 0x6E,0x74,0x65,0x72,0x20,0x28,0x43,0x74,0x72,0x6C,0x2B,0x43,
- 0x6D,0x64,0x2B,0x46,0x20,0x61,0x6C,0x73,0x6F,0x20,0x77,0x6F,
- 0x72,0x6B,0x73,0x20,0x6F,0x6E,0x20,0x4D,0x61,0x63,0x29,0x06,
- 0x3E,0x40,0x58,0x30,0x32,0x30,0x45,0x3E,0x40,0x43,0x30,0x30,
- 0x31,0x51,0x3A,0x20,0x48,0x6F,0x77,0x20,0x63,0x61,0x6E,0x20,
- 0x49,0x20,0x6D,0x61,0x6B,0x65,0x20,0x66,0x75,0x6C,0x6C,0x73,
- 0x63,0x72,0x65,0x65,0x6E,0x20,0x6D,0x6F,0x64,0x65,0x20,0x73,
- 0x74,0x72,0x65,0x74,0x63,0x68,0x20,0x6F,0x75,0x74,0x20,0x74,
- 0x68,0x65,0x20,0x77,0x68,0x6F,0x6C,0x65,0x20,0x73,0x63,0x72,
- 0x65,0x65,0x6E,0x3F,0x37,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,
- 0x3A,0x20,0x45,0x6E,0x61,0x62,0x6C,0x65,0x20,0x22,0x53,0x74,
- 0x72,0x65,0x74,0x63,0x68,0x65,0x64,0x22,0x20,0x69,0x6E,0x20,
- 0x43,0x6F,0x6E,0x66,0x69,0x67,0x20,0x2D,0x3E,0x20,0x4D,0x69,
- 0x73,0x63,0x65,0x6C,0x6C,0x61,0x6E,0x65,0x6F,0x75,0x73,0x2E,
- 0x4E,0x3E,0x40,0x58,0x30,0x33,0x35,0x54,0x68,0x69,0x73,0x20,
- 0x77,0x69,0x6C,0x6C,0x20,0x72,0x65,0x73,0x75,0x6C,0x74,0x20,
- 0x69,0x6E,0x20,0x75,0x6E,0x65,0x76,0x65,0x6E,0x20,0x70,0x69,
- 0x78,0x65,0x6C,0x20,0x77,0x69,0x64,0x74,0x68,0x73,0x2E,0x20,
- 0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x77,0x61,0x6E,0x74,0x20,
- 0x74,0x6F,0x20,0x66,0x69,0x78,0x20,0x74,0x68,0x69,0x73,0x2C,
- 0x20,0x65,0x6E,0x61,0x62,0x6C,0x65,0x3D,0x22,0x50,0x69,0x78,
- 0x65,0x6C,0x20,0x66,0x69,0x6C,0x74,0x65,0x72,0x22,0x20,0x28,
- 0x74,0x68,0x6F,0x75,0x67,0x68,0x20,0x74,0x68,0x69,0x73,0x20,
- 0x77,0x69,0x6C,0x6C,0x20,0x6D,0x61,0x6B,0x65,0x20,0x74,0x68,
- 0x65,0x20,0x69,0x6D,0x61,0x67,0x65,0x20,0x6C,0x6F,0x6F,0x6B,
- 0x20,0x62,0x6C,0x75,0x72,0x72,0x79,0x29,0x2E,0x06,0x3E,0x40,
- 0x58,0x30,0x32,0x30,0x27,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,
- 0x3A,0x20,0x49,0x20,0x63,0x61,0x6E,0x27,0x74,0x20,0x75,0x73,
- 0x65,0x20,0x41,0x6C,0x74,0x2B,0x46,0x34,0x20,0x61,0x6E,0x64,
- 0x20,0x41,0x6C,0x74,0x2B,0x46,0x35,0x21,0x4E,0x3E,0x40,0x43,
- 0x30,0x30,0x32,0x41,0x3A,0x20,0x57,0x69,0x6E,0x64,0x6F,0x77,
- 0x73,0x3A,0x20,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x68,0x61,
- 0x76,0x65,0x20,0x47,0x65,0x46,0x6F,0x72,0x63,0x65,0x20,0x45,
- 0x78,0x70,0x65,0x72,0x69,0x65,0x6E,0x63,0x65,0x20,0x69,0x6E,
- 0x73,0x74,0x61,0x6C,0x6C,0x65,0x64,0x2C,0x20,0x79,0x6F,0x75,
- 0x20,0x6E,0x65,0x65,0x64,0x20,0x74,0x6F,0x20,0x63,0x68,0x61,
- 0x6E,0x67,0x65,0x2B,0x3E,0x40,0x58,0x30,0x33,0x35,0x74,0x68,
- 0x65,0x20,0x6B,0x65,0x79,0x62,0x69,0x6E,0x64,0x69,0x6E,0x67,
- 0x73,0x20,0x69,0x6E,0x20,0x69,0x74,0x73,0x20,0x73,0x65,0x74,
- 0x74,0x69,0x6E,0x67,0x73,0x20,0x70,0x61,0x67,0x65,0x2E,0x57,
- 0x3E,0x6D,0x61,0x63,0x4F,0x53,0x2F,0x4F,0x53,0x20,0x58,0x3A,
- 0x20,0x43,0x68,0x61,0x6E,0x67,0x65,0x20,0x41,0x6C,0x74,0x2B,
- 0x46,0x34,0x2F,0x41,0x6C,0x74,0x2B,0x46,0x35,0x20,0x6B,0x65,
- 0x79,0x73,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x4F,0x53,
- 0x20,0x74,0x6F,0x20,0x73,0x6F,0x6D,0x65,0x74,0x68,0x69,0x6E,
- 0x67,0x20,0x65,0x6C,0x73,0x65,0x2E,0x20,0x41,0x6C,0x73,0x6F,
- 0x20,0x66,0x6F,0x72,0x20,0x47,0x4E,0x55,0x2F,0x4C,0x69,0x6E,
- 0x75,0x78,0x2E,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x2B,0x3E,
- 0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20,0x54,0x68,0x65,0x20,
- 0x6D,0x6F,0x75,0x73,0x65,0x20,0x63,0x75,0x72,0x73,0x6F,0x72,
- 0x20,0x69,0x73,0x20,0x64,0x65,0x6C,0x61,0x79,0x65,0x64,0x2F,
- 0x6C,0x61,0x67,0x67,0x79,0x21,0x44,0x3E,0x40,0x43,0x30,0x30,
- 0x32,0x41,0x3A,0x20,0x4D,0x61,0x6B,0x65,0x20,0x73,0x75,0x72,
- 0x65,0x20,0x22,0x53,0x6F,0x66,0x74,0x77,0x61,0x72,0x65,0x20,
- 0x6D,0x6F,0x75,0x73,0x65,0x22,0x20,0x69,0x73,0x20,0x64,0x69,
- 0x73,0x61,0x62,0x6C,0x65,0x64,0x20,0x69,0x6E,0x20,0x43,0x6F,
- 0x6E,0x66,0x69,0x67,0x20,0x2D,0x3E,0x20,0x4C,0x61,0x79,0x6F,
- 0x75,0x74,0x2E,0x4B,0x3E,0x40,0x58,0x30,0x33,0x35,0x41,0x6C,
- 0x74,0x65,0x72,0x6E,0x61,0x74,0x69,0x76,0x65,0x6C,0x79,0x2C,
- 0x20,0x79,0x6F,0x75,0x20,0x63,0x61,0x6E,0x20,0x65,0x6E,0x61,
- 0x62,0x6C,0x65,0x20,0x22,0x56,0x53,0x79,0x6E,0x63,0x20,0x6F,
- 0x66,0x66,0x22,0x20,0x69,0x6E,0x20,0x43,0x6F,0x6E,0x66,0x69,
- 0x67,0x20,0x2D,0x3E,0x20,0x4D,0x69,0x73,0x63,0x65,0x6C,0x6C,
- 0x61,0x6E,0x65,0x6F,0x75,0x73,0x2E,0x46,0x3E,0x54,0x68,0x69,
- 0x73,0x20,0x68,0x6F,0x77,0x65,0x76,0x65,0x72,0x2C,0x20,0x77,
- 0x69,0x6C,0x6C,0x20,0x69,0x6E,0x74,0x72,0x6F,0x64,0x75,0x63,
- 0x65,0x20,0x73,0x74,0x75,0x74,0x74,0x65,0x72,0x69,0x6E,0x67,
- 0x20,0x62,0x65,0x63,0x61,0x75,0x73,0x65,0x20,0x74,0x68,0x65,
- 0x20,0x72,0x65,0x6E,0x64,0x65,0x72,0x69,0x6E,0x67,0x20,0x72,
- 0x61,0x74,0x65,0x20,0x69,0x73,0x22,0x3E,0x6E,0x6F,0x74,0x20,
- 0x65,0x78,0x61,0x63,0x74,0x20,0x74,0x6F,0x20,0x79,0x6F,0x75,
- 0x72,0x20,0x6D,0x6F,0x6E,0x69,0x74,0x6F,0x72,0x27,0x73,0x20,
- 0x72,0x61,0x74,0x65,0x2E,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,
- 0x33,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20,0x57,0x69,
- 0x6C,0x6C,0x20,0x79,0x6F,0x75,0x20,0x69,0x6D,0x70,0x6C,0x65,
- 0x6D,0x65,0x6E,0x74,0x20,0x4D,0x49,0x44,0x49,0x20,0x6F,0x75,
- 0x74,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x61,0x6C,
- 0x69,0x74,0x79,0x3F,0x4D,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,
- 0x3A,0x20,0x4E,0x6F,0x2C,0x20,0x73,0x6F,0x72,0x72,0x79,0x2E,
- 0x20,0x54,0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x76,0x65,0x72,
- 0x79,0x20,0x64,0x69,0x66,0x66,0x69,0x63,0x75,0x6C,0x74,0x20,
- 0x74,0x6F,0x20,0x69,0x6D,0x70,0x6C,0x65,0x6D,0x65,0x6E,0x74,
- 0x20,0x63,0x6F,0x72,0x72,0x65,0x63,0x74,0x6C,0x79,0x20,0x77,
- 0x68,0x65,0x6E,0x20,0x68,0x61,0x76,0x69,0x6E,0x67,0x3C,0x3E,
- 0x40,0x58,0x30,0x33,0x35,0x68,0x69,0x67,0x68,0x65,0x72,0x20,
- 0x61,0x75,0x64,0x69,0x6F,0x20,0x62,0x75,0x66,0x66,0x65,0x72,
- 0x20,0x73,0x69,0x7A,0x65,0x73,0x20,0x28,0x62,0x75,0x66,0x66,
- 0x65,0x72,0x65,0x64,0x20,0x72,0x65,0x70,0x6C,0x61,0x79,0x65,
- 0x72,0x20,0x74,0x69,0x63,0x6B,0x73,0x29,0x2E,0x2E,0x2E,0x06,
- 0x3E,0x40,0x58,0x30,0x32,0x30,0x30,0x3E,0x40,0x43,0x30,0x30,
- 0x31,0x51,0x3A,0x20,0x57,0x68,0x65,0x72,0x65,0x20,0x69,0x73,
- 0x20,0x74,0x68,0x65,0x20,0x63,0x6F,0x6E,0x66,0x69,0x67,0x75,
- 0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x66,0x69,0x6C,0x65,0x20,
- 0x73,0x74,0x6F,0x72,0x65,0x64,0x3F,0x3F,0x3E,0x40,0x43,0x30,
- 0x30,0x32,0x41,0x3A,0x20,0x57,0x69,0x6E,0x64,0x6F,0x77,0x73,
- 0x3A,0x20,0x5C,0x55,0x73,0x65,0x72,0x73,0x5C,0x55,0x53,0x45,
- 0x52,0x5C,0x41,0x70,0x70,0x44,0x61,0x74,0x61,0x5C,0x52,0x6F,
- 0x61,0x6D,0x69,0x6E,0x67,0x5C,0x46,0x54,0x32,0x20,0x63,0x6C,
- 0x6F,0x6E,0x65,0x5C,0x46,0x54,0x32,0x2E,0x43,0x46,0x47,0x45,
- 0x3E,0x40,0x58,0x30,0x33,0x35,0x4F,0x53,0x20,0x58,0x3A,0x20,
- 0x2F,0x55,0x73,0x65,0x72,0x73,0x2F,0x55,0x53,0x45,0x52,0x2F,
- 0x4C,0x69,0x62,0x72,0x61,0x72,0x79,0x2F,0x41,0x70,0x70,0x6C,
- 0x69,0x63,0x61,0x74,0x69,0x6F,0x6E,0x20,0x53,0x75,0x70,0x70,
- 0x6F,0x72,0x74,0x2F,0x46,0x54,0x32,0x20,0x63,0x6C,0x6F,0x6E,
- 0x65,0x2F,0x46,0x54,0x32,0x2E,0x43,0x46,0x47,0x2F,0x47,0x4E,
- 0x55,0x2F,0x4C,0x69,0x6E,0x75,0x78,0x3A,0x20,0x2F,0x68,0x6F,
- 0x6D,0x65,0x2F,0x55,0x53,0x45,0x52,0x2F,0x2E,0x63,0x6F,0x6E,
- 0x66,0x69,0x67,0x2F,0x46,0x54,0x32,0x20,0x63,0x6C,0x6F,0x6E,
- 0x65,0x2F,0x46,0x54,0x32,0x2E,0x43,0x46,0x47,0x01,0x3E,0x48,
- 0x49,0x74,0x20,0x77,0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x73,
- 0x74,0x6F,0x72,0x65,0x64,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,
- 0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,0x64,0x69,0x72,
- 0x65,0x63,0x74,0x6F,0x72,0x79,0x20,0x69,0x66,0x20,0x74,0x68,
- 0x65,0x20,0x70,0x61,0x74,0x68,0x20,0x63,0x6F,0x75,0x6C,0x64,
- 0x6E,0x27,0x74,0x20,0x62,0x65,0x20,0x75,0x73,0x65,0x64,0x2E,
- 0x4D,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x70,0x75,0x74,0x20,
- 0x74,0x68,0x65,0x20,0x63,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,
- 0x61,0x74,0x69,0x6F,0x6E,0x20,0x66,0x69,0x6C,0x65,0x20,0x69,
- 0x6E,0x20,0x74,0x68,0x65,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,
- 0x6D,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x6F,0x72,0x79,0x2C,
- 0x20,0x69,0x74,0x20,0x77,0x69,0x6C,0x6C,0x20,0x72,0x65,0x61,
- 0x64,0x20,0x74,0x68,0x61,0x74,0x4A,0x6F,0x6E,0x65,0x20,0x61,
- 0x6E,0x64,0x20,0x6E,0x6F,0x74,0x20,0x61,0x74,0x74,0x65,0x6D,
- 0x70,0x74,0x20,0x74,0x6F,0x20,0x63,0x72,0x65,0x61,0x74,0x65,
- 0x20,0x63,0x6F,0x6E,0x66,0x69,0x67,0x20,0x64,0x69,0x72,0x73,
- 0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x4F,0x53,0x20,
- 0x75,0x73,0x65,0x72,0x2E,0x20,0x28,0x70,0x6F,0x72,0x74,0x61,
- 0x62,0x6C,0x65,0x20,0x6D,0x6F,0x64,0x65,0x29,0x06,0x3E,0x40,
- 0x58,0x30,0x32,0x30,0x42,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,
- 0x3A,0x20,0x43,0x61,0x6E,0x20,0x74,0x68,0x65,0x20,0x63,0x6C,
- 0x6F,0x6E,0x65,0x20,0x72,0x65,0x61,0x64,0x20,0x46,0x54,0x32,
- 0x2E,0x43,0x46,0x47,0x20,0x66,0x72,0x6F,0x6D,0x20,0x72,0x65,
- 0x61,0x6C,0x20,0x46,0x54,0x32,0x2C,0x20,0x61,0x6E,0x64,0x20,
- 0x76,0x69,0x63,0x65,0x20,0x76,0x65,0x72,0x73,0x61,0x3F,0x4C,
- 0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,0x59,0x65,0x73,
- 0x2C,0x20,0x69,0x74,0x20,0x73,0x68,0x6F,0x75,0x6C,0x64,0x20,
- 0x77,0x6F,0x72,0x6B,0x20,0x6A,0x75,0x73,0x74,0x20,0x66,0x69,
- 0x6E,0x65,0x2E,0x20,0x50,0x75,0x74,0x20,0x69,0x74,0x20,0x69,
- 0x6E,0x20,0x74,0x68,0x65,0x20,0x64,0x69,0x72,0x65,0x63,0x74,
- 0x6F,0x72,0x79,0x20,0x73,0x68,0x6F,0x77,0x6E,0x20,0x61,0x62,
- 0x6F,0x76,0x65,0x2E,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x52,
- 0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20,0x53,0x6D,0x70,
- 0x2E,0x20,0x45,0x64,0x2E,0x3A,0x20,0x57,0x68,0x69,0x6C,0x65,
- 0x20,0x7A,0x6F,0x6F,0x6D,0x69,0x6E,0x67,0x20,0x69,0x6E,0x2C,
- 0x20,0x49,0x20,0x73,0x6F,0x6D,0x65,0x74,0x69,0x6D,0x65,0x73,
- 0x20,0x63,0x61,0x6E,0x27,0x74,0x20,0x6D,0x61,0x72,0x6B,0x20,
- 0x74,0x68,0x65,0x20,0x6C,0x61,0x73,0x74,0x20,0x73,0x61,0x6D,
- 0x70,0x6C,0x65,0x20,0x70,0x6F,0x69,0x6E,0x74,0x21,0x47,0x3E,
- 0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,0x54,0x68,0x69,0x73,
- 0x20,0x69,0x73,0x20,0x6E,0x6F,0x72,0x6D,0x61,0x6C,0x2E,0x20,
- 0x54,0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x61,0x20,0x6C,0x69,
- 0x6D,0x69,0x74,0x61,0x74,0x69,0x6F,0x6E,0x20,0x69,0x6E,0x20,
- 0x74,0x68,0x65,0x20,0x6E,0x61,0x74,0x75,0x72,0x65,0x20,0x6F,
- 0x66,0x20,0x73,0x63,0x61,0x6C,0x69,0x6E,0x67,0x2E,0x06,0x3E,
- 0x40,0x58,0x30,0x32,0x30,0x17,0x3E,0x40,0x43,0x30,0x30,0x31,
- 0x51,0x3A,0x20,0x49,0x20,0x66,0x6F,0x75,0x6E,0x64,0x20,0x61,
- 0x20,0x62,0x75,0x67,0x21,0x4C,0x3E,0x40,0x43,0x30,0x30,0x32,
- 0x41,0x3A,0x20,0x50,0x6C,0x65,0x61,0x73,0x65,0x20,0x73,0x65,
- 0x6E,0x64,0x20,0x6D,0x65,0x20,0x61,0x20,0x6D,0x61,0x69,0x6C,
- 0x20,0x28,0x66,0x6F,0x75,0x6E,0x64,0x20,0x61,0x74,0x20,0x31,
- 0x36,0x2D,0x62,0x69,0x74,0x73,0x2E,0x6F,0x72,0x67,0x29,0x20,
- 0x61,0x6E,0x64,0x20,0x74,0x72,0x79,0x20,0x74,0x6F,0x20,0x65,
- 0x78,0x70,0x6C,0x61,0x69,0x6E,0x20,0x69,0x74,0x2E,0x00,0x03,
- 0x45,0x4E,0x44,0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
+ 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x0E,0x40,0x4C,0x50,0x72,
+ 0x6F,0x62,0x6C,0x65,0x6D,0x73,0x2F,0x46,0x41,0x51,0x06,0x3E,
+ 0x40,0x58,0x30,0x32,0x30,0x2A,0x3E,0x40,0x43,0x30,0x30,0x31,
+ 0x51,0x3A,0x20,0x48,0x6F,0x77,0x20,0x63,0x61,0x6E,0x20,0x49,
+ 0x20,0x74,0x6F,0x67,0x67,0x6C,0x65,0x20,0x66,0x75,0x6C,0x6C,
+ 0x73,0x63,0x72,0x65,0x65,0x6E,0x20,0x6D,0x6F,0x64,0x65,0x3F,
+ 0x37,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,0x50,0x72,
+ 0x65,0x73,0x73,0x20,0x41,0x6C,0x74,0x2B,0x45,0x6E,0x74,0x65,
+ 0x72,0x20,0x28,0x43,0x74,0x72,0x6C,0x2B,0x43,0x6D,0x64,0x2B,
+ 0x46,0x20,0x61,0x6C,0x73,0x6F,0x20,0x77,0x6F,0x72,0x6B,0x73,
+ 0x20,0x6F,0x6E,0x20,0x4D,0x61,0x63,0x29,0x06,0x3E,0x40,0x58,
+ 0x30,0x32,0x30,0x45,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,
+ 0x20,0x48,0x6F,0x77,0x20,0x63,0x61,0x6E,0x20,0x49,0x20,0x6D,
+ 0x61,0x6B,0x65,0x20,0x66,0x75,0x6C,0x6C,0x73,0x63,0x72,0x65,
+ 0x65,0x6E,0x20,0x6D,0x6F,0x64,0x65,0x20,0x73,0x74,0x72,0x65,
+ 0x74,0x63,0x68,0x20,0x6F,0x75,0x74,0x20,0x74,0x68,0x65,0x20,
+ 0x77,0x68,0x6F,0x6C,0x65,0x20,0x73,0x63,0x72,0x65,0x65,0x6E,
+ 0x3F,0x37,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,0x45,
+ 0x6E,0x61,0x62,0x6C,0x65,0x20,0x22,0x53,0x74,0x72,0x65,0x74,
+ 0x63,0x68,0x65,0x64,0x22,0x20,0x69,0x6E,0x20,0x43,0x6F,0x6E,
+ 0x66,0x69,0x67,0x20,0x2D,0x3E,0x20,0x4D,0x69,0x73,0x63,0x65,
+ 0x6C,0x6C,0x61,0x6E,0x65,0x6F,0x75,0x73,0x2E,0x4E,0x3E,0x40,
+ 0x58,0x30,0x33,0x35,0x54,0x68,0x69,0x73,0x20,0x77,0x69,0x6C,
+ 0x6C,0x20,0x72,0x65,0x73,0x75,0x6C,0x74,0x20,0x69,0x6E,0x20,
+ 0x75,0x6E,0x65,0x76,0x65,0x6E,0x20,0x70,0x69,0x78,0x65,0x6C,
+ 0x20,0x77,0x69,0x64,0x74,0x68,0x73,0x2E,0x20,0x49,0x66,0x20,
+ 0x79,0x6F,0x75,0x20,0x77,0x61,0x6E,0x74,0x20,0x74,0x6F,0x20,
+ 0x66,0x69,0x78,0x20,0x74,0x68,0x69,0x73,0x2C,0x20,0x65,0x6E,
+ 0x61,0x62,0x6C,0x65,0x3D,0x22,0x50,0x69,0x78,0x65,0x6C,0x20,
+ 0x66,0x69,0x6C,0x74,0x65,0x72,0x22,0x20,0x28,0x74,0x68,0x6F,
+ 0x75,0x67,0x68,0x20,0x74,0x68,0x69,0x73,0x20,0x77,0x69,0x6C,
+ 0x6C,0x20,0x6D,0x61,0x6B,0x65,0x20,0x74,0x68,0x65,0x20,0x69,
+ 0x6D,0x61,0x67,0x65,0x20,0x6C,0x6F,0x6F,0x6B,0x20,0x62,0x6C,
+ 0x75,0x72,0x72,0x79,0x29,0x2E,0x06,0x3E,0x40,0x58,0x30,0x32,
+ 0x30,0x27,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20,0x49,
+ 0x20,0x63,0x61,0x6E,0x27,0x74,0x20,0x75,0x73,0x65,0x20,0x41,
+ 0x6C,0x74,0x2B,0x46,0x34,0x20,0x61,0x6E,0x64,0x20,0x41,0x6C,
+ 0x74,0x2B,0x46,0x35,0x21,0x4E,0x3E,0x40,0x43,0x30,0x30,0x32,
+ 0x41,0x3A,0x20,0x57,0x69,0x6E,0x64,0x6F,0x77,0x73,0x3A,0x20,
+ 0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x68,0x61,0x76,0x65,0x20,
+ 0x47,0x65,0x46,0x6F,0x72,0x63,0x65,0x20,0x45,0x78,0x70,0x65,
+ 0x72,0x69,0x65,0x6E,0x63,0x65,0x20,0x69,0x6E,0x73,0x74,0x61,
+ 0x6C,0x6C,0x65,0x64,0x2C,0x20,0x79,0x6F,0x75,0x20,0x6E,0x65,
+ 0x65,0x64,0x20,0x74,0x6F,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,
+ 0x2B,0x3E,0x40,0x58,0x30,0x33,0x35,0x74,0x68,0x65,0x20,0x6B,
+ 0x65,0x79,0x62,0x69,0x6E,0x64,0x69,0x6E,0x67,0x73,0x20,0x69,
+ 0x6E,0x20,0x69,0x74,0x73,0x20,0x73,0x65,0x74,0x74,0x69,0x6E,
+ 0x67,0x73,0x20,0x70,0x61,0x67,0x65,0x2E,0x57,0x3E,0x6D,0x61,
+ 0x63,0x4F,0x53,0x2F,0x4F,0x53,0x20,0x58,0x3A,0x20,0x43,0x68,
+ 0x61,0x6E,0x67,0x65,0x20,0x41,0x6C,0x74,0x2B,0x46,0x34,0x2F,
+ 0x41,0x6C,0x74,0x2B,0x46,0x35,0x20,0x6B,0x65,0x79,0x73,0x20,
+ 0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x4F,0x53,0x20,0x74,0x6F,
+ 0x20,0x73,0x6F,0x6D,0x65,0x74,0x68,0x69,0x6E,0x67,0x20,0x65,
+ 0x6C,0x73,0x65,0x2E,0x20,0x41,0x6C,0x73,0x6F,0x20,0x66,0x6F,
+ 0x72,0x20,0x47,0x4E,0x55,0x2F,0x4C,0x69,0x6E,0x75,0x78,0x2E,
+ 0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x2B,0x3E,0x40,0x43,0x30,
+ 0x30,0x31,0x51,0x3A,0x20,0x54,0x68,0x65,0x20,0x6D,0x6F,0x75,
+ 0x73,0x65,0x20,0x63,0x75,0x72,0x73,0x6F,0x72,0x20,0x69,0x73,
+ 0x20,0x64,0x65,0x6C,0x61,0x79,0x65,0x64,0x2F,0x6C,0x61,0x67,
+ 0x67,0x79,0x21,0x44,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,
+ 0x20,0x4D,0x61,0x6B,0x65,0x20,0x73,0x75,0x72,0x65,0x20,0x22,
+ 0x53,0x6F,0x66,0x74,0x77,0x61,0x72,0x65,0x20,0x6D,0x6F,0x75,
+ 0x73,0x65,0x22,0x20,0x69,0x73,0x20,0x64,0x69,0x73,0x61,0x62,
+ 0x6C,0x65,0x64,0x20,0x69,0x6E,0x20,0x43,0x6F,0x6E,0x66,0x69,
+ 0x67,0x20,0x2D,0x3E,0x20,0x4C,0x61,0x79,0x6F,0x75,0x74,0x2E,
+ 0x4B,0x3E,0x40,0x58,0x30,0x33,0x35,0x41,0x6C,0x74,0x65,0x72,
+ 0x6E,0x61,0x74,0x69,0x76,0x65,0x6C,0x79,0x2C,0x20,0x79,0x6F,
+ 0x75,0x20,0x63,0x61,0x6E,0x20,0x65,0x6E,0x61,0x62,0x6C,0x65,
+ 0x20,0x22,0x56,0x53,0x79,0x6E,0x63,0x20,0x6F,0x66,0x66,0x22,
+ 0x20,0x69,0x6E,0x20,0x43,0x6F,0x6E,0x66,0x69,0x67,0x20,0x2D,
+ 0x3E,0x20,0x4D,0x69,0x73,0x63,0x65,0x6C,0x6C,0x61,0x6E,0x65,
+ 0x6F,0x75,0x73,0x2E,0x46,0x3E,0x54,0x68,0x69,0x73,0x20,0x68,
+ 0x6F,0x77,0x65,0x76,0x65,0x72,0x2C,0x20,0x77,0x69,0x6C,0x6C,
+ 0x20,0x69,0x6E,0x74,0x72,0x6F,0x64,0x75,0x63,0x65,0x20,0x73,
+ 0x74,0x75,0x74,0x74,0x65,0x72,0x69,0x6E,0x67,0x20,0x62,0x65,
+ 0x63,0x61,0x75,0x73,0x65,0x20,0x74,0x68,0x65,0x20,0x72,0x65,
+ 0x6E,0x64,0x65,0x72,0x69,0x6E,0x67,0x20,0x72,0x61,0x74,0x65,
+ 0x20,0x69,0x73,0x22,0x3E,0x6E,0x6F,0x74,0x20,0x65,0x78,0x61,
+ 0x63,0x74,0x20,0x74,0x6F,0x20,0x79,0x6F,0x75,0x72,0x20,0x6D,
+ 0x6F,0x6E,0x69,0x74,0x6F,0x72,0x27,0x73,0x20,0x72,0x61,0x74,
+ 0x65,0x2E,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x33,0x3E,0x40,
+ 0x43,0x30,0x30,0x31,0x51,0x3A,0x20,0x57,0x69,0x6C,0x6C,0x20,
+ 0x79,0x6F,0x75,0x20,0x69,0x6D,0x70,0x6C,0x65,0x6D,0x65,0x6E,
+ 0x74,0x20,0x4D,0x49,0x44,0x49,0x20,0x6F,0x75,0x74,0x20,0x66,
+ 0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x69,0x74,0x79,
+ 0x3F,0x4D,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,0x4E,
+ 0x6F,0x2C,0x20,0x73,0x6F,0x72,0x72,0x79,0x2E,0x20,0x54,0x68,
+ 0x69,0x73,0x20,0x69,0x73,0x20,0x76,0x65,0x72,0x79,0x20,0x64,
+ 0x69,0x66,0x66,0x69,0x63,0x75,0x6C,0x74,0x20,0x74,0x6F,0x20,
+ 0x69,0x6D,0x70,0x6C,0x65,0x6D,0x65,0x6E,0x74,0x20,0x63,0x6F,
+ 0x72,0x72,0x65,0x63,0x74,0x6C,0x79,0x20,0x77,0x68,0x65,0x6E,
+ 0x20,0x68,0x61,0x76,0x69,0x6E,0x67,0x3C,0x3E,0x40,0x58,0x30,
+ 0x33,0x35,0x68,0x69,0x67,0x68,0x65,0x72,0x20,0x61,0x75,0x64,
+ 0x69,0x6F,0x20,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x73,0x69,
+ 0x7A,0x65,0x73,0x20,0x28,0x62,0x75,0x66,0x66,0x65,0x72,0x65,
+ 0x64,0x20,0x72,0x65,0x70,0x6C,0x61,0x79,0x65,0x72,0x20,0x74,
+ 0x69,0x63,0x6B,0x73,0x29,0x2E,0x2E,0x2E,0x06,0x3E,0x40,0x58,
+ 0x30,0x32,0x30,0x30,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,
+ 0x20,0x57,0x68,0x65,0x72,0x65,0x20,0x69,0x73,0x20,0x74,0x68,
+ 0x65,0x20,0x63,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,
+ 0x69,0x6F,0x6E,0x20,0x66,0x69,0x6C,0x65,0x20,0x73,0x74,0x6F,
+ 0x72,0x65,0x64,0x3F,0x3F,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,
+ 0x3A,0x20,0x57,0x69,0x6E,0x64,0x6F,0x77,0x73,0x3A,0x20,0x5C,
+ 0x55,0x73,0x65,0x72,0x73,0x5C,0x55,0x53,0x45,0x52,0x5C,0x41,
+ 0x70,0x70,0x44,0x61,0x74,0x61,0x5C,0x52,0x6F,0x61,0x6D,0x69,
+ 0x6E,0x67,0x5C,0x46,0x54,0x32,0x20,0x63,0x6C,0x6F,0x6E,0x65,
+ 0x5C,0x46,0x54,0x32,0x2E,0x43,0x46,0x47,0x45,0x3E,0x40,0x58,
+ 0x30,0x33,0x35,0x4F,0x53,0x20,0x58,0x3A,0x20,0x2F,0x55,0x73,
+ 0x65,0x72,0x73,0x2F,0x55,0x53,0x45,0x52,0x2F,0x4C,0x69,0x62,
+ 0x72,0x61,0x72,0x79,0x2F,0x41,0x70,0x70,0x6C,0x69,0x63,0x61,
+ 0x74,0x69,0x6F,0x6E,0x20,0x53,0x75,0x70,0x70,0x6F,0x72,0x74,
+ 0x2F,0x46,0x54,0x32,0x20,0x63,0x6C,0x6F,0x6E,0x65,0x2F,0x46,
+ 0x54,0x32,0x2E,0x43,0x46,0x47,0x2F,0x47,0x4E,0x55,0x2F,0x4C,
+ 0x69,0x6E,0x75,0x78,0x3A,0x20,0x2F,0x68,0x6F,0x6D,0x65,0x2F,
+ 0x55,0x53,0x45,0x52,0x2F,0x2E,0x63,0x6F,0x6E,0x66,0x69,0x67,
+ 0x2F,0x46,0x54,0x32,0x20,0x63,0x6C,0x6F,0x6E,0x65,0x2F,0x46,
+ 0x54,0x32,0x2E,0x43,0x46,0x47,0x01,0x3E,0x48,0x49,0x74,0x20,
+ 0x77,0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x73,0x74,0x6F,0x72,
+ 0x65,0x64,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x70,0x72,
+ 0x6F,0x67,0x72,0x61,0x6D,0x20,0x64,0x69,0x72,0x65,0x63,0x74,
+ 0x6F,0x72,0x79,0x20,0x69,0x66,0x20,0x74,0x68,0x65,0x20,0x70,
+ 0x61,0x74,0x68,0x20,0x63,0x6F,0x75,0x6C,0x64,0x6E,0x27,0x74,
+ 0x20,0x62,0x65,0x20,0x75,0x73,0x65,0x64,0x2E,0x4D,0x49,0x66,
+ 0x20,0x79,0x6F,0x75,0x20,0x70,0x75,0x74,0x20,0x74,0x68,0x65,
+ 0x20,0x63,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,
+ 0x6F,0x6E,0x20,0x66,0x69,0x6C,0x65,0x20,0x69,0x6E,0x20,0x74,
+ 0x68,0x65,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,0x64,
+ 0x69,0x72,0x65,0x63,0x74,0x6F,0x72,0x79,0x2C,0x20,0x69,0x74,
+ 0x20,0x77,0x69,0x6C,0x6C,0x20,0x72,0x65,0x61,0x64,0x20,0x74,
+ 0x68,0x61,0x74,0x4A,0x6F,0x6E,0x65,0x20,0x61,0x6E,0x64,0x20,
+ 0x6E,0x6F,0x74,0x20,0x61,0x74,0x74,0x65,0x6D,0x70,0x74,0x20,
+ 0x74,0x6F,0x20,0x63,0x72,0x65,0x61,0x74,0x65,0x20,0x63,0x6F,
+ 0x6E,0x66,0x69,0x67,0x20,0x64,0x69,0x72,0x73,0x20,0x66,0x6F,
+ 0x72,0x20,0x74,0x68,0x65,0x20,0x4F,0x53,0x20,0x75,0x73,0x65,
+ 0x72,0x2E,0x20,0x28,0x70,0x6F,0x72,0x74,0x61,0x62,0x6C,0x65,
+ 0x20,0x6D,0x6F,0x64,0x65,0x29,0x06,0x3E,0x40,0x58,0x30,0x32,
+ 0x30,0x42,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20,0x43,
+ 0x61,0x6E,0x20,0x74,0x68,0x65,0x20,0x63,0x6C,0x6F,0x6E,0x65,
+ 0x20,0x72,0x65,0x61,0x64,0x20,0x46,0x54,0x32,0x2E,0x43,0x46,
+ 0x47,0x20,0x66,0x72,0x6F,0x6D,0x20,0x72,0x65,0x61,0x6C,0x20,
+ 0x46,0x54,0x32,0x2C,0x20,0x61,0x6E,0x64,0x20,0x76,0x69,0x63,
+ 0x65,0x20,0x76,0x65,0x72,0x73,0x61,0x3F,0x4C,0x3E,0x40,0x43,
+ 0x30,0x30,0x32,0x41,0x3A,0x20,0x59,0x65,0x73,0x2C,0x20,0x69,
+ 0x74,0x20,0x73,0x68,0x6F,0x75,0x6C,0x64,0x20,0x77,0x6F,0x72,
+ 0x6B,0x20,0x6A,0x75,0x73,0x74,0x20,0x66,0x69,0x6E,0x65,0x2E,
+ 0x20,0x50,0x75,0x74,0x20,0x69,0x74,0x20,0x69,0x6E,0x20,0x74,
+ 0x68,0x65,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x6F,0x72,0x79,
+ 0x20,0x73,0x68,0x6F,0x77,0x6E,0x20,0x61,0x62,0x6F,0x76,0x65,
+ 0x2E,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x52,0x3E,0x40,0x43,
+ 0x30,0x30,0x31,0x51,0x3A,0x20,0x53,0x6D,0x70,0x2E,0x20,0x45,
+ 0x64,0x2E,0x3A,0x20,0x57,0x68,0x69,0x6C,0x65,0x20,0x7A,0x6F,
+ 0x6F,0x6D,0x69,0x6E,0x67,0x20,0x69,0x6E,0x2C,0x20,0x49,0x20,
+ 0x73,0x6F,0x6D,0x65,0x74,0x69,0x6D,0x65,0x73,0x20,0x63,0x61,
+ 0x6E,0x27,0x74,0x20,0x6D,0x61,0x72,0x6B,0x20,0x74,0x68,0x65,
+ 0x20,0x6C,0x61,0x73,0x74,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,
+ 0x20,0x70,0x6F,0x69,0x6E,0x74,0x21,0x47,0x3E,0x40,0x43,0x30,
+ 0x30,0x32,0x41,0x3A,0x20,0x54,0x68,0x69,0x73,0x20,0x69,0x73,
+ 0x20,0x6E,0x6F,0x72,0x6D,0x61,0x6C,0x2E,0x20,0x54,0x68,0x69,
+ 0x73,0x20,0x69,0x73,0x20,0x61,0x20,0x6C,0x69,0x6D,0x69,0x74,
+ 0x61,0x74,0x69,0x6F,0x6E,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,
+ 0x20,0x6E,0x61,0x74,0x75,0x72,0x65,0x20,0x6F,0x66,0x20,0x73,
+ 0x63,0x61,0x6C,0x69,0x6E,0x67,0x2E,0x06,0x3E,0x40,0x58,0x30,
+ 0x32,0x30,0x17,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20,
+ 0x49,0x20,0x66,0x6F,0x75,0x6E,0x64,0x20,0x61,0x20,0x62,0x75,
+ 0x67,0x21,0x4C,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,
+ 0x50,0x6C,0x65,0x61,0x73,0x65,0x20,0x73,0x65,0x6E,0x64,0x20,
+ 0x6D,0x65,0x20,0x61,0x20,0x6D,0x61,0x69,0x6C,0x20,0x28,0x66,
+ 0x6F,0x75,0x6E,0x64,0x20,0x61,0x74,0x20,0x31,0x36,0x2D,0x62,
+ 0x69,0x74,0x73,0x2E,0x6F,0x72,0x67,0x29,0x20,0x61,0x6E,0x64,
+ 0x20,0x74,0x72,0x79,0x20,0x74,0x6F,0x20,0x65,0x78,0x70,0x6C,
+ 0x61,0x69,0x6E,0x20,0x69,0x74,0x2E,0x00,0x03,0x45,0x4E,0x44,
+ 0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
- 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x4C,0x3B,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
+ 0x2A,0x2A,0x2A,0x2A,0x2A,0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
- 0x2A,0x0C,0x40,0x4C,0x4B,0x6E,0x6F,0x77,0x6E,0x20,0x62,0x75,
- 0x67,0x73,0x06,0x3E,0x40,0x58,0x30,0x31,0x30,0x2C,0x3E,0x40,
- 0x43,0x30,0x30,0x31,0x57,0x41,0x56,0x20,0x65,0x78,0x70,0x6F,
- 0x72,0x74,0x69,0x6E,0x67,0x20,0x28,0x72,0x65,0x6E,0x64,0x65,
- 0x72,0x69,0x6E,0x67,0x20,0x73,0x6F,0x6E,0x67,0x20,0x74,0x6F,
- 0x20,0x57,0x41,0x56,0x29,0x3A,0x01,0x3E,0x50,0x3E,0x40,0x43,
- 0x30,0x30,0x32,0x2D,0x20,0x53,0x6F,0x6E,0x67,0x73,0x20,0x74,
- 0x68,0x61,0x74,0x20,0x6A,0x75,0x6D,0x70,0x20,0x62,0x61,0x63,
- 0x6B,0x20,0x74,0x6F,0x20,0x61,0x20,0x70,0x72,0x65,0x76,0x69,
- 0x6F,0x75,0x73,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,
- 0x77,0x69,0x6C,0x6C,0x20,0x72,0x65,0x6E,0x64,0x65,0x72,0x20,
- 0x66,0x6F,0x72,0x65,0x76,0x65,0x72,0x20,0x61,0x6E,0x64,0x20,
- 0x65,0x76,0x65,0x72,0x2C,0x50,0x61,0x6E,0x64,0x20,0x79,0x6F,
- 0x75,0x20,0x6E,0x65,0x65,0x64,0x20,0x74,0x6F,0x20,0x70,0x72,
- 0x65,0x73,0x73,0x20,0x61,0x20,0x6B,0x65,0x79,0x20,0x6F,0x72,
- 0x20,0x63,0x6C,0x69,0x63,0x6B,0x20,0x74,0x68,0x65,0x20,0x6D,
- 0x6F,0x75,0x73,0x65,0x20,0x74,0x6F,0x20,0x61,0x62,0x6F,0x72,
- 0x74,0x20,0x74,0x68,0x65,0x20,0x72,0x65,0x6E,0x64,0x65,0x72,
- 0x20,0x77,0x68,0x65,0x6E,0x20,0x79,0x6F,0x75,0x20,0x77,0x61,
- 0x6E,0x74,0x06,0x69,0x74,0x20,0x74,0x6F,0x2E,0x06,0x3E,0x40,
- 0x58,0x30,0x31,0x30,0x17,0x3E,0x40,0x43,0x30,0x30,0x31,0x4D,
- 0x6F,0x75,0x73,0x65,0x20,0x2F,0x20,0x6B,0x65,0x79,0x62,0x6F,
- 0x61,0x72,0x64,0x3A,0x01,0x3E,0x43,0x3E,0x40,0x43,0x30,0x30,
- 0x32,0x2D,0x20,0x4C,0x69,0x6E,0x75,0x78,0x3A,0x20,0x54,0x68,
- 0x65,0x20,0x6D,0x6F,0x75,0x73,0x65,0x20,0x63,0x75,0x72,0x73,
- 0x6F,0x72,0x20,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x20,
- 0x63,0x61,0x6E,0x20,0x62,0x65,0x20,0x67,0x6C,0x69,0x74,0x63,
- 0x68,0x79,0x20,0x61,0x74,0x20,0x74,0x69,0x6D,0x65,0x73,0x2E,
- 0x2E,0x2E,0x06,0x3E,0x40,0x58,0x30,0x31,0x30,0x0C,0x3E,0x40,
- 0x43,0x30,0x30,0x31,0x56,0x69,0x64,0x65,0x6F,0x3A,0x06,0x3E,
- 0x40,0x43,0x30,0x30,0x32,0x50,0x3E,0x40,0x58,0x30,0x31,0x30,
- 0x2D,0x20,0x46,0x75,0x6C,0x6C,0x73,0x63,0x72,0x65,0x65,0x6E,
- 0x20,0x6D,0x6F,0x64,0x65,0x20,0x63,0x61,0x6E,0x20,0x62,0x65,
- 0x20,0x75,0x6E,0x62,0x65,0x61,0x72,0x61,0x62,0x6C,0x79,0x20,
- 0x73,0x6C,0x6F,0x77,0x20,0x6F,0x6E,0x20,0x61,0x20,0x52,0x61,
- 0x73,0x70,0x62,0x65,0x72,0x72,0x79,0x20,0x50,0x69,0x20,0x28,
- 0x65,0x76,0x65,0x6E,0x20,0x6F,0x6E,0x20,0x52,0x50,0x69,0x20,
- 0x34,0x29,0x01,0x3E,0x52,0x3E,0x40,0x58,0x30,0x31,0x30,0x2D,
- 0x20,0x4E,0x6F,0x74,0x20,0x61,0x20,0x62,0x75,0x67,0x2C,0x20,
- 0x62,0x75,0x74,0x20,0x69,0x66,0x20,0x79,0x6F,0x75,0x72,0x20,
- 0x6D,0x6F,0x6E,0x69,0x74,0x6F,0x72,0x27,0x73,0x20,0x72,0x65,
- 0x66,0x72,0x65,0x73,0x68,0x20,0x72,0x61,0x74,0x65,0x20,0x69,
- 0x73,0x20,0x6E,0x6F,0x74,0x20,0x73,0x65,0x74,0x20,0x74,0x6F,
- 0x20,0x36,0x30,0x48,0x7A,0x20,0x28,0x6F,0x72,0x20,0x35,0x39,
- 0x48,0x7A,0x29,0x4F,0x3E,0x40,0x58,0x30,0x32,0x31,0x79,0x6F,
- 0x75,0x20,0x6D,0x61,0x79,0x20,0x65,0x78,0x70,0x65,0x72,0x69,
- 0x65,0x6E,0x63,0x65,0x20,0x76,0x69,0x73,0x75,0x61,0x6C,0x20,
- 0x73,0x74,0x75,0x74,0x74,0x65,0x72,0x69,0x6E,0x67,0x20,0x62,
- 0x65,0x63,0x61,0x75,0x73,0x65,0x20,0x56,0x53,0x79,0x6E,0x63,
- 0x20,0x77,0x69,0x6C,0x6C,0x20,0x6E,0x6F,0x74,0x20,0x62,0x65,
- 0x20,0x75,0x73,0x65,0x64,0x20,0x74,0x68,0x65,0x6E,0x2E,0x51,
- 0x49,0x20,0x68,0x69,0x67,0x68,0x6C,0x79,0x20,0x72,0x65,0x63,
- 0x6F,0x6D,0x6D,0x65,0x6E,0x64,0x20,0x72,0x75,0x6E,0x6E,0x69,
- 0x6E,0x67,0x20,0x79,0x6F,0x75,0x72,0x20,0x6D,0x6F,0x6E,0x69,
- 0x74,0x6F,0x72,0x20,0x61,0x74,0x20,0x36,0x30,0x48,0x7A,0x20,
- 0x69,0x66,0x20,0x79,0x6F,0x75,0x27,0x72,0x65,0x20,0x61,0x20,
- 0x68,0x61,0x72,0x64,0x63,0x6F,0x72,0x65,0x20,0x75,0x73,0x65,
- 0x72,0x20,0x6F,0x66,0x20,0x74,0x68,0x69,0x73,0x08,0x70,0x72,
- 0x6F,0x67,0x72,0x61,0x6D,0x2E,0x00,0x03,0x45,0x4E,0x44
+ 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x0C,0x40,
+ 0x4C,0x4B,0x6E,0x6F,0x77,0x6E,0x20,0x62,0x75,0x67,0x73,0x06,
+ 0x3E,0x40,0x58,0x30,0x31,0x30,0x2C,0x3E,0x40,0x43,0x30,0x30,
+ 0x31,0x57,0x41,0x56,0x20,0x65,0x78,0x70,0x6F,0x72,0x74,0x69,
+ 0x6E,0x67,0x20,0x28,0x72,0x65,0x6E,0x64,0x65,0x72,0x69,0x6E,
+ 0x67,0x20,0x73,0x6F,0x6E,0x67,0x20,0x74,0x6F,0x20,0x57,0x41,
+ 0x56,0x29,0x3A,0x01,0x3E,0x50,0x3E,0x40,0x43,0x30,0x30,0x32,
+ 0x2D,0x20,0x53,0x6F,0x6E,0x67,0x73,0x20,0x74,0x68,0x61,0x74,
+ 0x20,0x6A,0x75,0x6D,0x70,0x20,0x62,0x61,0x63,0x6B,0x20,0x74,
+ 0x6F,0x20,0x61,0x20,0x70,0x72,0x65,0x76,0x69,0x6F,0x75,0x73,
+ 0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x77,0x69,0x6C,
+ 0x6C,0x20,0x72,0x65,0x6E,0x64,0x65,0x72,0x20,0x66,0x6F,0x72,
+ 0x65,0x76,0x65,0x72,0x20,0x61,0x6E,0x64,0x20,0x65,0x76,0x65,
+ 0x72,0x2C,0x50,0x61,0x6E,0x64,0x20,0x79,0x6F,0x75,0x20,0x6E,
+ 0x65,0x65,0x64,0x20,0x74,0x6F,0x20,0x70,0x72,0x65,0x73,0x73,
+ 0x20,0x61,0x20,0x6B,0x65,0x79,0x20,0x6F,0x72,0x20,0x63,0x6C,
+ 0x69,0x63,0x6B,0x20,0x74,0x68,0x65,0x20,0x6D,0x6F,0x75,0x73,
+ 0x65,0x20,0x74,0x6F,0x20,0x61,0x62,0x6F,0x72,0x74,0x20,0x74,
+ 0x68,0x65,0x20,0x72,0x65,0x6E,0x64,0x65,0x72,0x20,0x77,0x68,
+ 0x65,0x6E,0x20,0x79,0x6F,0x75,0x20,0x77,0x61,0x6E,0x74,0x06,
+ 0x69,0x74,0x20,0x74,0x6F,0x2E,0x06,0x3E,0x40,0x58,0x30,0x31,
+ 0x30,0x17,0x3E,0x40,0x43,0x30,0x30,0x31,0x4D,0x6F,0x75,0x73,
+ 0x65,0x20,0x2F,0x20,0x6B,0x65,0x79,0x62,0x6F,0x61,0x72,0x64,
+ 0x3A,0x01,0x3E,0x43,0x3E,0x40,0x43,0x30,0x30,0x32,0x2D,0x20,
+ 0x4C,0x69,0x6E,0x75,0x78,0x3A,0x20,0x54,0x68,0x65,0x20,0x6D,
+ 0x6F,0x75,0x73,0x65,0x20,0x63,0x75,0x72,0x73,0x6F,0x72,0x20,
+ 0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x20,0x63,0x61,0x6E,
+ 0x20,0x62,0x65,0x20,0x67,0x6C,0x69,0x74,0x63,0x68,0x79,0x20,
+ 0x61,0x74,0x20,0x74,0x69,0x6D,0x65,0x73,0x2E,0x2E,0x2E,0x06,
+ 0x3E,0x40,0x58,0x30,0x31,0x30,0x0C,0x3E,0x40,0x43,0x30,0x30,
+ 0x31,0x56,0x69,0x64,0x65,0x6F,0x3A,0x06,0x3E,0x40,0x43,0x30,
+ 0x30,0x32,0x50,0x3E,0x40,0x58,0x30,0x31,0x30,0x2D,0x20,0x46,
+ 0x75,0x6C,0x6C,0x73,0x63,0x72,0x65,0x65,0x6E,0x20,0x6D,0x6F,
+ 0x64,0x65,0x20,0x63,0x61,0x6E,0x20,0x62,0x65,0x20,0x75,0x6E,
+ 0x62,0x65,0x61,0x72,0x61,0x62,0x6C,0x79,0x20,0x73,0x6C,0x6F,
+ 0x77,0x20,0x6F,0x6E,0x20,0x61,0x20,0x52,0x61,0x73,0x70,0x62,
+ 0x65,0x72,0x72,0x79,0x20,0x50,0x69,0x20,0x28,0x65,0x76,0x65,
+ 0x6E,0x20,0x6F,0x6E,0x20,0x52,0x50,0x69,0x20,0x34,0x29,0x01,
+ 0x3E,0x52,0x3E,0x40,0x58,0x30,0x31,0x30,0x2D,0x20,0x4E,0x6F,
+ 0x74,0x20,0x61,0x20,0x62,0x75,0x67,0x2C,0x20,0x62,0x75,0x74,
+ 0x20,0x69,0x66,0x20,0x79,0x6F,0x75,0x72,0x20,0x6D,0x6F,0x6E,
+ 0x69,0x74,0x6F,0x72,0x27,0x73,0x20,0x72,0x65,0x66,0x72,0x65,
+ 0x73,0x68,0x20,0x72,0x61,0x74,0x65,0x20,0x69,0x73,0x20,0x6E,
+ 0x6F,0x74,0x20,0x73,0x65,0x74,0x20,0x74,0x6F,0x20,0x36,0x30,
+ 0x48,0x7A,0x20,0x28,0x6F,0x72,0x20,0x35,0x39,0x48,0x7A,0x29,
+ 0x4F,0x3E,0x40,0x58,0x30,0x32,0x31,0x79,0x6F,0x75,0x20,0x6D,
+ 0x61,0x79,0x20,0x65,0x78,0x70,0x65,0x72,0x69,0x65,0x6E,0x63,
+ 0x65,0x20,0x76,0x69,0x73,0x75,0x61,0x6C,0x20,0x73,0x74,0x75,
+ 0x74,0x74,0x65,0x72,0x69,0x6E,0x67,0x20,0x62,0x65,0x63,0x61,
+ 0x75,0x73,0x65,0x20,0x56,0x53,0x79,0x6E,0x63,0x20,0x77,0x69,
+ 0x6C,0x6C,0x20,0x6E,0x6F,0x74,0x20,0x62,0x65,0x20,0x75,0x73,
+ 0x65,0x64,0x20,0x74,0x68,0x65,0x6E,0x2E,0x51,0x49,0x20,0x68,
+ 0x69,0x67,0x68,0x6C,0x79,0x20,0x72,0x65,0x63,0x6F,0x6D,0x6D,
+ 0x65,0x6E,0x64,0x20,0x72,0x75,0x6E,0x6E,0x69,0x6E,0x67,0x20,
+ 0x79,0x6F,0x75,0x72,0x20,0x6D,0x6F,0x6E,0x69,0x74,0x6F,0x72,
+ 0x20,0x61,0x74,0x20,0x36,0x30,0x48,0x7A,0x20,0x69,0x66,0x20,
+ 0x79,0x6F,0x75,0x27,0x72,0x65,0x20,0x61,0x20,0x68,0x61,0x72,
+ 0x64,0x63,0x6F,0x72,0x65,0x20,0x75,0x73,0x65,0x72,0x20,0x6F,
+ 0x66,0x20,0x74,0x68,0x69,0x73,0x08,0x70,0x72,0x6F,0x67,0x72,
+ 0x61,0x6D,0x2E,0x00,0x03,0x45,0x4E,0x44
};
#endif
--- a/src/mixer/ft2_mix_macros.h
+++ b/src/mixer/ft2_mix_macros.h
@@ -253,18 +253,9 @@
#define LIMIT_MIX_NUM \
i = (v->end - 1) - pos; \
- if (i > 65535) \
- i = 65535; \
+ const uint64_t tmp64 = ((uint64_t)i << 32) | ((uint32_t)posFrac ^ 0xFFFFFFFF); \
\
- i = (i << 16) | ((uint32_t)(posFrac >> 16) ^ 0xFFFF); \
- \
- /* This is hackish, but fast. This is sometimes off by one (-1), so */ \
- /* we need to do another cycle to reach the end of the sample. The */ \
- /* error is never +1, it's always below (safe). */ \
- \
- samplesToMix = ((int64_t)i * v->revDelta) >> 32; \
- samplesToMix++; \
- \
+ samplesToMix = (uint32_t)(tmp64 / (uint64_t)v->delta) + 1; /* this can be slow on 32-bit systems... */ \
if (samplesToMix > samplesLeft) \
samplesToMix = samplesLeft; \
--- /dev/null
+++ b/src/modloaders/ft2_load_digi.c
@@ -1,0 +1,260 @@
+// DIGI Booster (non-Pro) module loader
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include "../ft2_header.h"
+#include "../ft2_module_loader.h"
+#include "../ft2_sample_ed.h"
+#include "../ft2_tables.h"
+#include "../ft2_sysreqs.h"
+
+#ifdef _MSC_VER // please don't mess with this struct!
+#pragma pack(push)
+#pragma pack(1)
+#endif
+typedef struct digiHeaderTyp_t
+{
+ char sig[20];
+ char verStr[4];
+ uint8_t ver;
+ uint8_t numChannels;
+ uint8_t packedPatternsFlag;
+ char reserved[19];
+ uint8_t numPats;
+ uint8_t numOrders;
+ uint8_t orders[128];
+ uint32_t smpLength[31];
+ uint32_t smpLoopStart[31];
+ uint32_t smpLoopLength[31];
+ uint8_t smpVolume[31];
+ uint8_t smpFinetune[31];
+ char name[32];
+ char smpName[31][30];
+}
+#ifdef __GNUC__
+__attribute__ ((packed))
+#endif
+digiHeaderTyp;
+#ifdef _MSC_VER
+#pragma pack(pop)
+#endif
+
+static void readPatternNote(FILE *f, tonTyp *ton);
+
+bool loadDIGI(FILE *f, uint32_t filesize)
+{
+ int16_t i, j, k;
+ tonTyp *ton;
+ sampleTyp *s;
+ digiHeaderTyp h_DIGI;
+
+ tmpLinearPeriodsFlag = false; // use Amiga periods
+
+ if (filesize < sizeof (h_DIGI))
+ {
+ loaderMsgBox("Error: This file is either not a module, or is not supported.");
+ return false;
+ }
+
+ memset(&h_DIGI, 0, sizeof (digiHeaderTyp));
+ if (fread(&h_DIGI, 1, sizeof (h_DIGI), f) != sizeof (h_DIGI))
+ {
+ loaderMsgBox("Error: This file is either not a module, or is not supported.");
+ return false;
+ }
+
+ if (h_DIGI.numChannels < 1 || h_DIGI.numChannels > 8)
+ {
+ loaderMsgBox("Error: This file is either not a module, or is not supported.");
+ return false;
+ }
+
+ h_DIGI.numOrders++;
+ h_DIGI.numPats++;
+
+ if (h_DIGI.numOrders < 1 || h_DIGI.numOrders > 128)
+ {
+ loaderMsgBox("Error: This file is either not a module, or is not supported.");
+ return false;
+ }
+
+ songTmp.antChn = h_DIGI.numChannels;
+ songTmp.len = h_DIGI.numOrders;
+ songTmp.initialTempo = songTmp.tempo = 6;
+ songTmp.speed = 125;
+ memcpy(songTmp.songTab, h_DIGI.orders, 128);
+
+ // load pattern data
+ for (i = 0; i < h_DIGI.numPats; i++)
+ {
+ if (!allocateTmpPatt(i, 64))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ if (h_DIGI.packedPatternsFlag)
+ {
+ uint16_t pattSize;
+ uint8_t bitMasks[64];
+
+ fread(&pattSize, 2, 1, f); pattSize = SWAP16(pattSize);
+ fread(bitMasks, 1, 64, f);
+
+ for (j = 0; j < 64; j++)
+ {
+ uint8_t bit = 128;
+ for (k = 0; k < songTmp.antChn; k++, bit >>= 1)
+ {
+ ton = &pattTmp[i][(j * MAX_VOICES) + k];
+ if (bitMasks[j] & bit)
+ readPatternNote(f, ton);
+ }
+ }
+ }
+ else
+ {
+ for (j = 0; j < songTmp.antChn; j++)
+ {
+ for (k = 0; k < 64; k++)
+ {
+ ton = &pattTmp[i][(k * MAX_VOICES) + j];
+ readPatternNote(f, ton);
+ }
+ }
+ }
+
+ if (tmpPatternEmpty(i))
+ {
+ if (pattTmp[i] != NULL)
+ {
+ free(pattTmp[i]);
+ pattTmp[i] = NULL;
+ }
+ }
+ }
+
+ // pattern command handling
+ for (i = 0; i < h_DIGI.numPats; i++)
+ {
+ if (pattTmp[i] == NULL)
+ continue;
+
+ for (j = 0; j < 64; j++)
+ {
+ for (k = 0; k < songTmp.antChn; k++)
+ {
+ ton = &pattTmp[i][(j * MAX_VOICES) + k];
+
+ if (ton->effTyp == 0x8) // Robot effect (not supported)
+ {
+ ton->effTyp = 0;
+ ton->eff = 0;
+ }
+ else if (ton->effTyp == 0xE)
+ {
+ switch (ton->eff >> 4)
+ {
+ case 0x3: ton->effTyp = ton->eff = 0; break; // backwards play (not supported)
+ case 0x4: ton->eff = 0xC0; break; // stop sample (convert to EC0)
+ case 0x8: ton->effTyp = ton->eff = 0; break; // high sample offset (not supported)
+ case 0x9: ton->effTyp = ton->eff = 0; break; // retrace (not supported)
+ default: break;
+ }
+ }
+ }
+ }
+ }
+
+ // load sample data
+ for (i = 0; i < 31; i++)
+ {
+ memcpy(songTmp.instrName[1+i], h_DIGI.smpName[i], 22);
+ if (h_DIGI.smpLength[i] == 0)
+ continue;
+
+ if (!allocateTmpInstr(1+i))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ setNoEnvelope(instrTmp[1+i]);
+
+ s = &instrTmp[1+i]->samp[0];
+ memcpy(s->name, h_DIGI.smpName[i], 22);
+
+ s->len = SWAP32(h_DIGI.smpLength[i]);
+ s->fine = 8 * ((2 * ((h_DIGI.smpFinetune[i] & 0xF) ^ 8)) - 16);
+ s->vol = h_DIGI.smpVolume[i];
+ s->repS = SWAP32(h_DIGI.smpLoopStart[i]);
+ s->repL = SWAP32(h_DIGI.smpLoopLength[i]);
+
+ if (s->vol > 64)
+ s->vol = 64;
+
+ if (s->repL < 2)
+ s->repL = 2;
+
+ // fix overflown loop
+ if (s->repS+s->repL > s->len)
+ {
+ if (s->repS >= s->len)
+ {
+ s->repS = 0;
+ s->repL = 0;
+ }
+ else
+ {
+ s->repL = s->len - s->repS;
+ }
+ }
+
+ if (s->repS+s->repL > 2)
+ {
+ s->typ = 1; // enable loop
+ }
+ else
+ {
+ s->repS = 0;
+ s->repL = 0;
+ }
+
+ if (!allocateTmpSmpData(s, s->len))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ int32_t bytesRead = (int32_t)fread(s->pek, 1, s->len, f);
+ if (bytesRead < s->len)
+ {
+ int32_t bytesToClear = s->len - bytesRead;
+ memset(&s->pek[bytesRead], 0, bytesToClear);
+ }
+ }
+
+ return true;
+}
+
+static void readPatternNote(FILE *f, tonTyp *ton)
+{
+ uint8_t bytes[4];
+ fread(bytes, 1, 4, f);
+
+ // period to note
+ uint16_t period = ((bytes[0] & 0x0F) << 8) | bytes[1];
+ for (uint8_t i = 0; i < 3*12; i++)
+ {
+ if (period >= ptPeriods[i])
+ {
+ ton->ton = 1 + (3*12) + i;
+ break;
+ }
+ }
+
+ ton->instr = (bytes[0] & 0xF0) | (bytes[2] >> 4);
+ ton->effTyp = bytes[2] & 0x0F;
+ ton->eff = bytes[3];
+}
--- /dev/null
+++ b/src/modloaders/ft2_load_mod.c
@@ -1,0 +1,408 @@
+// NoiseTracker/ProTracker (or compatible) MOD loader
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include "../ft2_header.h"
+#include "../ft2_module_loader.h"
+#include "../ft2_sample_ed.h"
+#include "../ft2_tables.h"
+#include "../ft2_sysreqs.h"
+
+enum // supported 31-sample .MOD types
+{
+ FORMAT_MK, // ProTracker or compatible
+ FORMAT_FLT4, // StarTrekker (4ch modules)
+ FORMAT_FLT8, // StarTrekker (8ch modules)
+ FORMAT_FT2, // FT2 or compatible (multi-channel)
+ FORMAT_NT, // NoiseTracker
+ FORMAT_HMNT, // His Master's NoiseTracker (special one)
+
+ FORMAT_UNKNOWN
+};
+
+static uint8_t getModType(uint8_t *numChannels, const char *id);
+
+bool loadMOD(FILE *f, uint32_t filesize)
+{
+ uint8_t bytes[4], modFormat, numChannels;
+ int16_t i, j, k;
+ uint16_t a, b, period;
+ tonTyp *ton;
+ sampleTyp *s;
+ songMOD31HeaderTyp h_MOD31;
+
+ tmpLinearPeriodsFlag = false; // use Amiga periods
+
+ if (filesize < sizeof (h_MOD31))
+ {
+ loaderMsgBox("Error: This file is either not a module, or is not supported.");
+ return false;
+ }
+
+ memset(&h_MOD31, 0, sizeof (songMOD31HeaderTyp));
+ if (fread(&h_MOD31, 1, sizeof (h_MOD31), f) != sizeof (h_MOD31))
+ {
+ loaderMsgBox("Error: This file is either not a module, or is not supported.");
+ return false;
+ }
+
+ modFormat = getModType(&numChannels, h_MOD31.sig);
+ if (modFormat == FORMAT_UNKNOWN)
+ {
+ loaderMsgBox("Error: This file is either not a module, or is not supported.");
+ return false;
+ }
+
+ songTmp.antChn = numChannels;
+ songTmp.len = h_MOD31.len;
+ songTmp.repS = h_MOD31.repS;
+ songTmp.initialTempo = songTmp.tempo = 6;
+ songTmp.speed = 125;
+
+ memcpy(songTmp.songTab, h_MOD31.songTab, 128);
+
+ if (modFormat == FORMAT_MK && songTmp.len == 129)
+ songTmp.len = 127; // fixes a specific copy of beatwave.mod (FIXME: Do we want to keep this hack?)
+
+ if (songTmp.repS >= songTmp.len)
+ songTmp.repS = 0;
+
+ if (songTmp.antChn == 0 || songTmp.len < 1 || songTmp.len > 128)
+ {
+ loaderMsgBox("Error: This file is either not a module, or is not supported.");
+ return false;
+ }
+
+ for (a = 0; a < 31; a++)
+ {
+ songMODInstrHeaderTyp *smp = &h_MOD31.instr[a];
+
+ // copy over sample name if format isn't "His Master's Noisetracker" (junk sample names)
+ if (modFormat != FORMAT_HMNT)
+ memcpy(songTmp.instrName[1+a], smp->name, 22);
+ }
+
+ memcpy(songTmp.name, h_MOD31.name, 20);
+
+ // count number of patterns
+ b = 0;
+ for (a = 0; a < 128; a++)
+ {
+ if (modFormat == FORMAT_FLT8)
+ songTmp.songTab[a] >>= 1;
+
+ if (songTmp.songTab[a] > b)
+ b = songTmp.songTab[a];
+ }
+ b++;
+
+ // load pattern data
+ if (modFormat != FORMAT_FLT8)
+ {
+ // normal pattern loading
+
+ for (a = 0; a < b; a++)
+ {
+ if (!allocateTmpPatt(a, 64))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ for (j = 0; j < 64; j++)
+ {
+ for (k = 0; k < songTmp.antChn; k++)
+ {
+ ton = &pattTmp[a][(j * MAX_VOICES) + k];
+ fread(bytes, 1, 4, f);
+
+ // period to note
+ period = ((bytes[0] & 0x0F) << 8) | bytes[1];
+ for (i = 0; i < 8*12; i++)
+ {
+ if (period >= amigaPeriod[i])
+ {
+ ton->ton = (uint8_t)i + 1;
+ break;
+ }
+ }
+
+ ton->instr = (bytes[0] & 0xF0) | (bytes[2] >> 4);
+ ton->effTyp = bytes[2] & 0x0F;
+ ton->eff = bytes[3];
+ }
+ }
+
+ if (tmpPatternEmpty(a))
+ {
+ if (pattTmp[a] != NULL)
+ {
+ free(pattTmp[a]);
+ pattTmp[a] = NULL;
+ }
+ }
+ }
+ }
+ else
+ {
+ // FLT8 pattern loading
+
+ for (a = 0; a < b; a++)
+ {
+ if (!allocateTmpPatt(a, 64))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+ }
+
+ for (a = 0; a < b*2; a++)
+ {
+ int32_t pattern = a >> 1;
+ int32_t chnOffset = (a & 1) * 4;
+
+ for (j = 0; j < 64; j++)
+ {
+ for (k = 0; k < 4; k++)
+ {
+ ton = &pattTmp[pattern][(j * MAX_VOICES) + (k+chnOffset)];
+ fread(bytes, 1, 4, f);
+
+ // period to note
+ period = ((bytes[0] & 0x0F) << 8) | bytes[1];
+ for (i = 0; i < 8*12; i++)
+ {
+ if (period >= amigaPeriod[i])
+ {
+ ton->ton = (uint8_t)i + 1;
+ break;
+ }
+ }
+
+ ton->instr = (bytes[0] & 0xF0) | (bytes[2] >> 4);
+ ton->effTyp = bytes[2] & 0x0F;
+ ton->eff = bytes[3];
+ }
+ }
+ }
+
+ for (a = 0; a < b; a++)
+ {
+ if (tmpPatternEmpty(a))
+ {
+ if (pattTmp[a] != NULL)
+ {
+ free(pattTmp[a]);
+ pattTmp[a] = NULL;
+ }
+ }
+ }
+ }
+
+ // pattern command conversion
+ for (a = 0; a < b; a++)
+ {
+ if (pattTmp[a] == NULL)
+ continue;
+
+ for (j = 0; j < 64; j++)
+ {
+ for (k = 0; k < songTmp.antChn; k++)
+ {
+ ton = &pattTmp[a][(j * MAX_VOICES) + k];
+
+ if (ton->effTyp == 0xC)
+ {
+ if (ton->eff > 64)
+ ton->eff = 64;
+ }
+ else if (ton->effTyp == 0x1)
+ {
+ if (ton->eff == 0)
+ ton->effTyp = 0;
+ }
+ else if (ton->effTyp == 0x2)
+ {
+ if (ton->eff == 0)
+ ton->effTyp = 0;
+ }
+ else if (ton->effTyp == 0x5)
+ {
+ if (ton->eff == 0)
+ ton->effTyp = 0x3;
+ }
+ else if (ton->effTyp == 0x6)
+ {
+ if (ton->eff == 0)
+ ton->effTyp = 0x4;
+ }
+ else if (ton->effTyp == 0xA)
+ {
+ if (ton->eff == 0)
+ ton->effTyp = 0;
+ }
+ else if (ton->effTyp == 0xE)
+ {
+ // check if certain E commands are empty
+ if (ton->eff == 0x10 || ton->eff == 0x20 || ton->eff == 0xA0 || ton->eff == 0xB0)
+ {
+ ton->effTyp = 0;
+ ton->eff = 0;
+ }
+ }
+
+ if (modFormat == FORMAT_NT || modFormat == FORMAT_HMNT)
+ {
+ // any Dxx == D00 in NT/HMNT
+ if (ton->effTyp == 0xD)
+ ton->eff = 0;
+
+ // effect F with param 0x00 does nothing in NT/HMNT
+ if (ton->effTyp == 0xF && ton->eff == 0)
+ ton->effTyp = 0;
+ }
+ else if (modFormat == FORMAT_FLT4 || modFormat == FORMAT_FLT8) // Startrekker
+ {
+ if (ton->effTyp == 0xE) // remove unsupported "assembly macros" command
+ {
+ ton->effTyp = 0;
+ ton->eff = 0;
+ }
+
+ // Startrekker is always in vblank mode, and limits speed to 0x1F
+ if (ton->effTyp == 0xF && ton->eff > 0x1F)
+ ton->eff = 0x1F;
+ }
+ }
+ }
+ }
+
+ for (a = 0; a < 31; a++)
+ {
+ if (h_MOD31.instr[a].len == 0)
+ continue;
+
+ if (!allocateTmpInstr(1+a))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ setNoEnvelope(instrTmp[1+a]);
+
+ s = &instrTmp[1+a]->samp[0];
+
+ // copy over sample name if format isn't "His Master's Noisetracker" (junk sample names)
+ if (modFormat != FORMAT_HMNT)
+ memcpy(s->name, songTmp.instrName[1+a], 22);
+
+ if (modFormat == FORMAT_HMNT) // finetune in "His Master's NoiseTracker" is different
+ h_MOD31.instr[a].fine = (uint8_t)((-h_MOD31.instr[a].fine & 0x1F) >> 1); // one more bit of precision, + inverted
+
+ s->len = 2 * SWAP16(h_MOD31.instr[a].len);
+ s->fine = 8 * ((2 * ((h_MOD31.instr[a].fine & 0xF) ^ 8)) - 16);
+ s->vol = h_MOD31.instr[a].vol;
+ s->repS = 2 * SWAP16(h_MOD31.instr[a].repS);
+ s->repL = 2 * SWAP16(h_MOD31.instr[a].repL);
+
+ if (s->vol > 64)
+ s->vol = 64;
+
+ if (s->repL < 2)
+ s->repL = 2;
+
+ // fix for poorly converted STK (< v2.5) -> PT/NT modules (FIXME: Worth keeping or not?)
+ if (s->repL > 2 && s->repS+s->repL > s->len)
+ {
+ if ((s->repS>>1)+s->repL <= s->len)
+ s->repS >>= 1;
+ }
+
+ // fix overflown loop
+ if (s->repS+s->repL > s->len)
+ {
+ if (s->repS >= s->len)
+ {
+ s->repS = 0;
+ s->repL = 0;
+ }
+ else
+ {
+ s->repL = s->len - s->repS;
+ }
+ }
+
+ if (s->repS+s->repL > 2)
+ s->typ = 1; // enable loop
+
+ if (!allocateTmpSmpData(s, s->len))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ int32_t bytesRead = (int32_t)fread(s->pek, 1, s->len, f);
+ if (bytesRead < s->len)
+ {
+ int32_t bytesToClear = s->len - bytesRead;
+ memset(&s->pek[bytesRead], 0, bytesToClear);
+ }
+
+ if (s->typ == 0) // clear repL and repS on non-looping samples...
+ {
+ s->repL = 0;
+ s->repS = 0;
+ }
+ }
+
+ return true;
+}
+
+static uint8_t getModType(uint8_t *numChannels, const char *id)
+{
+#define IS_ID(s, b) !strncmp(s, b, 4)
+
+ uint8_t modFormat = FORMAT_UNKNOWN;
+ *numChannels = 4;
+
+ if (IS_ID("M.K.", id) || IS_ID("M!K!", id) || IS_ID("NSMS", id) ||
+ IS_ID("LARD", id) || IS_ID("PATT", id))
+ {
+ modFormat = FORMAT_MK; // ProTracker or compatible
+ }
+ else if (isdigit(id[0]) && id[1] == 'C' && id[2] == 'H' && id[3] == 'N') // xCHN
+ {
+ modFormat = FORMAT_FT2; // FT2 or compatible (multi-channel)
+ *numChannels = id[0] - '0';
+ }
+ else if (isdigit(id[0]) && isdigit(id[1]) && id[2] == 'C' && id[3] == 'H') // xxCH
+ {
+ modFormat = FORMAT_FT2; // FT2 or compatible (multi-channel)
+ *numChannels = ((id[0] - '0') * 10) + (id[1] - '0');
+ }
+ else if (isdigit(id[0]) && isdigit(id[1]) && id[2] == 'C' && id[3] == 'N') // xxCN (load as xxCH)
+ {
+ modFormat = FORMAT_FT2; // FT2 or compatible (multi-channel)
+ *numChannels = ((id[0] - '0') * 10) + (id[1] - '0');
+ }
+ else if (IS_ID("FLT4", id))
+ {
+ modFormat = FORMAT_FLT4; // StarTrekker (4ch modules)
+ }
+ else if (IS_ID("FLT8", id))
+ {
+ modFormat = FORMAT_FLT8; // StarTrekker (8ch modules)
+ *numChannels = 8;
+ }
+ else if (IS_ID("N.T.", id))
+ {
+ modFormat = FORMAT_NT; // NoiseTracker
+ }
+ else if (IS_ID("M&K!", id) || IS_ID("FEST", id))
+ {
+ modFormat = FORMAT_HMNT; // His Master's NoiseTracker (special one)
+ }
+
+ return modFormat;
+}
--- /dev/null
+++ b/src/modloaders/ft2_load_s3m.c
@@ -1,0 +1,663 @@
+// Scream Tracker 3 (or compatible) S3M loader
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include "../ft2_header.h"
+#include "../ft2_module_loader.h"
+#include "../ft2_sample_ed.h"
+#include "../ft2_tables.h"
+#include "../ft2_sysreqs.h"
+
+#ifdef _MSC_VER // please don't mess with these structs!
+#pragma pack(push)
+#pragma pack(1)
+#endif
+typedef struct songS3MinstrHeaderTyp_t
+{
+ uint8_t typ;
+ char dosName[12];
+ uint8_t memSegH;
+ uint16_t memSeg;
+ int32_t len, repS, repE;
+ uint8_t vol, dsk, pack, flags;
+ int32_t c2Spd, res1;
+ uint16_t gusPos;
+ uint8_t res2[6];
+ char name[28], id[4];
+}
+#ifdef __GNUC__
+__attribute__ ((packed))
+#endif
+songS3MinstrHeaderTyp;
+
+typedef struct songS3MHeaderTyp_t
+{
+ char name[28];
+ uint8_t id1a, typ;
+ uint16_t res1;
+ int16_t songTabLen, antInstr, antPatt;
+ uint16_t flags, trackerID, ver;
+ char id[4];
+ uint8_t globalVol, defSpeed, defTempo, masterVol, res2[12], chanType[32];
+}
+#ifdef __GNUC__
+__attribute__ ((packed))
+#endif
+songS3MHeaderTyp;
+#ifdef _MSC_VER
+#pragma pack(pop)
+#endif
+
+static uint8_t pattBuff[12288];
+
+static int8_t countS3MChannels(uint16_t antPtn);
+
+bool loadS3M(FILE *f, uint32_t filesize)
+{
+ uint8_t ha[2048];
+ uint8_t alastnfo[32], alastefx[32], alastvibnfo[32], s3mLastGInstr[32];
+ uint8_t typ;
+ int16_t ai, ap, ver, ii, kk, tmp;
+ uint16_t ptnOfs[256];
+ int32_t i, j, k, len;
+ tonTyp ton;
+ sampleTyp *s;
+ songS3MHeaderTyp h_S3M;
+ songS3MinstrHeaderTyp h_S3MInstr;
+
+ tmpLinearPeriodsFlag = false; // use Amiga periods
+
+ if (filesize < sizeof (h_S3M))
+ {
+ loaderMsgBox("Error: This file is either not a module, or is not supported.");
+ return false;
+ }
+
+ memset(&h_S3M, 0, sizeof (h_S3M));
+ if (fread(&h_S3M, 1, sizeof (h_S3M), f) != sizeof (h_S3M))
+ {
+ loaderMsgBox("Error: This file is either not a module, or is not supported.");
+ return false;
+ }
+
+ if (h_S3M.antInstr > MAX_INST || h_S3M.songTabLen > 256 || h_S3M.antPatt > 256 ||
+ h_S3M.typ != 16 || h_S3M.ver < 1 || h_S3M.ver > 2)
+ {
+ loaderMsgBox("Error loading .s3m: Incompatible module!");
+ return false;
+ }
+
+ memset(songTmp.songTab, 255, sizeof (songTmp.songTab));
+ if (fread(songTmp.songTab, h_S3M.songTabLen, 1, f) != 1)
+ {
+ loaderMsgBox("General I/O error during loading! Is the file in use?");
+ return false;
+ }
+
+ songTmp.len = h_S3M.songTabLen;
+
+ // remove pattern separators (254)
+ k = 0;
+ j = 0;
+ for (i = 0; i < songTmp.len; i++)
+ {
+ if (songTmp.songTab[i] != 254)
+ songTmp.songTab[j++] = songTmp.songTab[i];
+ else
+ k++;
+ }
+
+ if (k <= songTmp.len)
+ songTmp.len -= (uint16_t)k;
+ else
+ songTmp.len = 1;
+
+ for (i = 1; i < songTmp.len; i++)
+ {
+ if (songTmp.songTab[i] == 255)
+ {
+ songTmp.len = (uint16_t)i;
+ break;
+ }
+ }
+
+ // clear unused song table entries
+ if (songTmp.len < 255)
+ memset(&songTmp.songTab[songTmp.len], 0, 255-songTmp.len);
+
+ songTmp.speed = h_S3M.defTempo;
+ if (songTmp.speed < 32)
+ songTmp.speed = 32;
+
+ songTmp.tempo = h_S3M.defSpeed;
+ if (songTmp.tempo == 0)
+ songTmp.tempo = 6;
+
+ if (songTmp.tempo > 31)
+ songTmp.tempo = 31;
+
+ songTmp.initialTempo = songTmp.tempo;
+ memcpy(songTmp.name, h_S3M.name, 20);
+
+ ap = h_S3M.antPatt;
+ ai = h_S3M.antInstr;
+ ver = h_S3M.ver;
+
+ k = 31;
+ while (k >= 0 && h_S3M.chanType[k] >= 16) k--;
+ songTmp.antChn = (k + 2) & 254;
+
+ if (fread(ha, ai*2, 1, f) != 1)
+ {
+ loaderMsgBox("General I/O error during loading! Is the file in use?");
+ return false;
+ }
+
+ if (fread(ptnOfs, ap*2, 1, f) != 1)
+ {
+ loaderMsgBox("General I/O error during loading! Is the file in use?");
+ return false;
+ }
+
+ // *** PATTERNS ***
+
+ k = 0;
+ for (i = 0; i < ap; i++)
+ {
+ if (ptnOfs[i] == 0)
+ continue; // empty pattern
+
+ memset(alastnfo, 0, sizeof (alastnfo));
+ memset(alastefx, 0, sizeof (alastefx));
+ memset(alastvibnfo, 0, sizeof (alastvibnfo));
+ memset(s3mLastGInstr, 0, sizeof (s3mLastGInstr));
+
+ fseek(f, ptnOfs[i] << 4, SEEK_SET);
+ if (feof(f))
+ continue;
+
+ if (fread(&j, 2, 1, f) != 1)
+ {
+ loaderMsgBox("General I/O error during loading! Is the file in use?");
+ return false;
+ }
+
+ if (j > 0 && j <= 12288)
+ {
+ if (!allocateTmpPatt(i, 64))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ fread(pattBuff, j, 1, f);
+
+ k = 0;
+ kk = 0;
+
+ while (k < j && kk < 64)
+ {
+ typ = pattBuff[k++];
+
+ if (typ == 0)
+ {
+ kk++;
+ }
+ else
+ {
+ ii = typ & 31;
+
+ memset(&ton, 0, sizeof (ton));
+
+ // note and sample
+ if (typ & 32)
+ {
+ ton.ton = pattBuff[k++];
+ ton.instr = pattBuff[k++];
+
+ if (ton.instr > MAX_INST)
+ ton.instr = 0;
+
+ if (ton.ton == 254) ton.ton = 97;
+ else if (ton.ton == 255) ton.ton = 0;
+ else
+ {
+ ton.ton = 1 + (ton.ton & 0xF) + (ton.ton >> 4) * 12;
+ if (ton.ton > 96)
+ ton.ton = 0;
+ }
+ }
+
+ // volume column
+ if (typ & 64)
+ {
+ ton.vol = pattBuff[k++];
+
+ if (ton.vol <= 64)
+ ton.vol += 0x10;
+ else
+ ton.vol = 0;
+ }
+
+ // effect
+ if (typ & 128)
+ {
+ ton.effTyp = pattBuff[k++];
+ ton.eff = pattBuff[k++];
+
+ if (ton.eff > 0)
+ {
+ alastnfo[ii] = ton.eff;
+ if (ton.effTyp == 8 || ton.effTyp == 21)
+ alastvibnfo[ii] = ton.eff; // H/U
+ }
+
+ // in ST3, a lot of effects directly share the same memory!
+ if (ton.eff == 0 && ton.effTyp != 7) // G
+ {
+ uint8_t efx = ton.effTyp;
+ if (efx == 8 || efx == 21) // H/U
+ ton.eff = alastvibnfo[ii];
+ else if ((efx >= 4 && efx <= 12) || (efx >= 17 && efx <= 19)) // D/E/F/I/J/K/L/Q/R/S
+ ton.eff = alastnfo[ii];
+
+ /* If effect data is zero and effect type was the same as last one, clear out
+ ** data if it's not J or S (those have no memory in the equivalent XM effects).
+ ** Also goes for extra fine pitch slides and fine volume slides,
+ ** since they get converted to other effects.
+ */
+ if (efx == alastefx[ii] && ton.effTyp != 10 && ton.effTyp != 19) // J/S
+ {
+ uint8_t nfo = ton.eff;
+ bool extraFinePitchSlides = (efx == 5 || efx == 6) && ((nfo & 0xF0) == 0xE0);
+ bool fineVolSlides = (efx == 4 || efx == 11) &&
+ ((nfo > 0xF0) || (((nfo & 0xF) == 0xF) && ((nfo & 0xF0) > 0)));
+
+ if (!extraFinePitchSlides && !fineVolSlides)
+ ton.eff = 0;
+ }
+ }
+
+ if (ton.effTyp > 0)
+ alastefx[ii] = ton.effTyp;
+
+ switch (ton.effTyp)
+ {
+ case 1: // A
+ {
+ ton.effTyp = 0xF;
+ if (ton.eff == 0 || ton.eff > 0x1F)
+ {
+ ton.effTyp = 0;
+ ton.eff = 0;
+ }
+ }
+ break;
+
+ case 2: ton.effTyp = 0xB; break; // B
+ case 3: ton.effTyp = 0xD; break; // C
+ case 4: // D
+ {
+ if (ton.eff > 0xF0) // fine slide up
+ {
+ ton.effTyp = 0xE;
+ ton.eff = 0xB0 | (ton.eff & 0xF);
+ }
+ else if ((ton.eff & 0x0F) == 0x0F && (ton.eff & 0xF0) > 0) // fine slide down
+ {
+ ton.effTyp = 0xE;
+ ton.eff = 0xA0 | (ton.eff >> 4);
+ }
+ else
+ {
+ ton.effTyp = 0xA;
+ if (ton.eff & 0x0F) // on D/K, last nybble has first priority in ST3
+ ton.eff &= 0x0F;
+ }
+ }
+ break;
+
+ case 5: // E
+ case 6: // F
+ {
+ if ((ton.eff & 0xF0) >= 0xE0)
+ {
+ // convert to fine slide
+ if ((ton.eff & 0xF0) == 0xE0)
+ tmp = 0x21;
+ else
+ tmp = 0xE;
+
+ ton.eff &= 0x0F;
+
+ if (ton.effTyp == 0x05)
+ ton.eff |= 0x20;
+ else
+ ton.eff |= 0x10;
+
+ ton.effTyp = (uint8_t)tmp;
+
+ if (ton.effTyp == 0x21 && ton.eff == 0)
+ {
+ ton.effTyp = 0;
+ }
+ }
+ else
+ {
+ // convert to normal 1xx/2xx slide
+ ton.effTyp = 7 - ton.effTyp;
+ }
+ }
+ break;
+
+ case 7: // G
+ {
+ ton.effTyp = 0x03;
+
+ // fix illegal slides (to new instruments)
+ if (ton.instr != 0 && ton.instr != s3mLastGInstr[ii])
+ ton.instr = s3mLastGInstr[ii];
+ }
+ break;
+
+ case 11: // K
+ {
+ if (ton.eff > 0xF0) // fine slide up
+ {
+ ton.effTyp = 0xE;
+ ton.eff = 0xB0 | (ton.eff & 0xF);
+
+ // if volume column is unoccupied, set to vibrato
+ if (ton.vol == 0)
+ ton.vol = 0xB0;
+ }
+ else if ((ton.eff & 0x0F) == 0x0F && (ton.eff & 0xF0) > 0) // fine slide down
+ {
+ ton.effTyp = 0xE;
+ ton.eff = 0xA0 | (ton.eff >> 4);
+
+ // if volume column is unoccupied, set to vibrato
+ if (ton.vol == 0)
+ ton.vol = 0xB0;
+ }
+ else
+ {
+ ton.effTyp = 0x6;
+ if (ton.eff & 0x0F) // on D/K, last nybble has first priority in ST3
+ ton.eff &= 0x0F;
+ }
+ }
+ break;
+
+ case 8: ton.effTyp = 0x04; break; // H
+ case 9: ton.effTyp = 0x1D; break; // I
+ case 10: ton.effTyp = 0x00; break; // J
+ case 12: ton.effTyp = 0x05; break; // L
+ case 15: ton.effTyp = 0x09; break; // O
+ case 17: ton.effTyp = 0x1B; break; // Q
+ case 18: ton.effTyp = 0x07; break; // R
+
+ case 19: // S
+ {
+ ton.effTyp = 0xE;
+ tmp = ton.eff >> 4;
+ ton.eff &= 0x0F;
+
+ if (tmp == 0x1) ton.eff |= 0x30;
+ else if (tmp == 0x2) ton.eff |= 0x50;
+ else if (tmp == 0x3) ton.eff |= 0x40;
+ else if (tmp == 0x4) ton.eff |= 0x70;
+ // ignore S8x becuase it's not compatible with FT2 panning
+ else if (tmp == 0xB) ton.eff |= 0x60;
+ else if (tmp == 0xC) // Note Cut
+ {
+ ton.eff |= 0xC0;
+ if (ton.eff == 0xC0)
+ {
+ // EC0 does nothing in ST3 but cuts voice in FT2, remove effect
+ ton.effTyp = 0;
+ ton.eff = 0;
+ }
+ }
+ else if (tmp == 0xD) // Note Delay
+ {
+ ton.eff |= 0xD0;
+ if (ton.ton == 0 || ton.ton == 97)
+ {
+ // EDx without a note does nothing in ST3 but retrigs in FT2, remove effect
+ ton.effTyp = 0;
+ ton.eff = 0;
+ }
+ else if (ton.eff == 0xD0)
+ {
+ // ED0 prevents note/smp/vol from updating in ST3, remove everything
+ ton.ton = 0;
+ ton.instr = 0;
+ ton.vol = 0;
+ ton.effTyp = 0;
+ ton.eff = 0;
+ }
+ }
+ else if (tmp == 0xE) ton.eff |= 0xE0;
+ else if (tmp == 0xF) ton.eff |= 0xF0;
+ else
+ {
+ ton.effTyp = 0;
+ ton.eff = 0;
+ }
+ }
+ break;
+
+ case 20: // T
+ {
+ ton.effTyp = 0x0F;
+ if (ton.eff < 0x21) // Txx with a value lower than 33 (0x21) does nothing in ST3, remove effect
+ {
+ ton.effTyp = 0;
+ ton.eff = 0;
+ }
+ }
+ break;
+
+ case 22: // V
+ {
+ ton.effTyp = 0x10;
+ if (ton.eff > 0x40)
+ {
+ // Vxx > 0x40 does nothing in ST3
+ ton.effTyp = 0;
+ ton.eff = 0;
+ }
+ }
+ break;
+
+ default:
+ {
+ ton.effTyp = 0;
+ ton.eff = 0;
+ }
+ break;
+ }
+ }
+
+ if (ton.instr != 0 && ton.effTyp != 0x3)
+ s3mLastGInstr[ii] = ton.instr;
+
+ if (ton.effTyp > 35)
+ {
+ ton.effTyp = 0;
+ ton.eff = 0;
+ }
+
+ pattTmp[i][(kk * MAX_VOICES) + ii] = ton;
+ }
+ }
+
+ if (tmpPatternEmpty((uint16_t)i))
+ {
+ if (pattTmp[i] != NULL)
+ {
+ free(pattTmp[i]);
+ pattTmp[i] = NULL;
+ }
+ }
+ }
+ }
+
+ // *** SAMPLES ***
+
+ bool adlibInsWarn = false;
+
+ memcpy(ptnOfs, ha, 512);
+ for (i = 0; i < ai; i++)
+ {
+ fseek(f, ptnOfs[i] << 4, SEEK_SET);
+
+ if (fread(&h_S3MInstr, 1, sizeof (h_S3MInstr), f) != sizeof (h_S3MInstr))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ memcpy(songTmp.instrName[1+i], h_S3MInstr.name, 22);
+
+ if (h_S3MInstr.typ == 2)
+ {
+ adlibInsWarn = true;
+ }
+ else if (h_S3MInstr.typ == 1)
+ {
+ if ((h_S3MInstr.flags & (255-1-2-4)) != 0 || h_S3MInstr.pack != 0)
+ {
+ loaderMsgBox("Error loading .s3m: Incompatible module!");
+ return false;
+ }
+ else if (h_S3MInstr.memSeg > 0 && h_S3MInstr.len > 0)
+ {
+ if (!allocateTmpInstr((int16_t)(1 + i)))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ setNoEnvelope(instrTmp[1 + i]);
+ s = &instrTmp[1+i]->samp[0];
+
+ // non-FT2: fixes "miracle man.s3m" and other broken S3Ms
+ if ((h_S3MInstr.memSeg<<4)+h_S3MInstr.len > (int32_t)filesize)
+ h_S3MInstr.len = filesize - (h_S3MInstr.memSeg << 4);
+
+ len = h_S3MInstr.len;
+
+ bool hasLoop = h_S3MInstr.flags & 1;
+ bool stereoSample = (h_S3MInstr.flags >> 1) & 1;
+ bool is16Bit = (h_S3MInstr.flags >> 2) & 1;
+
+ if (is16Bit) // 16-bit
+ len <<= 1;
+
+ if (stereoSample) // stereo
+ len <<= 1;
+
+ if (!allocateTmpSmpData(s, len))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ memcpy(s->name, h_S3MInstr.name, 21);
+
+ if (h_S3MInstr.c2Spd > 65535) // ST3 (and OpenMPT) does this
+ h_S3MInstr.c2Spd = 65535;
+
+ s->len = h_S3MInstr.len;
+ s->vol = h_S3MInstr.vol;
+ s->repS = h_S3MInstr.repS;
+ s->repL = h_S3MInstr.repE - h_S3MInstr.repS;
+
+ tuneSample(s, h_S3MInstr.c2Spd, tmpLinearPeriodsFlag);
+
+ if (s->vol > 64)
+ s->vol = 64;
+
+ if (s->repL <= 2 || s->repS+s->repL > s->len || s->repL == 0)
+ {
+ s->repS = 0;
+ s->repL = 0;
+ hasLoop = false;
+ }
+
+ s->typ = hasLoop + (is16Bit << 4);
+
+ fseek(f, h_S3MInstr.memSeg << 4, SEEK_SET);
+
+ if (ver == 1)
+ {
+ fseek(f, len, SEEK_CUR); // sample not supported
+ }
+ else
+ {
+ if (fread(s->pek, len, 1, f) != 1)
+ {
+ loaderMsgBox("General I/O error during loading! Is the file in use?");
+ return false;
+ }
+
+ if (is16Bit)
+ {
+ conv16BitSample(s->pek, len, stereoSample);
+
+ s->len <<= 1;
+ s->repS <<= 1;
+ s->repL <<= 1;
+ }
+ else
+ {
+ conv8BitSample(s->pek, len, stereoSample);
+ }
+
+ // if stereo sample: reduce memory footprint after sample was downmixed to mono
+ if (stereoSample)
+ reallocateTmpSmpData(s, s->len);
+ }
+ }
+ }
+ }
+
+ songTmp.antChn = countS3MChannels(ap);
+
+ if (adlibInsWarn)
+ loaderMsgBox("Warning: The module contains unsupported AdLib instruments!");
+
+ if (!(config.dontShowAgainFlags & DONT_SHOW_S3M_LOAD_WARNING_FLAG))
+ loaderSysReq(6, "System message", "Warning: S3M channel panning is ignored because it's not compatible with FT2.");
+
+ return true;
+}
+
+static int8_t countS3MChannels(uint16_t antPtn)
+{
+ int32_t channels = 0;
+ for (int32_t i = 0; i < antPtn; i++)
+ {
+ if (pattTmp[i] == NULL)
+ continue;
+
+ tonTyp *ton = pattTmp[i];
+ for (int32_t j = 0; j < 64; j++)
+ {
+ for (int32_t k = 0; k < MAX_VOICES; k++, ton++)
+ {
+ if (ton->eff == 0 && ton->effTyp == 0 && ton->instr == 0 && ton->ton == 0 && ton->vol == 0)
+ continue;
+
+ if (k > channels)
+ channels = k;
+ }
+ }
+ }
+ channels++;
+
+ return (int8_t)channels;
+}
--- /dev/null
+++ b/src/modloaders/ft2_load_stk.c
@@ -1,0 +1,350 @@
+// Ultimate SoundTracker (or compatible) STK loader
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include "../ft2_header.h"
+#include "../ft2_module_loader.h"
+#include "../ft2_sample_ed.h"
+#include "../ft2_tables.h"
+#include "../ft2_sysreqs.h"
+
+#ifdef _MSC_VER // please don't mess with this struct!
+#pragma pack(push)
+#pragma pack(1)
+#endif
+typedef struct songMOD15HeaderTyp_t
+{
+ char name[20];
+ songMODInstrHeaderTyp instr[15];
+ uint8_t len, CIAVal, songTab[128];
+}
+#ifdef __GNUC__
+__attribute__ ((packed))
+#endif
+songMOD15HeaderTyp;
+#ifdef _MSC_VER
+#pragma pack(pop)
+#endif
+
+bool loadSTK(FILE *f, uint32_t filesize)
+{
+ uint8_t bytes[4];
+ int16_t i, j, k;
+ uint16_t a, b, period;
+ tonTyp *ton;
+ sampleTyp *s;
+ songMOD15HeaderTyp h_MOD15;
+
+ tmpLinearPeriodsFlag = false; // use Amiga periods
+
+ bool veryLateSTKVerFlag = false; // "DFJ SoundTracker III" nad later
+ bool lateSTKVerFlag = false; // "TJC SoundTracker II" and later
+
+ if (filesize < sizeof (h_MOD15))
+ {
+ loaderMsgBox("Error: This file is either not a module, or is not supported.");
+ return false;
+ }
+
+ memset(&h_MOD15, 0, sizeof (songMOD15HeaderTyp));
+ if (fread(&h_MOD15, 1, sizeof (h_MOD15), f) != sizeof (h_MOD15))
+ {
+ loaderMsgBox("Error: This file is either not a module, or is not supported.");
+ return false;
+ }
+
+ if (h_MOD15.CIAVal == 0) // a CIA value of 0 results in 120
+ h_MOD15.CIAVal = 120;
+
+ songTmp.antChn = 4;
+ songTmp.len = h_MOD15.len;
+ songTmp.speed = 125;
+ songTmp.initialTempo = songTmp.tempo = 6;
+ memcpy(songTmp.songTab, h_MOD15.songTab, 128);
+
+ if (songTmp.len < 1 || songTmp.len > 128 || h_MOD15.CIAVal > 220)
+ {
+ loaderMsgBox("Error: This file is either not a module, or is not supported.");
+ return false;
+ }
+
+ for (a = 0; a < 15; a++)
+ {
+ songMODInstrHeaderTyp *smp = &h_MOD15.instr[a];
+ memcpy(songTmp.instrName[1+a], smp->name, 22);
+
+ /* Only late versions of Ultimate SoundTracker supports samples larger than 9999 bytes.
+ ** If found, we know for sure that this is a late STK module.
+ */
+ const int32_t sampleLen = 2*SWAP16(smp->len);
+ if (sampleLen > 9999)
+ lateSTKVerFlag = true;
+ }
+
+ // jjk55.mod by Jesper Kyd has a bogus STK tempo value that should be ignored (hackish!)
+ if (!strcmp("jjk55", h_MOD15.name))
+ h_MOD15.CIAVal = 120;
+
+ if (h_MOD15.CIAVal != 120) // 120 is a special case and means 50Hz (125BPM)
+ {
+ // convert UST tempo to BPM
+ uint16_t ciaPeriod = (240 - h_MOD15.CIAVal) * 122;
+ double dHz = 709379.0 / ciaPeriod;
+ int32_t BPM = (int32_t)((dHz * 2.5) + 0.5);
+
+ songTmp.speed = (uint16_t)BPM;
+ }
+
+ memcpy(songTmp.name, h_MOD15.name, 20);
+
+ // count number of patterns
+ b = 0;
+ for (a = 0; a < 128; a++)
+ {
+ if (songTmp.songTab[a] > b)
+ b = songTmp.songTab[a];
+ }
+ b++;
+
+ for (a = 0; a < b; a++)
+ {
+ if (!allocateTmpPatt(a, 64))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ for (j = 0; j < 64; j++)
+ {
+ for (k = 0; k < songTmp.antChn; k++)
+ {
+ ton = &pattTmp[a][(j * MAX_VOICES) + k];
+
+ if (fread(bytes, 1, 4, f) != 4)
+ {
+ loaderMsgBox("Error: This file is either not a module, or is not supported.");
+ return false;
+ }
+
+ // period to note
+ period = ((bytes[0] & 0x0F) << 8) | bytes[1];
+ for (i = 0; i < 3*12; i++)
+ {
+ if (period >= ptPeriods[i])
+ {
+ ton->ton = 1 + (3*12) + (uint8_t)i;
+ break;
+ }
+ }
+
+ ton->instr = (bytes[0] & 0xF0) | (bytes[2] >> 4);
+ ton->effTyp = bytes[2] & 0x0F;
+ ton->eff = bytes[3];
+
+ if (ton->effTyp == 0xC || ton->effTyp == 0xD || ton->effTyp == 0xE)
+ {
+ // "TJC SoundTracker II" and later
+ lateSTKVerFlag = true;
+ }
+
+ if (ton->effTyp == 0xF)
+ {
+ // "DFJ SoundTracker III" and later
+ lateSTKVerFlag = true;
+ veryLateSTKVerFlag = true;
+ }
+
+ if (ton->effTyp == 0xC)
+ {
+ if (ton->eff > 64)
+ ton->eff = 64;
+ }
+ else if (ton->effTyp == 0x1)
+ {
+ if (ton->eff == 0)
+ ton->effTyp = 0;
+ }
+ else if (ton->effTyp == 0x2)
+ {
+ if (ton->eff == 0)
+ ton->effTyp = 0;
+ }
+ else if (ton->effTyp == 0x5)
+ {
+ if (ton->eff == 0)
+ ton->effTyp = 0x3;
+ }
+ else if (ton->effTyp == 0x6)
+ {
+ if (ton->eff == 0)
+ ton->effTyp = 0x4;
+ }
+ else if (ton->effTyp == 0xA)
+ {
+ if (ton->eff == 0)
+ ton->effTyp = 0;
+ }
+ else if (ton->effTyp == 0xE)
+ {
+ // check if certain E commands are empty
+ if (ton->eff == 0x10 || ton->eff == 0x20 || ton->eff == 0xA0 || ton->eff == 0xB0)
+ {
+ ton->effTyp = 0;
+ ton->eff = 0;
+ }
+ }
+ }
+ }
+
+ if (tmpPatternEmpty(a))
+ {
+ if (pattTmp[a] != NULL)
+ {
+ free(pattTmp[a]);
+ pattTmp[a] = NULL;
+ }
+ }
+ }
+
+ // pattern command conversion for non-PT formats
+ for (a = 0; a < b; a++)
+ {
+ if (pattTmp[a] == NULL)
+ continue;
+
+ for (j = 0; j < 64; j++)
+ {
+ for (k = 0; k < songTmp.antChn; k++)
+ {
+ ton = &pattTmp[a][(j * MAX_VOICES) + k];
+
+ // convert STK effects to PT effects
+
+ if (!lateSTKVerFlag)
+ {
+ // old SoundTracker 1.x commands
+
+ if (ton->effTyp == 1)
+ {
+ // arpeggio
+ ton->effTyp = 0;
+ }
+ else if (ton->effTyp == 2)
+ {
+ // pitch slide
+ if (ton->eff & 0xF0)
+ {
+ // pitch slide down
+ ton->effTyp = 2;
+ ton->eff >>= 4;
+ }
+ else if (ton->eff & 0x0F)
+ {
+ // pitch slide up
+ ton->effTyp = 1;
+ }
+ }
+ }
+ else
+ {
+ // "DFJ SoundTracker II" or later
+
+ if (ton->effTyp == 0xD)
+ {
+ if (veryLateSTKVerFlag) // "DFJ SoundTracker III" or later
+ {
+ // pattern break w/ no param (param must be cleared to fix some songs)
+ ton->eff = 0;
+ }
+ else
+ {
+ // volume slide
+ ton->effTyp = 0xA;
+ }
+ }
+ }
+
+ // effect F with param 0x00 does nothing in UST/STK (I think)
+ if (ton->effTyp == 0xF && ton->eff == 0)
+ ton->effTyp = 0;
+ }
+ }
+ }
+
+ for (a = 0; a < 15; a++)
+ {
+ if (h_MOD15.instr[a].len == 0)
+ continue;
+
+ if (!allocateTmpInstr(1+a))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ setNoEnvelope(instrTmp[1+a]);
+
+ s = &instrTmp[1+a]->samp[0];
+ s->vol = h_MOD15.instr[a].vol;
+
+ s->len = 2 * SWAP16(h_MOD15.instr[a].len);
+ s->repS = SWAP16(h_MOD15.instr[a].repS); // in STK, loopStart = bytes, not words
+ s->repL = 2 * SWAP16(h_MOD15.instr[a].repL);
+
+ if (s->vol > 64)
+ s->vol = 64;
+
+ if (s->repL < 2)
+ s->repL = 2;
+
+ // fix overflown loop
+ if (s->repS+s->repL > s->len)
+ {
+ if (s->repS >= s->len)
+ {
+ s->repS = 0;
+ s->repL = 0;
+ }
+ else
+ {
+ s->repL = s->len - s->repS;
+ }
+ }
+
+ if (s->repS+s->repL > 2)
+ {
+ s->typ = 1; // enable loop
+ }
+ else
+ {
+ s->repL = 0;
+ s->repS = 0;
+ }
+
+ /* In STK, only the loop area of a looped sample is played.
+ ** Skip loading of eventual data present before loop start.
+ */
+ if (s->repS > 0 && s->repL < s->len)
+ {
+ s->len -= s->repS;
+ fseek(f, s->repS, SEEK_CUR);
+ s->repS = 0;
+ }
+
+ if (!allocateTmpSmpData(s, s->len))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ int32_t bytesRead = (int32_t)fread(s->pek, 1, s->len, f);
+ if (bytesRead < s->len)
+ {
+ int32_t bytesToClear = s->len - bytesRead;
+ memset(&s->pek[bytesRead], 0, bytesToClear);
+ }
+ }
+
+ return true;
+}
--- /dev/null
+++ b/src/modloaders/ft2_load_stm.c
@@ -1,0 +1,263 @@
+// Scream Tracker 2 STM loader
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include "../ft2_header.h"
+#include "../ft2_module_loader.h"
+#include "../ft2_sample_ed.h"
+#include "../ft2_tables.h"
+#include "../ft2_sysreqs.h"
+
+#ifdef _MSC_VER // please don't mess with these structs!
+#pragma pack(push)
+#pragma pack(1)
+#endif
+typedef struct songSTMinstrHeaderTyp_t
+{
+ char name[12];
+ uint8_t nul, insDisk;
+ uint16_t reserved1, len, repS, repE;
+ uint8_t vol, reserved2;
+ uint16_t rate;
+ int32_t reserved3;
+ uint16_t paraLen;
+}
+#ifdef __GNUC__
+__attribute__ ((packed))
+#endif
+songSTMinstrHeaderTyp;
+
+typedef struct songSTMHeaderTyp_t
+{
+ char name[20], sig[8];
+ uint8_t id1a, typ;
+ uint8_t verMajor, verMinor;
+ uint8_t tempo, ap, vol, reserved[13];
+ songSTMinstrHeaderTyp instr[31];
+ uint8_t songTab[128];
+}
+#ifdef __GNUC__
+__attribute__ ((packed))
+#endif
+songSTMHeaderTyp;
+#ifdef _MSC_VER
+#pragma pack(pop)
+#endif
+
+static const uint8_t stmEff[16] = { 0, 0, 11, 0, 10, 2, 1, 3, 4, 7, 0, 5, 6, 0, 0, 0 };
+
+static uint8_t stmTempoToBPM(uint8_t tempo);
+
+bool loadSTM(FILE *f, uint32_t filesize)
+{
+ uint8_t typ, tempo, pattBuff[1024];
+ int16_t i, j, k, ap, tmp;
+ uint16_t a;
+ tonTyp *ton;
+ sampleTyp *s;
+ songSTMHeaderTyp h_STM;
+
+ tmpLinearPeriodsFlag = false; // use Amiga periods
+
+ if (filesize < sizeof (h_STM))
+ {
+ loaderMsgBox("Error: This file is either not a module, or is not supported.");
+ return false;
+ }
+
+ if (fread(&h_STM, 1, sizeof (h_STM), f) != sizeof (h_STM))
+ {
+ loaderMsgBox("Error: This file is either not a module, or is not supported.");
+ return false;
+ }
+
+ if (h_STM.verMinor == 0 || h_STM.typ != 2)
+ {
+ loaderMsgBox("Error loading STM: Incompatible module!");
+ return false;
+ }
+
+ songTmp.antChn = 4;
+ memcpy(songTmp.songTab, h_STM.songTab, 128);
+
+ i = 0;
+ while (i < 128 && songTmp.songTab[i] < 99) i++;
+ songTmp.len = i + (i == 0);
+
+ if (songTmp.len < 255)
+ memset(&songTmp.songTab[songTmp.len], 0, 256 - songTmp.len);
+
+ memcpy(songTmp.name, h_STM.name, 20);
+
+ tempo = h_STM.tempo;
+ if (h_STM.verMinor < 21)
+ tempo = ((tempo / 10) << 4) + (tempo % 10);
+
+ if (tempo == 0)
+ tempo = 96;
+
+ songTmp.initialTempo = songTmp.tempo = CLAMP(h_STM.tempo >> 4, 1, 31);
+ songTmp.speed = stmTempoToBPM(tempo);
+
+ if (h_STM.verMinor > 10)
+ songTmp.globVol = MIN(h_STM.vol, 64);
+
+ ap = h_STM.ap;
+ for (i = 0; i < ap; i++)
+ {
+ if (!allocateTmpPatt(i, 64))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ if (fread(pattBuff, 64 * 4 * 4, 1, f) != 1)
+ {
+ loaderMsgBox("General I/O error during loading!");
+ return false;
+ }
+
+ a = 0;
+ for (j = 0; j < 64; j++)
+ {
+ for (k = 0; k < 4; k++)
+ {
+ ton = &pattTmp[i][(j * MAX_VOICES) + k];
+
+ if (pattBuff[a] == 254)
+ {
+ ton->ton = 97;
+ }
+ else if (pattBuff[a] < 96)
+ {
+ ton->ton = (12 * (pattBuff[a] >> 4)) + (25 + (pattBuff[a] & 0x0F));
+ if (ton->ton > 96)
+ ton->ton = 0;
+ }
+ else
+ {
+ ton->ton = 0;
+ }
+
+ ton->instr = pattBuff[a + 1] >> 3;
+ typ = (pattBuff[a + 1] & 7) + ((pattBuff[a + 2] & 0xF0) >> 1);
+ if (typ <= 64)
+ ton->vol = typ + 0x10;
+
+ ton->eff = pattBuff[a + 3];
+
+ tmp = pattBuff[a + 2] & 0x0F;
+ if (tmp == 1)
+ {
+ ton->effTyp = 15;
+
+ if (h_STM.verMinor < 21)
+ ton->eff = ((ton->eff / 10) << 4) + (ton->eff % 10);
+
+ ton->eff >>= 4;
+ }
+ else if (tmp == 3)
+ {
+ ton->effTyp = 13;
+ ton->eff = 0;
+ }
+ else if (tmp == 2 || (tmp >= 4 && tmp <= 12))
+ {
+ ton->effTyp = stmEff[tmp];
+ if (ton->effTyp == 0xA)
+ {
+ if (ton->eff & 0x0F)
+ ton->eff &= 0x0F;
+ else
+ ton->eff &= 0xF0;
+ }
+ }
+ else
+ {
+ ton->eff = 0;
+ }
+
+ if (ton->effTyp > 35)
+ {
+ ton->effTyp = 0;
+ ton->eff = 0;
+ }
+
+ a += 4;
+ }
+ }
+
+ if (tmpPatternEmpty(i))
+ {
+ if (pattTmp[i] != NULL)
+ {
+ free(pattTmp[i]);
+ pattTmp[i] = NULL;
+ }
+ }
+ }
+
+ for (i = 0; i < 31; i++)
+ {
+ memcpy(&songTmp.instrName[1+i], h_STM.instr[i].name, 12);
+
+ if (h_STM.instr[i].len != 0 && h_STM.instr[i].reserved1 != 0)
+ {
+ allocateTmpInstr(1 + i);
+ setNoEnvelope(instrTmp[i]);
+
+ s = &instrTmp[1+i]->samp[0];
+
+ if (!allocateTmpSmpData(s, h_STM.instr[i].len))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ s->len = h_STM.instr[i].len;
+ s->vol = h_STM.instr[i].vol;
+ s->repS = h_STM.instr[i].repS;
+ s->repL = h_STM.instr[i].repE - h_STM.instr[i].repS;
+
+ memcpy(s->name, h_STM.instr[i].name, 12);
+ tuneSample(s, h_STM.instr[i].rate, tmpLinearPeriodsFlag);
+
+ if (s->repS < s->len && h_STM.instr[i].repE > s->repS && h_STM.instr[i].repE != 0xFFFF)
+ {
+ if (s->repS+s->repL > s->len)
+ s->repL = s->len - s->repS;
+
+ s->typ = 1; // enable loop
+ }
+ else
+ {
+ s->repS = 0;
+ s->repL = 0;
+ s->typ = 0;
+ }
+
+ if (s->vol > 64)
+ s->vol = 64;
+
+ if (fread(s->pek, s->len, 1, f) != 1)
+ {
+ loaderMsgBox("General I/O error during loading! Possibly corrupt module?");
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+static uint8_t stmTempoToBPM(uint8_t tempo) // ported from original ST2.3 replayer code
+{
+ const uint8_t slowdowns[16] = { 140, 50, 25, 15, 10, 7, 6, 4, 3, 3, 2, 2, 2, 2, 1, 1 };
+ uint16_t hz = 50;
+
+ hz -= ((slowdowns[tempo >> 4] * (tempo & 15)) >> 4); // can and will underflow
+
+ const uint32_t bpm = (hz << 1) + (hz >> 1); // BPM = hz * 2.5
+ return (uint8_t)CLAMP(bpm, 32, 255); // result can be slightly off, but close enough...
+}
--- /dev/null
+++ b/src/modloaders/ft2_load_xm.c
@@ -1,0 +1,626 @@
+// Fasttracker II (or compatible) XM loader
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include "../ft2_header.h"
+#include "../ft2_module_loader.h"
+#include "../ft2_sample_ed.h"
+#include "../ft2_tables.h"
+#include "../ft2_sysreqs.h"
+
+static uint8_t packedPattData[65536];
+
+/* ModPlug Tracker & OpenMPT supports up to 32 samples per instrument for XMs - we don't.
+** For such modules, we use a temporary array here to store the extra sample data lengths
+** we need to skip to be able to load the file (we lose the extra samples, though...).
+*/
+static uint32_t extraSampleLengths[32-MAX_SMP_PER_INST];
+
+static bool loadInstrHeader(FILE *f, uint16_t i);
+static bool loadInstrSample(FILE *f, uint16_t i);
+static void unpackPatt(uint8_t *dst, uint8_t *src, uint16_t len, int32_t antChn);
+static bool loadPatterns(FILE *f, uint16_t antPtn);
+static void unpackPatt(uint8_t *dst, uint8_t *src, uint16_t len, int32_t antChn);
+static void sanitizeInstrument(instrTyp *ins);
+
+bool loadXM(FILE *f, uint32_t filesize)
+{
+ uint16_t i;
+ songHeaderTyp h;
+
+ if (filesize < sizeof (h))
+ {
+ loaderMsgBox("Error: This file is either not a module, or is not supported.");
+ return false;
+ }
+
+ if (fread(&h, 1, sizeof (h), f) != sizeof (h))
+ {
+ loaderMsgBox("Error: This file is either not a module, or is not supported.");
+ return false;
+ }
+
+ if (h.ver < 0x0102 || h.ver > 0x0104)
+ {
+ loaderMsgBox("Error loading XM: Unsupported file version (v%01X.%02X).", (h.ver >> 8) & 15, h.ver & 0xFF);
+ return false;
+ }
+
+ if (h.len > MAX_ORDERS)
+ {
+ loaderMsgBox("Error loading XM: The song has more than 256 orders!");
+ return false;
+ }
+
+ if (h.antPtn > MAX_PATTERNS)
+ {
+ loaderMsgBox("Error loading XM: The song has more than 256 patterns!");
+ return false;
+ }
+
+ if (h.antChn == 0)
+ {
+ loaderMsgBox("Error loading XM: This file is corrupt.");
+ return false;
+ }
+
+ if (h.antInstrs > 256) // if >128 instruments, we fake-load up to 128 extra instruments and discard them
+ {
+ loaderMsgBox("Error loading XM: This file is corrupt.");
+ return false;
+ }
+
+ fseek(f, 60 + h.headerSize, SEEK_SET);
+ if (filesize != 336 && feof(f)) // 336 in length at this point = empty XM
+ {
+ loaderMsgBox("Error loading XM: The module is empty!");
+ return false;
+ }
+
+ memcpy(songTmp.name, h.name, 20);
+
+ songTmp.len = h.len;
+ songTmp.repS = h.repS;
+ songTmp.antChn = (uint8_t)h.antChn;
+ songTmp.speed = h.defSpeed;
+ songTmp.tempo = h.defTempo;
+ songTmp.ver = h.ver;
+ tmpLinearPeriodsFlag = h.flags & 1;
+
+ // non-FT2: clamp to max numbers that are okay for GUI
+ songTmp.speed = CLAMP(songTmp.speed, 1, 999);
+ songTmp.initialTempo = songTmp.tempo = CLAMP(songTmp.tempo, 1, 99);
+
+ if (songTmp.len == 0)
+ songTmp.len = 1; // songTmp.songTab is already empty
+ else
+ memcpy(songTmp.songTab, h.songTab, songTmp.len);
+
+ // some strange XMs have the order list padded with 0xFF, remove them!
+ for (int16_t j = 255; j >= 0; j--)
+ {
+ if (songTmp.songTab[j] != 0xFF)
+ break;
+
+ if (songTmp.len > j)
+ songTmp.len = j;
+ }
+
+ // even though XM supports 256 orders, FT2 supports only 255...
+ if (songTmp.len > 0xFF)
+ songTmp.len = 0xFF;
+
+ if (songTmp.ver < 0x0104)
+ {
+ // XM v1.02 and XM v1.03
+
+ for (i = 1; i <= h.antInstrs; i++)
+ {
+ if (!loadInstrHeader(f, i))
+ return false;
+ }
+
+ if (!loadPatterns(f, h.antPtn))
+ return false;
+
+ for (i = 1; i <= h.antInstrs; i++)
+ {
+ if (!loadInstrSample(f, i))
+ return false;
+ }
+ }
+ else
+ {
+ // XM v1.04 (latest version)
+
+ if (!loadPatterns(f, h.antPtn))
+ return false;
+
+ for (i = 1; i <= h.antInstrs; i++)
+ {
+ if (!loadInstrHeader(f, i))
+ return false;
+
+ if (!loadInstrSample(f, i))
+ return false;
+ }
+ }
+
+ // if we temporarily loaded more than 128 instruments, clear the extra allocated memory
+ if (h.antInstrs > MAX_INST)
+ {
+ for (i = MAX_INST+1; i <= h.antInstrs; i++)
+ {
+ if (instrTmp[i] != NULL)
+ {
+ free(instrTmp[i]);
+ instrTmp[i] = NULL;
+ }
+ }
+ }
+
+ /* We support loading XMs with up to 32 samples per instrument (ModPlug/OpenMPT),
+ ** but only the first 16 will be loaded. Now make sure we set the number of samples
+ ** back to max 16 in the headers before loading is done.
+ */
+ bool instrHasMoreThan16Samples = false;
+ for (i = 1; i <= MAX_INST; i++)
+ {
+ if (instrTmp[i] != NULL && instrTmp[i]->antSamp > MAX_SMP_PER_INST)
+ {
+ instrHasMoreThan16Samples = true;
+ instrTmp[i]->antSamp = MAX_SMP_PER_INST;
+ }
+ }
+
+ if (songTmp.antChn > MAX_VOICES)
+ {
+ songTmp.antChn = MAX_VOICES;
+ loaderMsgBox("Warning: This XM contains >32 channels. The extra channels will be discarded!");
+ }
+
+ if (h.antInstrs > MAX_INST)
+ loaderMsgBox("Warning: This XM contains >128 instruments. The extra instruments will be discarded!");
+
+ if (instrHasMoreThan16Samples)
+ loaderMsgBox("Warning: This XM contains instrument(s) with >16 samples. The extra samples will be discarded!");
+
+ return true;
+}
+
+static bool loadInstrHeader(FILE *f, uint16_t i)
+{
+ uint8_t j;
+ uint32_t readSize;
+ instrHeaderTyp ih;
+ instrTyp *ins;
+ sampleHeaderTyp *src;
+ sampleTyp *s;
+
+ memset(extraSampleLengths, 0, sizeof (extraSampleLengths));
+ memset(&ih, 0, sizeof (ih));
+ fread(&ih.instrSize, 4, 1, f);
+
+ readSize = ih.instrSize;
+
+ // yes, some XMs can have a header size of 0, and it usually means 263 bytes (INSTR_HEADER_SIZE)
+ if (readSize == 0 || readSize > INSTR_HEADER_SIZE)
+ readSize = INSTR_HEADER_SIZE;
+
+ if (readSize < 4)
+ {
+ loaderMsgBox("Error loading XM: This file is corrupt (or not supported)!");
+ return false;
+ }
+
+ // load instrument data into temp buffer
+ fread(ih.name, readSize-4, 1, f); // -4 = skip ih.instrSize
+
+ // FT2 bugfix: skip instrument header data if instrSize is above INSTR_HEADER_SIZE
+ if (ih.instrSize > INSTR_HEADER_SIZE)
+ fseek(f, ih.instrSize-INSTR_HEADER_SIZE, SEEK_CUR);
+
+ if (ih.antSamp < 0 || ih.antSamp > 32)
+ {
+ loaderMsgBox("Error loading XM: This file is corrupt (or not supported)!");
+ return false;
+ }
+
+ if (i <= MAX_INST) // copy over instrument names
+ memcpy(songTmp.instrName[i], ih.name, 22);
+
+ if (ih.antSamp > 0)
+ {
+ if (!allocateTmpInstr(i))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ // copy instrument header elements to our instrument struct
+
+ ins = instrTmp[i];
+ memcpy(ins->ta, ih.ta, 96);
+ memcpy(ins->envVP, ih.envVP, 12*2*sizeof(int16_t));
+ memcpy(ins->envPP, ih.envPP, 12*2*sizeof(int16_t));
+ ins->envVPAnt = ih.envVPAnt;
+ ins->envPPAnt = ih.envPPAnt;
+ ins->envVSust = ih.envVSust;
+ ins->envVRepS = ih.envVRepS;
+ ins->envVRepE = ih.envVRepE;
+ ins->envPSust = ih.envPSust;
+ ins->envPRepS = ih.envPRepS;
+ ins->envPRepE = ih.envPRepE;
+ ins->envVTyp = ih.envVTyp;
+ ins->envPTyp = ih.envPTyp;
+ ins->vibTyp = ih.vibTyp;
+ ins->vibSweep = ih.vibSweep;
+ ins->vibDepth = ih.vibDepth;
+ ins->vibRate = ih.vibRate;
+ ins->fadeOut = ih.fadeOut;
+ ins->midiOn = (ih.midiOn == 1) ? true : false;
+ ins->midiChannel = ih.midiChannel;
+ ins->midiProgram = ih.midiProgram;
+ ins->midiBend = ih.midiBend;
+ ins->mute = (ih.mute == 1) ? true : false; // correct logic, don't change this!
+ ins->antSamp = ih.antSamp; // used in loadInstrSample()
+
+ sanitizeInstrument(ins);
+
+ int32_t sampleHeadersToRead = ih.antSamp;
+ if (sampleHeadersToRead > MAX_SMP_PER_INST)
+ sampleHeadersToRead = MAX_SMP_PER_INST;
+
+ if (fread(ih.samp, sampleHeadersToRead * sizeof (sampleHeaderTyp), 1, f) != 1)
+ {
+ loaderMsgBox("General I/O error during loading!");
+ return false;
+ }
+
+ // if instrument contains more than 16 sample headers (unsupported), skip them
+ if (ih.antSamp > MAX_SMP_PER_INST) // can only be 0..32 at this point
+ {
+ const int32_t samplesToSkip = ih.antSamp-MAX_SMP_PER_INST;
+ for (j = 0; j < samplesToSkip; j++)
+ {
+ fread(&extraSampleLengths[j], 4, 1, f); // used for skipping data in loadInstrSample()
+ fseek(f, sizeof (sampleHeaderTyp)-4, SEEK_CUR);
+ }
+ }
+
+ for (j = 0; j < sampleHeadersToRead; j++)
+ {
+ s = &instrTmp[i]->samp[j];
+ src = &ih.samp[j];
+
+ // copy sample header elements to our sample struct
+
+ s->len = src->len;
+ s->repS = src->repS;
+ s->repL = src->repL;
+ s->vol = src->vol;
+ s->fine = src->fine;
+ s->typ = src->typ;
+ s->pan = src->pan;
+ s->relTon = src->relTon;
+ memcpy(s->name, src->name, 22);
+
+ // dst->pek is set up later
+
+ // sanitize stuff broken/unsupported samples (FT2 doesn't do this, but we do!)
+ if (s->vol > 64)
+ s->vol = 64;
+
+ s->relTon = CLAMP(s->relTon, -48, 71);
+ }
+ }
+
+ return true;
+}
+
+static bool loadInstrSample(FILE *f, uint16_t i)
+{
+ if (instrTmp[i] == NULL)
+ return true; // empty instrument, let's just pretend it got loaded successfully
+
+ uint16_t k = instrTmp[i]->antSamp;
+ if (k > MAX_SMP_PER_INST)
+ k = MAX_SMP_PER_INST;
+
+ sampleTyp *s = instrTmp[i]->samp;
+
+ if (i > MAX_INST) // insNum > 128, just skip sample data
+ {
+ for (uint16_t j = 0; j < k; j++, s++)
+ {
+ if (s->len > 0)
+ fseek(f, s->len, SEEK_CUR);
+ }
+ }
+ else
+ {
+ for (uint16_t j = 0; j < k; j++, s++)
+ {
+ // FT2: a sample with both forward loop and pingpong loop set results in pingpong
+ if ((s->typ & 3) == 3)
+ s->typ &= 0xFE; // remove forward loop flag
+
+ int32_t l = s->len;
+ if (l <= 0)
+ {
+ s->len = 0;
+ s->repL = 0;
+ s->repS = 0;
+
+ if (s->typ & 32) // remove stereo flag if present
+ s->typ &= ~32;
+ }
+ else
+ {
+ int32_t bytesToSkip = 0;
+ if (l > MAX_SAMPLE_LEN)
+ {
+ bytesToSkip = l - MAX_SAMPLE_LEN;
+ l = MAX_SAMPLE_LEN;
+ }
+
+ if (!allocateTmpSmpData(s, l))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ const int32_t bytesRead = (int32_t)fread(s->pek, 1, l, f);
+ if (bytesRead < l)
+ {
+ const int32_t bytesToClear = l - bytesRead;
+ memset(&s->pek[bytesRead], 0, bytesToClear);
+ }
+
+ if (bytesToSkip > 0)
+ fseek(f, bytesToSkip, SEEK_CUR);
+
+ delta2Samp(s->pek, l, s->typ);
+
+ if (s->typ & 32) // stereo sample - already downmixed to mono in delta2samp()
+ {
+ s->typ &= ~32; // remove stereo flag
+
+ s->len >>= 1;
+ s->repL >>= 1;
+ s->repS >>= 1;
+
+ reallocateTmpSmpData(s, s->len); // dealloc unused memory
+ }
+ }
+
+ // NON-FT2 FIX: Align to 2-byte if 16-bit sample
+ if (s->typ & 16)
+ {
+ s->repL &= 0xFFFFFFFE;
+ s->repS &= 0xFFFFFFFE;
+ s->len &= 0xFFFFFFFE;
+ }
+ }
+ }
+
+ if (instrTmp[i]->antSamp > MAX_SMP_PER_INST)
+ {
+ const int32_t samplesToSkip = instrTmp[i]->antSamp-MAX_SMP_PER_INST;
+ for (i = 0; i < samplesToSkip; i++)
+ {
+ if (extraSampleLengths[i] > 0)
+ fseek(f, extraSampleLengths[i], SEEK_CUR);
+ }
+ }
+
+ return true;
+}
+
+static bool loadPatterns(FILE *f, uint16_t antPtn)
+{
+ uint8_t tmpLen;
+ patternHeaderTyp ph;
+
+ bool pattLenWarn = false;
+ for (uint16_t i = 0; i < antPtn; i++)
+ {
+ if (fread(&ph.patternHeaderSize, 4, 1, f) != 1)
+ goto pattCorrupt;
+
+ if (fread(&ph.typ, 1, 1, f) != 1)
+ goto pattCorrupt;
+
+ ph.pattLen = 0;
+ if (songTmp.ver == 0x0102)
+ {
+ if (fread(&tmpLen, 1, 1, f) != 1)
+ goto pattCorrupt;
+
+ if (fread(&ph.dataLen, 2, 1, f) != 1)
+ goto pattCorrupt;
+
+ ph.pattLen = tmpLen + 1; // +1 in v1.02
+
+ if (ph.patternHeaderSize > 8)
+ fseek(f, ph.patternHeaderSize - 8, SEEK_CUR);
+ }
+ else
+ {
+ if (fread(&ph.pattLen, 2, 1, f) != 1)
+ goto pattCorrupt;
+
+ if (fread(&ph.dataLen, 2, 1, f) != 1)
+ goto pattCorrupt;
+
+ if (ph.patternHeaderSize > 9)
+ fseek(f, ph.patternHeaderSize - 9, SEEK_CUR);
+ }
+
+ if (feof(f))
+ goto pattCorrupt;
+
+ pattLensTmp[i] = ph.pattLen;
+ if (pattLensTmp[i] > MAX_PATT_LEN)
+ {
+ pattLensTmp[i] = MAX_PATT_LEN;
+ pattLenWarn = true;
+ }
+
+ if (ph.dataLen > 0)
+ {
+ if (!allocateTmpPatt(i, pattLensTmp[i]))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ if (fread(packedPattData, 1, ph.dataLen, f) != ph.dataLen)
+ goto pattCorrupt;
+
+ unpackPatt((uint8_t *)pattTmp[i], packedPattData, pattLensTmp[i], songTmp.antChn);
+ clearUnusedChannels(pattTmp[i], pattLensTmp[i], songTmp.antChn);
+ }
+
+ if (tmpPatternEmpty(i))
+ {
+ if (pattTmp[i] != NULL)
+ {
+ free(pattTmp[i]);
+ pattTmp[i] = NULL;
+ }
+
+ pattLensTmp[i] = 64;
+ }
+ }
+
+ if (pattLenWarn)
+ loaderMsgBox("This module contains pattern(s) with a length above 256! They will be truncated.");
+
+ return true;
+
+pattCorrupt:
+ loaderMsgBox("Error loading XM: This file is corrupt!");
+ return false;
+}
+
+static void unpackPatt(uint8_t *dst, uint8_t *src, uint16_t len, int32_t antChn)
+{
+ int32_t j;
+
+ if (dst == NULL)
+ return;
+
+ const int32_t srcEnd = len * (sizeof (tonTyp) * antChn);
+ int32_t srcIdx = 0;
+
+ int32_t numChannels = antChn;
+ if (numChannels > MAX_VOICES)
+ numChannels = MAX_VOICES;
+
+ const int32_t pitch = sizeof (tonTyp) * (MAX_VOICES - antChn);
+ for (int32_t i = 0; i < len; i++)
+ {
+ for (j = 0; j < numChannels; j++)
+ {
+ if (srcIdx >= srcEnd)
+ return; // error!
+
+ const uint8_t note = *src++;
+ if (note & 0x80)
+ {
+ *dst++ = (note & 0x01) ? *src++ : 0;
+ *dst++ = (note & 0x02) ? *src++ : 0;
+ *dst++ = (note & 0x04) ? *src++ : 0;
+ *dst++ = (note & 0x08) ? *src++ : 0;
+ *dst++ = (note & 0x10) ? *src++ : 0;
+ }
+ else
+ {
+ *dst++ = note;
+ *dst++ = *src++;
+ *dst++ = *src++;
+ *dst++ = *src++;
+ *dst++ = *src++;
+ }
+
+ // if note is overflowing (>97), remove it
+ if (*(dst-5) > 97)
+ *(dst-5) = 0;
+
+ // non-FT2 security fix: if effect is above 35 (Z), clear effect and parameter
+ if (*(dst-2) > 35)
+ {
+ *(dst-2) = 0;
+ *(dst-1) = 0;
+ }
+
+ srcIdx += sizeof (tonTyp);
+ }
+
+ // if more than 32 channels, skip rest of the channels for this row
+ for (; j < antChn; j++)
+ {
+ if (srcIdx >= srcEnd)
+ return; // error!
+
+ const uint8_t note = *src++;
+ if (note & 0x80)
+ {
+ if (note & 0x01) src++;
+ if (note & 0x02) src++;
+ if (note & 0x04) src++;
+ if (note & 0x08) src++;
+ if (note & 0x10) src++;
+ }
+ else
+ {
+ src++;
+ src++;
+ src++;
+ src++;
+ }
+
+ srcIdx += sizeof (tonTyp);
+ }
+
+ // if song has <32 channels, align pointer to next row (skip unused channels)
+ if (antChn < MAX_VOICES)
+ dst += pitch;
+ }
+}
+
+static void sanitizeInstrument(instrTyp *ins) // FT2 doesn't do this, but we do!
+{
+ ins->midiProgram = CLAMP(ins->midiProgram, 0, 127);
+ ins->midiBend = CLAMP(ins->midiBend, 0, 36);
+
+ if (ins->midiChannel > 15) ins->midiChannel = 15;
+ if (ins->vibDepth > 0x0F) ins->vibDepth = 0x0F;
+ if (ins->vibRate > 0x3F) ins->vibRate = 0x3F;
+ if (ins->vibTyp > 3) ins->vibTyp = 0;
+
+ for (int32_t i = 0; i < 96; i++)
+ {
+ if (ins->ta[i] >= MAX_SMP_PER_INST)
+ ins->ta[i] = MAX_SMP_PER_INST-1;
+ }
+
+ if (ins->envVPAnt > 12) ins->envVPAnt = 12;
+ if (ins->envVRepS > 11) ins->envVRepS = 11;
+ if (ins->envVRepE > 11) ins->envVRepE = 11;
+ if (ins->envVSust > 11) ins->envVSust = 11;
+ if (ins->envPPAnt > 12) ins->envPPAnt = 12;
+ if (ins->envPRepS > 11) ins->envPRepS = 11;
+ if (ins->envPRepE > 11) ins->envPRepE = 11;
+ if (ins->envPSust > 11) ins->envPSust = 11;
+
+ for (int32_t i= 0; i < 12; i++)
+ {
+ if ((uint16_t)ins->envVP[i][0] > 32767) ins->envVP[i][0] = 32767;
+ if ((uint16_t)ins->envPP[i][0] > 32767) ins->envPP[i][0] = 32767;
+ if ((uint16_t)ins->envVP[i][1] > 64) ins->envVP[i][1] = 64;
+ if ((uint16_t)ins->envPP[i][1] > 63) ins->envPP[i][1] = 63;
+ }
+}
--- /dev/null
+++ b/src/smploaders/ft2_load_aiff.c
@@ -1,0 +1,510 @@
+// Apple AIFF sample loader
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include "../ft2_header.h"
+#include "../ft2_audio.h"
+#include "../ft2_sample_ed.h"
+#include "../ft2_sysreqs.h"
+#include "../ft2_sample_loader.h"
+
+static int32_t getAIFFRate(uint8_t *in);
+static bool aiffIsStereo(FILE *f); // only ran on files that are confirmed to be AIFFs
+
+bool loadAIFF(FILE *f, uint32_t filesize)
+{
+ char compType[4];
+ int8_t *audioDataS8;
+ uint8_t sampleRateBytes[10], *audioDataU8;
+ int16_t *audioDataS16, *audioDataS16_2, smp16;
+ uint16_t numChannels, bitDepth;
+ int32_t smp32, *audioDataS32;
+ uint32_t i, blockName, blockSize;
+ uint32_t offset, len32;
+
+ fseek(f, 8, SEEK_SET);
+ fread(compType, 1, 4, f);
+ rewind(f);
+ if (!memcmp(compType, "AIFC", 4))
+ {
+ loaderMsgBox("Error loading sample: This AIFF type (AIFC) is not supported!");
+ return false;
+ }
+
+ if (filesize < 12)
+ {
+ loaderMsgBox("Error loading sample: The sample is not supported or is invalid!");
+ return false;
+ }
+
+ uint32_t commPtr = 0, commLen = 0;
+ uint32_t ssndPtr = 0, ssndLen = 0;
+
+ fseek(f, 12, SEEK_SET);
+ while (!feof(f) && (uint32_t)ftell(f) < filesize-12)
+ {
+ fread(&blockName, 4, 1, f); if (feof(f)) break;
+ fread(&blockSize, 4, 1, f); if (feof(f)) break;
+
+ blockName = SWAP32(blockName);
+ blockSize = SWAP32(blockSize);
+
+ switch (blockName)
+ {
+ case 0x434F4D4D: // "COMM"
+ {
+ commPtr = ftell(f);
+ commLen = blockSize;
+ }
+ break;
+
+ case 0x53534E44: // "SSND"
+ {
+ ssndPtr = ftell(f);
+ ssndLen = blockSize;
+ }
+ break;
+
+ default: break;
+ }
+
+ fseek(f, blockSize + (blockSize & 1), SEEK_CUR);
+ }
+
+ if (commPtr == 0 || commLen < 18 || ssndPtr == 0)
+ {
+ loaderMsgBox("Error loading sample: The sample is not supported or is invalid!");
+ return false;
+ }
+
+ // kludge for strange AIFFs
+ if (ssndLen == 0)
+ ssndLen = filesize - ssndPtr;
+
+ if (ssndPtr+ssndLen > (uint32_t)filesize)
+ ssndLen = filesize - ssndPtr;
+
+ fseek(f, commPtr, SEEK_SET);
+ fread(&numChannels, 2, 1, f); numChannels = SWAP16(numChannels);
+ fseek(f, 4, SEEK_CUR);
+ fread(&bitDepth, 2, 1, f); bitDepth = SWAP16(bitDepth);
+ fread(sampleRateBytes, 1, 10, f);
+
+ if (numChannels != 1 && numChannels != 2)
+ {
+ loaderMsgBox("Error loading sample: Unsupported amounts of channels!");
+ return false;
+ }
+
+ if (bitDepth != 8 && bitDepth != 16 && bitDepth != 24 && bitDepth != 32)
+ {
+ loaderMsgBox("Error loading sample: Unsupported bitdepth!");
+ return false;
+ }
+
+ // read compression type (if present)
+ if (commLen > 18)
+ {
+ fread(&compType, 1, 4, f);
+ if (memcmp(compType, "NONE", 4) != 0)
+ {
+ loaderMsgBox("Error loading sample: The sample is not supported or is invalid!");
+ return false;
+ }
+ }
+
+ uint32_t sampleRate = getAIFFRate(sampleRateBytes);
+
+ // sample data chunk
+
+ fseek(f, ssndPtr, SEEK_SET);
+
+ fread(&offset, 4, 1, f);
+ if (offset > 0)
+ {
+ loaderMsgBox("Error loading sample: The sample is not supported or is invalid!");
+ return false;
+ }
+
+ fseek(f, 4, SEEK_CUR);
+
+ ssndLen -= 8; // don't include offset and blockSize datas
+
+ uint32_t sampleLength = ssndLen;
+ if (sampleLength > MAX_SAMPLE_LEN)
+ sampleLength = MAX_SAMPLE_LEN;
+
+ int16_t stereoSampleLoadMode = -1;
+ if (aiffIsStereo(f))
+ stereoSampleLoadMode = loaderSysReq(5, "System request", "This is a stereo sample...");
+
+ // read sample data
+
+ if (bitDepth == 8)
+ {
+ // 8-BIT SIGNED PCM
+
+ if (!allocateTmpSmpData(&tmpSmp, sampleLength))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ if (fread(tmpSmp.pek, sampleLength, 1, f) != 1)
+ {
+ loaderMsgBox("General I/O error during loading! Is the file in use?");
+ return false;
+ }
+
+ audioDataS8 = (int8_t *)tmpSmp.pek;
+
+ // stereo conversion
+ if (numChannels == 2)
+ {
+ sampleLength /= 2;
+
+ switch (stereoSampleLoadMode)
+ {
+ case STEREO_SAMPLE_READ_LEFT:
+ {
+ for (i = 1; i < sampleLength; i++)
+ audioDataS8[i] = audioDataS8[(i * 2) + 0];
+ }
+ break;
+
+ case STEREO_SAMPLE_READ_RIGHT:
+ {
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ audioDataS8[i] = audioDataS8[(i * 2) + 1];
+
+ audioDataS8[i] = 0;
+ }
+ break;
+
+ default:
+ case STEREO_SAMPLE_CONVERT:
+ {
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ {
+ smp16 = (audioDataS8[(i * 2) + 0] + audioDataS8[(i * 2) + 1]) >> 1;
+ audioDataS8[i] = (int8_t)smp16;
+ }
+
+ audioDataS8[i] = 0;
+ }
+ break;
+ }
+ }
+ }
+ else if (bitDepth == 16)
+ {
+ // 16-BIT SIGNED PCM
+
+ sampleLength /= 2;
+ if (!allocateTmpSmpData(&tmpSmp, sampleLength*2))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ if (fread(tmpSmp.pek, sampleLength, 2, f) != 2)
+ {
+ loaderMsgBox("General I/O error during loading! Is the file in use?");
+ return false;
+ }
+
+ // fix endianness
+ audioDataS16 = (int16_t *)tmpSmp.pek;
+ for (i = 0; i < sampleLength; i++)
+ audioDataS16[i] = SWAP16(audioDataS16[i]);
+
+ // stereo conversion
+ if (numChannels == 2)
+ {
+ sampleLength /= 2;
+
+ switch (stereoSampleLoadMode)
+ {
+ case STEREO_SAMPLE_READ_LEFT:
+ {
+ for (i = 1; i < sampleLength; i++)
+ audioDataS16[i] = audioDataS16[(i * 2) + 0];
+ }
+ break;
+
+ case STEREO_SAMPLE_READ_RIGHT:
+ {
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ audioDataS16[i] = audioDataS16[(i * 2) + 1];
+
+ audioDataS16[i] = 0;
+ }
+ break;
+
+ default:
+ case STEREO_SAMPLE_CONVERT:
+ {
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ {
+ smp32 = (audioDataS16[(i * 2) + 0] + audioDataS16[(i * 2) + 1]) >> 1;
+ audioDataS16[i] = (int16_t)smp32;
+ }
+
+ audioDataS16[i] = 0;
+ }
+ break;
+ }
+ }
+
+ sampleLength *= 2;
+ tmpSmp.typ |= 16;
+ }
+ else if (bitDepth == 24)
+ {
+ // 24-BIT SIGNED PCM
+
+ sampleLength /= 3;
+ if (!allocateTmpSmpData(&tmpSmp, (sampleLength * 4) * 2))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ if (fread(&tmpSmp.pek[sampleLength], sampleLength, 3, f) != 3)
+ {
+ loaderMsgBox("General I/O error during loading! Is the file in use?");
+ return false;
+ }
+
+ audioDataS32 = (int32_t *)tmpSmp.pek;
+
+ // convert to 32-bit
+ audioDataU8 = (uint8_t *)tmpSmp.pek + sampleLength;
+ for (i = 0; i < sampleLength; i++)
+ {
+ audioDataS32[i] = (audioDataU8[0] << 24) | (audioDataU8[1] << 16) | (audioDataU8[2] << 8);
+ audioDataU8 += 3;
+ }
+
+ // stereo conversion
+ if (numChannels == 2)
+ {
+ sampleLength /= 2;
+
+ switch (stereoSampleLoadMode)
+ {
+ case STEREO_SAMPLE_READ_LEFT:
+ {
+ for (i = 1; i < sampleLength; i++)
+ audioDataS32[i] = audioDataS32[(i * 2) + 0];
+ }
+ break;
+
+ case STEREO_SAMPLE_READ_RIGHT:
+ {
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ audioDataS32[i] = audioDataS32[(i * 2) + 1];
+
+ audioDataS32[i] = 0;
+ }
+ break;
+
+ default:
+ case STEREO_SAMPLE_CONVERT:
+ {
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ {
+ int64_t smp64 = audioDataS32[(i * 2) + 0];
+ smp64 += audioDataS32[(i * 2) + 1];
+ smp64 >>= 1;
+
+ audioDataS32[i] = (int32_t)smp64;
+ }
+
+ audioDataS32[i] = 0;
+ }
+ break;
+ }
+ }
+
+ normalizeSigned32Bit(audioDataS32, sampleLength);
+
+ // downscale to 16-bit (ultra fast method!)
+
+ audioDataS16 = (int16_t *)tmpSmp.pek;
+ audioDataS16_2 = (int16_t *)tmpSmp.pek + 1; // yes, this is aligned to words
+
+ for (i = 0; i < sampleLength; i++, audioDataS16_2++)
+ audioDataS16[i] = audioDataS16_2[i];
+
+ sampleLength *= 2;
+ tmpSmp.typ |= 16;
+ }
+ else if (bitDepth == 32)
+ {
+ // 32-BIT SIGNED PCM
+
+ sampleLength /= 4;
+ if (!allocateTmpSmpData(&tmpSmp, sampleLength * 4))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ if (fread(tmpSmp.pek, sampleLength, 4, f) != 4)
+ {
+ loaderMsgBox("General I/O error during loading! Is the file in use?");
+ return false;
+ }
+
+ // fix endianness
+ audioDataS32 = (int32_t *)tmpSmp.pek;
+ for (i = 0; i < sampleLength; i++)
+ audioDataS32[i] = SWAP32(audioDataS32[i]);
+
+ // stereo conversion
+ if (numChannels == 2)
+ {
+ sampleLength /= 2;
+
+ switch (stereoSampleLoadMode)
+ {
+ case STEREO_SAMPLE_READ_LEFT:
+ {
+ for (i = 1; i < sampleLength; i++)
+ audioDataS32[i] = audioDataS32[(i * 2) + 0];
+ }
+ break;
+
+ case STEREO_SAMPLE_READ_RIGHT:
+ {
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ audioDataS32[i] = audioDataS32[(i * 2) + 1];
+
+ audioDataS32[i] = 0;
+ }
+ break;
+
+ default:
+ case STEREO_SAMPLE_CONVERT:
+ {
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ {
+ int64_t smp64 = audioDataS32[(i * 2) + 0];
+ smp64 += audioDataS32[(i * 2) + 1];
+ smp64 >>= 1;
+
+ audioDataS32[i] = (int32_t)smp64;
+ }
+
+ audioDataS32[i] = 0;
+ }
+ break;
+ }
+ }
+
+ normalizeSigned32Bit(audioDataS32, sampleLength);
+
+ // downscale to 16-bit (ultra fast method!)
+
+ audioDataS16 = (int16_t *)tmpSmp.pek;
+ audioDataS16_2 = (int16_t *)tmpSmp.pek + 1; // yes, this is aligned to words
+
+ for (i = 0; i < sampleLength; i++, audioDataS16_2++)
+ audioDataS16[i] = audioDataS16_2[i];
+
+ sampleLength *= 2;
+ tmpSmp.typ |= 16;
+ }
+
+ reallocateTmpSmpData(&tmpSmp, sampleLength); // readjust memory needed
+
+ tmpSmp.len = sampleLength;
+ tmpSmp.vol = 64;
+ tmpSmp.pan = 128;
+
+ tuneSample(&tmpSmp, sampleRate, audio.linearPeriodsFlag);
+
+ return true;
+}
+
+static int32_t getAIFFRate(uint8_t *in)
+{
+ int32_t exp = (int32_t)(((in[0] & 0x7F) << 8) | in[1]);
+ uint32_t lo = (in[2] << 24) | (in[3] << 16) | (in[4] << 8) | in[5];
+ uint32_t hi = (in[6] << 24) | (in[7] << 16) | (in[8] << 8) | in[9];
+
+ if (exp == 0 && lo == 0 && hi == 0)
+ return 0;
+
+ exp -= 16383;
+
+ double dOut = ldexp(lo, -31 + exp) + ldexp(hi, -63 + exp);
+ return (int32_t)(dOut + 0.5); // rounded
+}
+
+static bool aiffIsStereo(FILE *f) // only ran on files that are confirmed to be AIFFs
+{
+ uint16_t numChannels;
+ uint32_t chunkID, chunkSize;
+
+ uint32_t oldPos = ftell(f);
+
+ fseek(f, 0, SEEK_END);
+ int32_t filesize = ftell(f);
+
+ if (filesize < 12)
+ {
+ fseek(f, oldPos, SEEK_SET);
+ return false;
+ }
+
+ fseek(f, 12, SEEK_SET);
+
+ uint32_t commPtr = 0;
+ uint32_t commLen = 0;
+
+ int32_t bytesRead = 0;
+ while (!feof(f) && bytesRead < filesize-12)
+ {
+ fread(&chunkID, 4, 1, f); chunkID = SWAP32(chunkID); if (feof(f)) break;
+ fread(&chunkSize, 4, 1, f); chunkSize = SWAP32(chunkSize); if (feof(f)) break;
+
+ int32_t endOfChunk = (ftell(f) + chunkSize) + (chunkSize & 1);
+ switch (chunkID)
+ {
+ case 0x434F4D4D: // "COMM"
+ {
+ commPtr = ftell(f);
+ commLen = chunkSize;
+ }
+ break;
+
+ default: break;
+ }
+
+ bytesRead += (chunkSize + (chunkSize & 1));
+ fseek(f, endOfChunk, SEEK_SET);
+ }
+
+ if (commPtr == 0 || commLen < 2)
+ {
+ fseek(f, oldPos, SEEK_SET);
+ return false;
+ }
+
+ fseek(f, commPtr, SEEK_SET);
+ fread(&numChannels, 2, 1, f); numChannels = SWAP16(numChannels);
+ fseek(f, oldPos, SEEK_SET);
+
+ return (numChannels == 2);
+}
--- /dev/null
+++ b/src/smploaders/ft2_load_iff.c
@@ -1,0 +1,179 @@
+// IFF (Amiga/FT2) sample loader
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include "../ft2_header.h"
+#include "../ft2_audio.h"
+#include "../ft2_sample_ed.h"
+#include "../ft2_sysreqs.h"
+#include "../ft2_sample_loader.h"
+
+bool loadIFF(FILE *f, uint32_t filesize)
+{
+ char hdr[4+1];
+ uint32_t sampleLength, sampleVol, sampleLoopStart, sampleLoopLength, sampleRate;
+
+ if (filesize < 12)
+ {
+ loaderMsgBox("Error loading sample: The sample is not supported or is invalid!");
+ return false;
+ }
+
+ fseek(f, 8, SEEK_SET);
+ fread(hdr, 1, 4, f);
+ hdr[4] = '\0';
+ bool is16Bit = !strncmp(hdr, "16SV", 4);
+
+ uint32_t vhdrPtr = 0, vhdrLen = 0;
+ uint32_t bodyPtr = 0, bodyLen = 0;
+ uint32_t namePtr = 0, nameLen = 0;
+
+ fseek(f, 12, SEEK_SET);
+ while (!feof(f) && (uint32_t)ftell(f) < filesize-12)
+ {
+ uint32_t blockName, blockSize;
+ fread(&blockName, 4, 1, f); if (feof(f)) break;
+ fread(&blockSize, 4, 1, f); if (feof(f)) break;
+
+ blockName = SWAP32(blockName);
+ blockSize = SWAP32(blockSize);
+
+ switch (blockName)
+ {
+ case 0x56484452: // VHDR
+ {
+ vhdrPtr = ftell(f);
+ vhdrLen = blockSize;
+ }
+ break;
+
+ case 0x4E414D45: // NAME
+ {
+ namePtr = ftell(f);
+ nameLen = blockSize;
+ }
+ break;
+
+ case 0x424F4459: // BODY
+ {
+ bodyPtr = ftell(f);
+ bodyLen = blockSize;
+ }
+ break;
+
+ default: break;
+ }
+
+ fseek(f, blockSize + (blockSize & 1), SEEK_CUR);
+ }
+
+ if (vhdrPtr == 0 || vhdrLen < 20 || bodyPtr == 0)
+ {
+ loaderMsgBox("Error loading sample: The sample is not supported or is invalid!");
+ return false;
+ }
+
+ // kludge for some really strange IFFs
+ if (bodyLen == 0)
+ bodyLen = filesize - bodyPtr;
+
+ if (bodyPtr+bodyLen > (uint32_t)filesize)
+ bodyLen = filesize - bodyPtr;
+
+ fseek(f, vhdrPtr, SEEK_SET);
+ fread(&sampleLoopStart, 4, 1, f); sampleLoopStart = SWAP32(sampleLoopStart);
+ fread(&sampleLoopLength, 4, 1, f); sampleLoopLength = SWAP32(sampleLoopLength);
+ fseek(f, 4, SEEK_CUR);
+ fread(&sampleRate, 2, 1, f); sampleRate = SWAP16(sampleRate);
+ fseek(f, 1, SEEK_CUR);
+
+ if (fgetc(f) != 0) // sample type
+ {
+ loaderMsgBox("Error loading sample: The sample is not supported!");
+ return false;
+ }
+
+ fread(&sampleVol, 4, 1, f); sampleVol = SWAP32(sampleVol);
+ if (sampleVol > 65535)
+ sampleVol = 65535;
+
+ sampleVol = (sampleVol + 512) / 1024; // rounded
+
+ sampleLength = bodyLen;
+ if (sampleLength > MAX_SAMPLE_LEN)
+ sampleLength = MAX_SAMPLE_LEN;
+
+ if (sampleLoopStart >= MAX_SAMPLE_LEN || sampleLoopLength > MAX_SAMPLE_LEN)
+ {
+ sampleLoopStart = 0;
+ sampleLoopLength = 0;
+ }
+
+ if (sampleLoopStart+sampleLoopLength > sampleLength)
+ {
+ sampleLoopStart = 0;
+ sampleLoopLength = 0;
+ }
+
+ if (sampleLoopStart > sampleLength-2)
+ {
+ sampleLoopStart = 0;
+ sampleLoopLength = 0;
+ }
+
+ if (!allocateTmpSmpData(&tmpSmp, sampleLength))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ fseek(f, bodyPtr, SEEK_SET);
+ if (fread(tmpSmp.pek, sampleLength, 1, f) != 1)
+ {
+ loaderMsgBox("General I/O error during loading! Is the file in use?");
+ return false;
+ }
+
+ tmpSmp.len = sampleLength;
+
+ if (sampleLoopLength > 2)
+ {
+ tmpSmp.repS = sampleLoopStart;
+ tmpSmp.repL = sampleLoopLength;
+ tmpSmp.typ |= 1;
+ }
+
+ if (is16Bit)
+ {
+ tmpSmp.len &= 0xFFFFFFFE;
+ tmpSmp.repS &= 0xFFFFFFFE;
+ tmpSmp.repL &= 0xFFFFFFFE;
+ tmpSmp.typ |= 16;
+ }
+
+ tmpSmp.vol = (uint8_t)sampleVol;
+ tmpSmp.pan = 128;
+
+ tuneSample(&tmpSmp, sampleRate, audio.linearPeriodsFlag);
+
+ // set name
+ if (namePtr != 0 && nameLen > 0)
+ {
+ fseek(f, namePtr, SEEK_SET);
+ if (nameLen > 21)
+ {
+ fread(tmpSmp.name, 1, 21, f);
+ tmpSmp.name[21] = '\0';
+ }
+ else
+ {
+ memset(tmpSmp.name, 0, 22);
+ fread(tmpSmp.name, 1, nameLen, f);
+ }
+
+ smpFilenameSet = true;
+ }
+
+ return true;
+}
--- /dev/null
+++ b/src/smploaders/ft2_load_raw.c
@@ -1,0 +1,30 @@
+// RAW (header-less) sample loader
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include "../ft2_header.h"
+#include "../ft2_sample_ed.h"
+#include "../ft2_sysreqs.h"
+#include "../ft2_sample_loader.h"
+
+bool loadRAW(FILE *f, uint32_t filesize)
+{
+ if (!allocateTmpSmpData(&tmpSmp, filesize))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ if (fread(tmpSmp.pek, filesize, 1, f) != 1)
+ {
+ okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?");
+ return false;
+ }
+
+ tmpSmp.len = filesize;
+ tmpSmp.vol = 64;
+ tmpSmp.pan = 128;
+
+ return true;
+}
--- /dev/null
+++ b/src/smploaders/ft2_load_wav.c
@@ -1,0 +1,746 @@
+// WAV sample loader
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include "../ft2_header.h"
+#include "../ft2_audio.h"
+#include "../ft2_sample_ed.h"
+#include "../ft2_sysreqs.h"
+#include "../ft2_sample_loader.h"
+
+enum
+{
+ WAV_FORMAT_PCM = 1,
+ WAV_FORMAT_IEEE_FLOAT = 3
+};
+
+static bool wavIsStereo(FILE *f);
+
+bool loadWAV(FILE *f, uint32_t filesize)
+{
+ uint8_t *audioDataU8;
+ int16_t *audioDataS16, *audioDataS16_2, *ptr16;
+ uint16_t audioFormat, numChannels, bitsPerSample;
+ int32_t *audioDataS32;
+ uint32_t i, sampleRate, sampleLength;
+ uint32_t len32;
+ float *fAudioDataFloat;
+ double *dAudioDataDouble;
+
+ if (filesize < 12)
+ {
+ loaderMsgBox("Error loading sample: The sample is not supported or is invalid!");
+ return false;
+ }
+
+ uint32_t fmtPtr = 0, fmtLen = 0;
+ uint32_t dataPtr = 0, dataLen = 0;
+ uint32_t inamPtr = 0, inamLen = 0;
+ uint32_t xtraPtr = 0, xtraLen = 0;
+ uint32_t smplPtr = 0, smplLen = 0;
+
+ // look for wanted chunks and set up pointers + lengths
+ fseek(f, 12, SEEK_SET);
+
+ uint32_t bytesRead = 0;
+ while (!feof(f) && bytesRead < filesize-12)
+ {
+ uint32_t chunkID, chunkSize;
+ fread(&chunkID, 4, 1, f); if (feof(f)) break;
+ fread(&chunkSize, 4, 1, f); if (feof(f)) break;
+
+ uint32_t endOfChunk = (ftell(f) + chunkSize) + (chunkSize & 1);
+ switch (chunkID)
+ {
+ case 0x20746D66: // "fmt "
+ {
+ fmtPtr = ftell(f);
+ fmtLen = chunkSize;
+ }
+ break;
+
+ case 0x61746164: // "data"
+ {
+ dataPtr = ftell(f);
+ dataLen = chunkSize;
+ }
+ break;
+
+ case 0x5453494C: // "LIST"
+ {
+ if (chunkSize >= 4)
+ {
+ fread(&chunkID, 4, 1, f);
+ if (chunkID == 0x4F464E49) // "INFO"
+ {
+ bytesRead = 0;
+ while (!feof(f) && bytesRead < chunkSize)
+ {
+ fread(&chunkID, 4, 1, f);
+ fread(&chunkSize, 4, 1, f);
+
+ switch (chunkID)
+ {
+ case 0x4D414E49: // "INAM"
+ {
+ inamPtr = ftell(f);
+ inamLen = chunkSize;
+ }
+ break;
+
+ default: break;
+ }
+
+ bytesRead += (chunkSize + (chunkSize & 1));
+ }
+ }
+ }
+ }
+ break;
+
+ case 0x61727478: // "xtra"
+ {
+ xtraPtr = ftell(f);
+ xtraLen = chunkSize;
+ }
+ break;
+
+ case 0x6C706D73: // "smpl"
+ {
+ smplPtr = ftell(f);
+ smplLen = chunkSize;
+ }
+ break;
+
+ default: break;
+ }
+
+ bytesRead += (chunkSize + (chunkSize & 1));
+ fseek(f, endOfChunk, SEEK_SET);
+ }
+
+ // we need at least "fmt " and "data" - check if we found them sanely
+ if (fmtPtr == 0 || fmtLen < 16 || dataPtr == 0 || dataLen == 0)
+ {
+ loaderMsgBox("Error loading sample: The sample is not supported or is invalid!");
+ return false;
+ }
+
+ // ---- READ "fmt " CHUNK ----
+ fseek(f, fmtPtr, SEEK_SET);
+ fread(&audioFormat, 2, 1, f);
+ fread(&numChannels, 2, 1, f);
+ fread(&sampleRate, 4, 1, f);
+ fseek(f, 6, SEEK_CUR); // unneeded
+ fread(&bitsPerSample, 2, 1, f);
+ sampleLength = dataLen;
+ // ---------------------------
+
+ // test if the WAV is compatible with our loader
+
+ if (sampleRate == 0 || sampleLength == 0 || sampleLength >= filesize)
+ {
+ loaderMsgBox("Error loading sample: The sample is not supported or is invalid!");
+ return false;
+ }
+
+ if (audioFormat != WAV_FORMAT_PCM && audioFormat != WAV_FORMAT_IEEE_FLOAT)
+ {
+ loaderMsgBox("Error loading sample: The sample is not supported!");
+ return false;
+ }
+
+ if (numChannels == 0 || numChannels > 2)
+ {
+ loaderMsgBox("Error loading sample: Unsupported number of channels!");
+ return false;
+ }
+
+ if (audioFormat == WAV_FORMAT_IEEE_FLOAT && bitsPerSample != 32 && bitsPerSample != 64)
+ {
+ loaderMsgBox("Error loading sample: Unsupported bitdepth!");
+ return false;
+ }
+
+ if (bitsPerSample != 8 && bitsPerSample != 16 && bitsPerSample != 24 && bitsPerSample != 32 && bitsPerSample != 64)
+ {
+ loaderMsgBox("Error loading sample: Unsupported bitdepth!");
+ return false;
+ }
+
+ // ---- READ SAMPLE DATA ----
+ fseek(f, dataPtr, SEEK_SET);
+
+ if (sampleLength > MAX_SAMPLE_LEN)
+ sampleLength = MAX_SAMPLE_LEN;
+
+ int16_t stereoSampleLoadMode = -1;
+ if (wavIsStereo(f))
+ stereoSampleLoadMode = loaderSysReq(5, "System request", "This is a stereo sample...");
+
+ if (bitsPerSample == 8) // 8-BIT INTEGER SAMPLE
+ {
+ if (!allocateTmpSmpData(&tmpSmp, sampleLength))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ if (fread(tmpSmp.pek, sampleLength, 1, f) != 1)
+ {
+ loaderMsgBox("General I/O error during loading! Is the file in use?");
+ return false;
+ }
+
+ audioDataU8 = (uint8_t *)tmpSmp.pek;
+
+ // stereo conversion
+ if (numChannels == 2)
+ {
+ sampleLength /= 2;
+ switch (stereoSampleLoadMode)
+ {
+ case STEREO_SAMPLE_READ_LEFT:
+ {
+ // remove right channel data
+ for (i = 1; i < sampleLength; i++)
+ audioDataU8[i] = audioDataU8[(i * 2) + 0];
+ }
+ break;
+
+ case STEREO_SAMPLE_READ_RIGHT:
+ {
+ // remove left channel data
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ audioDataU8[i] = audioDataU8[(i * 2) + 1];
+
+ audioDataU8[i] = 128;
+ }
+ break;
+
+ default:
+ case STEREO_SAMPLE_CONVERT:
+ {
+ // mix stereo to mono
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ audioDataU8[i] = (audioDataU8[(i * 2) + 0] + audioDataU8[(i * 2) + 1]) >> 1;
+
+ audioDataU8[i] = 128;
+ }
+ break;
+ }
+ }
+
+ // convert from unsigned to signed
+ for (i = 0; i < sampleLength; i++)
+ tmpSmp.pek[i] ^= 0x80;
+ }
+ else if (bitsPerSample == 16) // 16-BIT INTEGER SAMPLE
+ {
+ sampleLength /= 2;
+ if (!allocateTmpSmpData(&tmpSmp, sampleLength*2))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ if (fread(tmpSmp.pek, sampleLength, 2, f) != 2)
+ {
+ loaderMsgBox("General I/O error during loading! Is the file in use?");
+ return false;
+ }
+
+ audioDataS16 = (int16_t *)tmpSmp.pek;
+
+ // stereo conversion
+ if (numChannels == 2)
+ {
+ sampleLength /= 2;
+
+ switch (stereoSampleLoadMode)
+ {
+ case STEREO_SAMPLE_READ_LEFT:
+ {
+ // remove right channel data
+ for (i = 1; i < sampleLength; i++)
+ audioDataS16[i] = audioDataS16[(i * 2) + 0];
+ }
+ break;
+
+ case STEREO_SAMPLE_READ_RIGHT:
+ {
+ // remove left channel data
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ audioDataS16[i] = audioDataS16[(i * 2) + 1];
+
+ audioDataS16[i] = 0;
+ }
+ break;
+
+ default:
+ case STEREO_SAMPLE_CONVERT:
+ {
+ // mix stereo to mono
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ {
+ int32_t smp32 = audioDataS16[(i * 2) + 0] + audioDataS16[(i * 2) + 1];
+ audioDataS16[i] = (int16_t)(smp32 >> 1);
+ }
+
+ audioDataS16[i] = 0;
+ }
+ break;
+ }
+ }
+
+ sampleLength *= 2;
+ tmpSmp.typ |= 16; // 16-bit
+ }
+ else if (bitsPerSample == 24) // 24-BIT INTEGER SAMPLE
+ {
+ sampleLength /= 3;
+ if (!allocateTmpSmpData(&tmpSmp, (sampleLength * 4) * 2))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ if (fread(&tmpSmp.pek[sampleLength], sampleLength, 3, f) != 3)
+ {
+ loaderMsgBox("General I/O error during loading! Is the file in use?");
+ return false;
+ }
+
+ audioDataS32 = (int32_t *)tmpSmp.pek;
+
+ // convert to 32-bit
+ audioDataU8 = (uint8_t *)tmpSmp.pek + sampleLength;
+ for (i = 0; i < sampleLength; i++)
+ {
+ audioDataS32[i] = (audioDataU8[2] << 24) | (audioDataU8[1] << 16) | (audioDataU8[0] << 8);
+ audioDataU8 += 3;
+ }
+
+ // stereo conversion
+ if (numChannels == 2)
+ {
+ sampleLength /= 2;
+ switch (stereoSampleLoadMode)
+ {
+ case STEREO_SAMPLE_READ_LEFT:
+ {
+ // remove right channel data
+ for (i = 1; i < sampleLength; i++)
+ audioDataS32[i] = audioDataS32[(i * 2) + 0];
+ }
+ break;
+
+ case STEREO_SAMPLE_READ_RIGHT:
+ {
+ // remove left channel data
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ audioDataS32[i] = audioDataS32[(i * 2) + 1];
+
+ audioDataS32[i] = 0;
+ }
+ break;
+
+ default:
+ case STEREO_SAMPLE_CONVERT:
+ {
+ // mix stereo to mono
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ {
+ int64_t smp64 = audioDataS32[(i * 2) + 0];
+ smp64 += audioDataS32[(i * 2) + 1];
+ smp64 >>= 1;
+
+ audioDataS32[i] = (int32_t)smp64;
+ }
+
+ audioDataS32[i] = 0;
+ }
+ break;
+ }
+ }
+
+ normalizeSigned32Bit(audioDataS32, sampleLength);
+
+ // downscale to 16-bit (ultra fast method!)
+
+ audioDataS16 = (int16_t *)tmpSmp.pek;
+ audioDataS16_2 = (int16_t *)tmpSmp.pek + 1; // yes, this is aligned to words
+
+ for (i = 0; i < sampleLength; i++, audioDataS16_2++)
+ audioDataS16[i] = audioDataS16_2[i];
+
+ sampleLength *= 2;
+ tmpSmp.typ |= 16; // 16-bit
+ }
+ else if (audioFormat == WAV_FORMAT_PCM && bitsPerSample == 32) // 32-BIT INTEGER SAMPLE
+ {
+ sampleLength /= 4;
+ if (!allocateTmpSmpData(&tmpSmp, sampleLength * 4))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ if (fread(tmpSmp.pek, sampleLength, 4, f) != 4)
+ {
+ loaderMsgBox("General I/O error during loading! Is the file in use?");
+ return false;
+ }
+
+ audioDataS32 = (int32_t *)tmpSmp.pek;
+
+ // stereo conversion
+ if (numChannels == 2)
+ {
+ sampleLength /= 2;
+ switch (stereoSampleLoadMode)
+ {
+ case STEREO_SAMPLE_READ_LEFT:
+ {
+ // remove right channel data
+ for (i = 1; i < sampleLength; i++)
+ audioDataS32[i] = audioDataS32[(i * 2) + 0];
+ }
+ break;
+
+ case STEREO_SAMPLE_READ_RIGHT:
+ {
+ // remove left channel data
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ audioDataS32[i] = audioDataS32[(i * 2) + 1];
+
+ audioDataS32[i] = 0;
+ }
+ break;
+
+ default:
+ case STEREO_SAMPLE_CONVERT:
+ {
+ // mix stereo to mono
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ {
+ int64_t smp64 = audioDataS32[(i * 2) + 0];
+ smp64 += audioDataS32[(i * 2) + 1];
+ smp64 >>= 1;
+
+ audioDataS32[i] = (int32_t)smp64;
+ }
+
+ audioDataS32[i] = 0;
+ }
+ break;
+ }
+ }
+
+ normalizeSigned32Bit(audioDataS32, sampleLength);
+
+ // downscale to 16-bit (ultra fast method!)
+
+ audioDataS16 = (int16_t *)tmpSmp.pek;
+ audioDataS16_2 = (int16_t *)tmpSmp.pek + 1; // yes, this is aligned to words
+
+ for (i = 0; i < sampleLength; i++, audioDataS16_2++)
+ audioDataS16[i] = audioDataS16_2[i];
+
+ sampleLength *= 2;
+ tmpSmp.typ |= 16; // 16-bit
+ }
+ else if (audioFormat == WAV_FORMAT_IEEE_FLOAT && bitsPerSample == 32) // 32-BIT FLOATING POINT SAMPLE
+ {
+ sampleLength /= 4;
+ if (!allocateTmpSmpData(&tmpSmp, sampleLength * 4))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ if (fread(tmpSmp.pek, sampleLength, 4, f) != 4)
+ {
+ loaderMsgBox("General I/O error during loading! Is the file in use?");
+ return false;
+ }
+
+ fAudioDataFloat = (float *)tmpSmp.pek;
+
+ // stereo conversion
+ if (numChannels == 2)
+ {
+ sampleLength /= 2;
+ switch (stereoSampleLoadMode)
+ {
+ case STEREO_SAMPLE_READ_LEFT:
+ {
+ // remove right channel data
+ for (i = 1; i < sampleLength; i++)
+ fAudioDataFloat[i] = fAudioDataFloat[(i * 2) + 0];
+ }
+ break;
+
+ case STEREO_SAMPLE_READ_RIGHT:
+ {
+ // remove left channel data
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ fAudioDataFloat[i] = fAudioDataFloat[(i * 2) + 1];
+
+ fAudioDataFloat[i] = 0.0f;
+ }
+ break;
+
+ default:
+ case STEREO_SAMPLE_CONVERT:
+ {
+ // mix stereo to mono
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ fAudioDataFloat[i] = (fAudioDataFloat[(i * 2) + 0] + fAudioDataFloat[(i * 2) + 1]) * 0.5f;
+
+ fAudioDataFloat[i] = 0.0f;
+ }
+ break;
+ }
+ }
+
+ normalize32BitFloatToSigned16Bit(fAudioDataFloat, sampleLength);
+
+ ptr16 = (int16_t *)tmpSmp.pek;
+ for (i = 0; i < sampleLength; i++)
+ ptr16[i] = (int16_t)fAudioDataFloat[i]; // should use SIMD if available
+
+ sampleLength *= 2;
+ tmpSmp.typ |= 16; // 16-bit
+ }
+ else if (audioFormat == WAV_FORMAT_IEEE_FLOAT && bitsPerSample == 64) // 64-BIT FLOATING POINT SAMPLE
+ {
+ sampleLength /= 8;
+ if (!allocateTmpSmpData(&tmpSmp, sampleLength * 8))
+ {
+ loaderMsgBox("Not enough memory!");
+ return false;
+ }
+
+ if (fread(tmpSmp.pek, sampleLength, 8, f) != 8)
+ {
+ loaderMsgBox("General I/O error during loading! Is the file in use?");
+ return false;
+ }
+
+ dAudioDataDouble = (double *)tmpSmp.pek;
+
+ // stereo conversion
+ if (numChannels == 2)
+ {
+ sampleLength /= 2;
+ switch (stereoSampleLoadMode)
+ {
+ case STEREO_SAMPLE_READ_LEFT:
+ {
+ // remove right channel data
+ for (i = 1; i < sampleLength; i++)
+ dAudioDataDouble[i] = dAudioDataDouble[(i * 2) + 0];
+ }
+ break;
+
+ case STEREO_SAMPLE_READ_RIGHT:
+ {
+ // remove left channel data
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ dAudioDataDouble[i] = dAudioDataDouble[(i * 2) + 1];
+
+ dAudioDataDouble[i] = 0.0;
+ }
+ break;
+
+ default:
+ case STEREO_SAMPLE_CONVERT:
+ {
+ // mix stereo to mono
+ len32 = sampleLength - 1;
+ for (i = 0; i < len32; i++)
+ dAudioDataDouble[i] = (dAudioDataDouble[(i * 2) + 0] + dAudioDataDouble[(i * 2) + 1]) * 0.5;
+
+ dAudioDataDouble[i] = 0.0;
+ }
+ break;
+ }
+ }
+
+ normalize64BitFloatToSigned16Bit(dAudioDataDouble, sampleLength);
+
+ ptr16 = (int16_t *)tmpSmp.pek;
+ for (i = 0; i < sampleLength; i++)
+ ptr16[i] = (int16_t)dAudioDataDouble[i]; // should use SIMD if available
+
+ sampleLength *= 2;
+ tmpSmp.typ |= 16; // 16-bit
+ }
+
+ reallocateTmpSmpData(&tmpSmp, sampleLength); // readjust memory needed
+
+ tuneSample(&tmpSmp, sampleRate, audio.linearPeriodsFlag);
+
+ tmpSmp.vol = 64;
+ tmpSmp.pan = 128;
+ tmpSmp.len = sampleLength;
+
+ // ---- READ "smpl" chunk ----
+ if (smplPtr != 0 && smplLen > 52)
+ {
+ uint32_t numLoops, loopType, loopStart, loopEnd;
+
+ fseek(f, smplPtr+28, SEEK_SET); // seek to first wanted byte
+
+ fread(&numLoops, 4, 1, f);
+ if (numLoops == 1)
+ {
+ fseek(f, 4+4, SEEK_CUR); // skip "samplerData" and "identifier"
+
+ fread(&loopType, 4, 1, f);
+ fread(&loopStart, 4, 1, f);
+ fread(&loopEnd, 4, 1, f); loopEnd++;
+
+ if (tmpSmp.typ & 16)
+ {
+ loopStart *= 2;
+ loopEnd *= 2;
+ }
+
+ if (loopEnd <= sampleLength)
+ {
+ tmpSmp.repS = loopStart;
+ tmpSmp.repL = loopEnd - loopStart;
+ tmpSmp.typ |= (loopType == 0) ? 1 : 2;
+ }
+ }
+ }
+ // ---------------------------
+
+ // ---- READ "xtra" chunk ----
+ if (xtraPtr != 0 && xtraLen >= 8)
+ {
+ uint16_t tmpPan, tmpVol;
+ uint32_t xtraFlags;
+
+ fseek(f, xtraPtr, SEEK_SET);
+ fread(&xtraFlags, 4, 1, f); // flags
+
+ // panning (0..256)
+ if (xtraFlags & 0x20) // set panning flag
+ {
+ fread(&tmpPan, 2, 1, f);
+ if (tmpPan > 255)
+ tmpPan = 255;
+
+ tmpSmp.pan = (uint8_t)tmpPan;
+ }
+ else
+ {
+ // don't read panning, skip it
+ fseek(f, 2, SEEK_CUR);
+ }
+
+ // volume (0..256)
+ fread(&tmpVol, 2, 1, f);
+ if (tmpVol > 256)
+ tmpVol = 256;
+
+ tmpSmp.vol = (uint8_t)((tmpVol + 2) / 4); // 0..256 -> 0..64 (rounded)
+ }
+ // ---------------------------
+
+ // ---- READ "INAM" chunk ----
+ if (inamPtr != 0 && inamLen > 0)
+ {
+ fseek(f, inamPtr, SEEK_SET);
+
+ uint32_t len = 22;
+ if (len > inamLen)
+ len = inamLen;
+
+ memset(tmpSmp.name, 0, sizeof (tmpSmp.name));
+ for (i = 0; i < len; i++)
+ {
+ char chr = (char)fgetc(f);
+ if (chr == '\0')
+ break;
+
+ tmpSmp.name[i] = chr;
+ }
+
+ smpFilenameSet = true;
+ }
+
+ return true;
+}
+
+static bool wavIsStereo(FILE *f)
+{
+ uint16_t numChannels;
+ uint32_t chunkID, chunkSize;
+
+ uint32_t oldPos = ftell(f);
+
+ fseek(f, 0, SEEK_END);
+ int32_t filesize = ftell(f);
+
+ if (filesize < 12)
+ {
+ fseek(f, oldPos, SEEK_SET);
+ return false;
+ }
+
+ fseek(f, 12, SEEK_SET);
+
+ uint32_t fmtPtr = 0;
+ uint32_t fmtLen = 0;
+
+ int32_t bytesRead = 0;
+ while (!feof(f) && bytesRead < filesize-12)
+ {
+ fread(&chunkID, 4, 1, f); if (feof(f)) break;
+ fread(&chunkSize, 4, 1, f); if (feof(f)) break;
+
+ int32_t endOfChunk = (ftell(f) + chunkSize) + (chunkSize & 1);
+ switch (chunkID)
+ {
+ case 0x20746D66: // "fmt "
+ {
+ fmtPtr = ftell(f);
+ fmtLen = chunkSize;
+ }
+ break;
+
+ default: break;
+ }
+
+ bytesRead += (chunkSize + (chunkSize & 1));
+ fseek(f, endOfChunk, SEEK_SET);
+ }
+
+ if (fmtPtr == 0 || fmtLen < 4)
+ {
+ fseek(f, oldPos, SEEK_SET);
+ return false;
+ }
+
+ fseek(f, fmtPtr + 2, SEEK_SET);
+ fread(&numChannels, 2, 1, f);
+
+ fseek(f, oldPos, SEEK_SET);
+ return (numChannels == 2);
+}
--- a/vs2019_project/ft2-clone/ft2-clone.vcxproj
+++ b/vs2019_project/ft2-clone/ft2-clone.vcxproj
@@ -342,6 +342,12 @@
<ClCompile Include="..\..\src\mixer\ft2_mix.c" />
<ClCompile Include="..\..\src\mixer\ft2_center_mix.c" />
<ClCompile Include="..\..\src\mixer\ft2_silence_mix.c" />
+ <ClCompile Include="..\..\src\modloaders\ft2_load_digi.c" />
+ <ClCompile Include="..\..\src\modloaders\ft2_load_mod.c" />
+ <ClCompile Include="..\..\src\modloaders\ft2_load_s3m.c" />
+ <ClCompile Include="..\..\src\modloaders\ft2_load_stk.c" />
+ <ClCompile Include="..\..\src\modloaders\ft2_load_stm.c" />
+ <ClCompile Include="..\..\src\modloaders\ft2_load_xm.c" />
<ClCompile Include="..\..\src\rtmidi\RtMidi.cpp">
<ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Sync</ExceptionHandling>
<ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Sync</ExceptionHandling>
@@ -358,6 +364,10 @@
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4245;4996;4267</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4245;4996;4267</DisableSpecificWarnings>
</ClCompile>
+ <ClCompile Include="..\..\src\smploaders\ft2_load_aiff.c" />
+ <ClCompile Include="..\..\src\smploaders\ft2_load_iff.c" />
+ <ClCompile Include="..\..\src\smploaders\ft2_load_raw.c" />
+ <ClCompile Include="..\..\src\smploaders\ft2_load_wav.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\ft2_about.h" />
@@ -412,6 +422,9 @@
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\src\ft2-clone.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="D:\dos\unreal ][.s3m" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
--- a/vs2019_project/ft2-clone/ft2-clone.vcxproj.filters
+++ b/vs2019_project/ft2-clone/ft2-clone.vcxproj.filters
@@ -87,6 +87,36 @@
<ClCompile Include="..\..\src\mixer\ft2_windowed_sinc.c">
<Filter>mixer</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\modloaders\ft2_load_mod.c">
+ <Filter>modloaders</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\modloaders\ft2_load_s3m.c">
+ <Filter>modloaders</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\modloaders\ft2_load_stm.c">
+ <Filter>modloaders</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\modloaders\ft2_load_xm.c">
+ <Filter>modloaders</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\modloaders\ft2_load_stk.c">
+ <Filter>modloaders</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\modloaders\ft2_load_digi.c">
+ <Filter>modloaders</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\smploaders\ft2_load_raw.c">
+ <Filter>smploaders</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\smploaders\ft2_load_iff.c">
+ <Filter>smploaders</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\smploaders\ft2_load_aiff.c">
+ <Filter>smploaders</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\smploaders\ft2_load_wav.c">
+ <Filter>smploaders</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\rtmidi\RtMidi.h">
@@ -250,8 +280,17 @@
<Filter Include="mixer">
<UniqueIdentifier>{5c40c417-c4bb-4cf2-b71b-c557bf0a86cd}</UniqueIdentifier>
</Filter>
+ <Filter Include="modloaders">
+ <UniqueIdentifier>{9948839a-30e1-4ef0-a25a-e88002c0ace3}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="smploaders">
+ <UniqueIdentifier>{62e7f7c0-f7ae-4b85-bd62-2c83f74e3953}</UniqueIdentifier>
+ </Filter>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\src\ft2-clone.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="D:\dos\unreal ][.s3m" />
</ItemGroup>
</Project>
\ No newline at end of file