<> <> <> <> DIRECTORY IO, IOUtils, SafeStorage, TapeStreams, Translate; TranslateImpl: CEDAR PROGRAM IMPORTS IO, IOUtils, SafeStorage EXPORTS Translate SHARES TapeStreams = BEGIN OPEN TapeStreams; STREAM: TYPE = IO.STREAM; AsciiToEbcdicData: TYPE ~ RECORD [fo: TapeStreams.FillBlockOptions, lrecl: CARDINAL _ 0, count: CARDINAL _ 0]; AsciiToEbcdicProc: TapeStreams.Conversion = BEGIN <> p: REF IO.StreamProcs = IO.CreateStreamProcs[ variety: output, class: $Translation, putChar: PutCharAsciiToEbcdic, putBlock: NIL, flush: FlushEbcdic]; padding: TapeStreams.FillBlockOptions _ blanks; lrecl: CARDINAL _ 0; FOR prev: IO.STREAM _ base, prev.backingStream WHILE prev # NIL DO WITH prev.streamData SELECT FROM t: TapeStreams.TapeStreamState => {padding _ t.padding; EXIT}; ENDCASE => NULL; ENDLOOP; lrecl _ IF clientData = NIL THEN 0 ELSE NARROW [clientData, REF CARDINAL ! SafeStorage.NarrowFault, SafeStorage.NarrowRefFault => CONTINUE]^; IOUtils.StoreProc[p, $FlushBlock, NEW[FlushBlockProc _ FlushEbcdicBlock]]; s _ IO.CreateStream[ streamProcs: p, streamData: NEW[AsciiToEbcdicData _ [padding, lrecl, 0]], backingStream: base]; END; PutCharAsciiToEbcdic: PROC [ self: IO.STREAM, char: CHAR ] = BEGIN data: REF AsciiToEbcdicData _ NARROW [self.streamData]; IF data.lrecl # 0 THEN BEGIN IF char = IO.CR THEN BEGIN FOR i: CARDINAL IN [data.count .. data.lrecl) DO self.backingStream.PutChar[AsciiToEbcdicTable[IO.SP]]; ENDLOOP; data.count _ 0; END ELSE BEGIN self.backingStream.PutChar[AsciiToEbcdicTable[char]]; data.count _ data.count + 1; IF data.count = data.lrecl THEN data.count _ 0; END; END ELSE self.backingStream.PutChar[AsciiToEbcdicTable[char]]; END; FlushEbcdic: PROC [ self: IO.STREAM ] = BEGIN fbo: TapeStreams.FillBlockOptions = NARROW [self.streamData, REF AsciiToEbcdicData]^.fo; fb: FlushBlockProc = NARROW[IOUtils.LookupProc[self, $FlushBlock], REF FlushBlockProc]^; fb[self: self, padChar: (IF fbo = blanks THEN ' ELSE '\000), truncate: fbo = truncate]; END; FlushEbcdicBlock: PROC [ self: IO.STREAM, padChar: CHAR _ '\000, bytesRequired: INT _ LAST[INT], truncate: BOOL _ FALSE ] -- TapeStreams.FlushBlockProc -- = BEGIN fb: FlushBlockProc = NARROW[IOUtils.LookupProc[self.backingStream, $FlushBlock], REF FlushBlockProc]^; fb[self: self.backingStream, padChar: AsciiToEbcdicTable[padChar], bytesRequired: bytesRequired, truncate: truncate]; END; AsciiToEbcdic: PUBLIC PROC [lrecl: CARDINAL _ 0] RETURNS [t: TapeStreams.ConversionList] = { rc: REF CARDINAL _ NEW [CARDINAL]; rc^ _ lrecl; RETURN [CONS[NEW[ TapeStreams.ConversionRecord _ [$ToEbcdic, AsciiToEbcdicProc, rc]], NIL]]}; EbcdicToAsciiProc: TapeStreams.Conversion = BEGIN <> s _ IO.CreateStream[ streamProcs: IO.CreateStreamProcs[ variety: input, class: $Translation, getChar: GetCharEbcdicToAscii, getBlock: NIL], streamData: NIL, backingStream: base]; END; GetCharEbcdicToAscii: PROC [ self: IO.STREAM ] RETURNS [ CHAR ] = {RETURN[EbcdicToAsciiTable[self.backingStream.GetChar[]]]}; EbcdicToAscii: PUBLIC PROC [] RETURNS [TapeStreams.ConversionList] = {RETURN[CONS[NEW[TapeStreams.ConversionRecord _ [$FromEbcdic, EbcdicToAsciiProc, NIL]], NIL]]}; EbcdicToAsciiTable: PUBLIC Translate.TranslationTable _ NEW[PACKED ARRAY CHAR OF CHAR _ [ LOOPHOLE[000, CHAR], -- nul LOOPHOLE[001, CHAR], -- soh LOOPHOLE[002, CHAR], -- stx LOOPHOLE[003, CHAR], -- etx LOOPHOLE[004, CHAR], -- eot LOOPHOLE[009, CHAR], -- ht LOOPHOLE[006, CHAR], -- ack LOOPHOLE[007, CHAR], -- bel LOOPHOLE[008, CHAR], -- bs LOOPHOLE[005, CHAR], -- enq LOOPHOLE[021, CHAR], -- nak LOOPHOLE[011, CHAR], -- vt LOOPHOLE[012, CHAR], -- ff LOOPHOLE[013, CHAR], -- cr LOOPHOLE[014, CHAR], -- so LOOPHOLE[015, CHAR], -- si <<>> LOOPHOLE[016, CHAR], -- dle LOOPHOLE[017, CHAR], -- dc one LOOPHOLE[018, CHAR], -- dc two LOOPHOLE[019, CHAR], -- dc three LOOPHOLE[020, CHAR], -- dc four LOOPHOLE[010, CHAR], -- lf LOOPHOLE[022, CHAR], -- syn LOOPHOLE[023, CHAR], -- etb LOOPHOLE[024, CHAR], -- can LOOPHOLE[025, CHAR], -- em LOOPHOLE[026, CHAR], -- sub LOOPHOLE[027, CHAR], -- esc LOOPHOLE[028, CHAR], -- fs LOOPHOLE[029, CHAR], -- gs LOOPHOLE[030, CHAR], -- rs LOOPHOLE[031, CHAR], -- us <<>> LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null <<>> LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null <<>> LOOPHOLE[032, CHAR], -- sp LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[096, CHAR], -- cent sign // becomes an accent grave LOOPHOLE[046, CHAR], -- period LOOPHOLE[060, CHAR], -- < LOOPHOLE[040, CHAR], -- ( LOOPHOLE[043, CHAR], -- + LOOPHOLE[124, CHAR], -- | <<>> LOOPHOLE[038, CHAR], -- & LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[033, CHAR], -- ! LOOPHOLE[036, CHAR], -- $ LOOPHOLE[042, CHAR], -- * LOOPHOLE[041, CHAR], -- ) LOOPHOLE[059, CHAR], -- -- LOOPHOLE[126, CHAR], -- not sign // becomes a ~ (tilde) <<>> LOOPHOLE[045, CHAR], -- - LOOPHOLE[047, CHAR], -- slash LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[094, CHAR], -- circumflex ^ LOOPHOLE[044, CHAR], -- , LOOPHOLE[037, CHAR], -- % LOOPHOLE[095, CHAR], -- underscore LOOPHOLE[062, CHAR], -- > LOOPHOLE[063, CHAR], -- ? <<>> LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[058, CHAR], -- : LOOPHOLE[035, CHAR], -- # LOOPHOLE[064, CHAR], -- @ LOOPHOLE[039, CHAR], -- ' LOOPHOLE[061, CHAR], -- = LOOPHOLE[034, CHAR], -- " <<>> LOOPHOLE[000, CHAR], --null LOOPHOLE[097, CHAR], -- a LOOPHOLE[098, CHAR], -- b LOOPHOLE[099, CHAR], -- c LOOPHOLE[100, CHAR], -- d LOOPHOLE[101, CHAR], -- e LOOPHOLE[102, CHAR], -- f LOOPHOLE[103, CHAR], -- g LOOPHOLE[104, CHAR], -- h LOOPHOLE[105, CHAR], -- i LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null <<>> LOOPHOLE[000, CHAR], --null LOOPHOLE[106, CHAR], -- j LOOPHOLE[107, CHAR], -- k LOOPHOLE[108, CHAR], -- l LOOPHOLE[109, CHAR], -- m LOOPHOLE[110, CHAR], -- n LOOPHOLE[111, CHAR], -- o LOOPHOLE[112, CHAR], -- p LOOPHOLE[113, CHAR], -- q LOOPHOLE[114, CHAR], -- r LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null <<>> LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[115, CHAR], -- s LOOPHOLE[116, CHAR], -- t LOOPHOLE[117, CHAR], -- u LOOPHOLE[118, CHAR], -- v LOOPHOLE[119, CHAR], -- w LOOPHOLE[120, CHAR], -- x LOOPHOLE[121, CHAR], -- y LOOPHOLE[122, CHAR], -- z LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null <<>> LOOPHOLE[000, CHAR], --null LOOPHOLE[092, CHAR], -- back slash \ LOOPHOLE[123, CHAR], -- left curly bracket { LOOPHOLE[125, CHAR], -- right curly bracket } LOOPHOLE[091, CHAR], -- left square bracket [ LOOPHOLE[093, CHAR], -- right square bracket ] LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null <<>> LOOPHOLE[000, CHAR], --null LOOPHOLE[065, CHAR], -- A LOOPHOLE[066, CHAR], -- B LOOPHOLE[067, CHAR], -- C LOOPHOLE[068, CHAR], -- D LOOPHOLE[069, CHAR], -- E LOOPHOLE[070, CHAR], -- F LOOPHOLE[071, CHAR], -- G LOOPHOLE[072, CHAR], -- H LOOPHOLE[073, CHAR], -- I LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null <<>> LOOPHOLE[000, CHAR], --null LOOPHOLE[074, CHAR], -- J LOOPHOLE[075, CHAR], -- K LOOPHOLE[076, CHAR], -- L LOOPHOLE[077, CHAR], -- M LOOPHOLE[078, CHAR], -- N LOOPHOLE[079, CHAR], -- O LOOPHOLE[080, CHAR], -- P LOOPHOLE[081, CHAR], -- Q LOOPHOLE[082, CHAR], -- R LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null <<>> LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[083, CHAR], -- S LOOPHOLE[084, CHAR], -- T LOOPHOLE[085, CHAR], -- U LOOPHOLE[086, CHAR], -- V LOOPHOLE[087, CHAR], -- W LOOPHOLE[088, CHAR], -- X LOOPHOLE[089, CHAR], -- Y LOOPHOLE[090, CHAR], -- Z LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null <<>> LOOPHOLE[048, CHAR], -- zero LOOPHOLE[049, CHAR], -- one LOOPHOLE[050, CHAR], -- two LOOPHOLE[051, CHAR], -- three LOOPHOLE[052, CHAR], -- four LOOPHOLE[053, CHAR], -- five LOOPHOLE[054, CHAR], -- six LOOPHOLE[055, CHAR], -- seven LOOPHOLE[056, CHAR], -- eight LOOPHOLE[057, CHAR], -- nine LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[000, CHAR], --null LOOPHOLE[127, CHAR] -- del ]]; AsciiToEbcdicTable: PUBLIC Translate.TranslationTable _ NEW[PACKED ARRAY CHAR OF CHAR _ [ LOOPHOLE[0, CHAR], -- high-order bit 0 LOOPHOLE[1, CHAR], LOOPHOLE[2, CHAR], LOOPHOLE[3, CHAR], LOOPHOLE[4, CHAR], LOOPHOLE[9, CHAR], LOOPHOLE[6, CHAR], LOOPHOLE[7, CHAR], LOOPHOLE[8, CHAR], LOOPHOLE[5, CHAR], LOOPHOLE[21, CHAR], LOOPHOLE[11, CHAR], LOOPHOLE[12, CHAR], LOOPHOLE[13, CHAR], LOOPHOLE[14, CHAR], LOOPHOLE[15, CHAR], <<>> LOOPHOLE[16, CHAR], LOOPHOLE[17, CHAR], LOOPHOLE[18, CHAR], LOOPHOLE[19, CHAR], LOOPHOLE[20, CHAR], LOOPHOLE[10, CHAR], LOOPHOLE[22, CHAR], LOOPHOLE[23, CHAR], LOOPHOLE[24, CHAR], LOOPHOLE[25, CHAR], LOOPHOLE[26, CHAR], LOOPHOLE[27, CHAR], LOOPHOLE[28, CHAR], LOOPHOLE[29, CHAR], LOOPHOLE[30, CHAR], LOOPHOLE[31, CHAR], <<>> LOOPHOLE[64, CHAR], LOOPHOLE[90, CHAR], LOOPHOLE[127, CHAR], LOOPHOLE[123, CHAR], LOOPHOLE[91, CHAR], LOOPHOLE[108, CHAR], LOOPHOLE[80, CHAR], LOOPHOLE[125, CHAR], LOOPHOLE[77, CHAR], LOOPHOLE[93, CHAR], LOOPHOLE[92, CHAR], LOOPHOLE[78, CHAR], LOOPHOLE[107, CHAR], LOOPHOLE[96, CHAR], LOOPHOLE[75, CHAR], LOOPHOLE[97, CHAR], <<>> LOOPHOLE[240, CHAR], LOOPHOLE[241, CHAR], LOOPHOLE[242, CHAR], LOOPHOLE[243, CHAR], LOOPHOLE[244, CHAR], LOOPHOLE[245, CHAR], LOOPHOLE[246, CHAR], LOOPHOLE[247, CHAR], LOOPHOLE[248, CHAR], LOOPHOLE[249, CHAR], LOOPHOLE[122, CHAR], LOOPHOLE[94, CHAR], LOOPHOLE[76, CHAR], LOOPHOLE[126, CHAR], LOOPHOLE[110, CHAR], LOOPHOLE[111, CHAR], <<>> LOOPHOLE[124, CHAR], LOOPHOLE[193, CHAR], LOOPHOLE[194, CHAR], LOOPHOLE[195, CHAR], LOOPHOLE[196, CHAR], LOOPHOLE[197, CHAR], LOOPHOLE[198, CHAR], LOOPHOLE[199, CHAR], LOOPHOLE[200, CHAR], LOOPHOLE[201, CHAR], LOOPHOLE[209, CHAR], LOOPHOLE[210, CHAR], LOOPHOLE[211, CHAR], LOOPHOLE[212, CHAR], LOOPHOLE[213, CHAR], LOOPHOLE[214, CHAR], <<>> LOOPHOLE[215, CHAR], LOOPHOLE[216, CHAR], LOOPHOLE[217, CHAR], LOOPHOLE[226, CHAR], LOOPHOLE[227, CHAR], LOOPHOLE[228, CHAR], LOOPHOLE[229, CHAR], LOOPHOLE[230, CHAR], LOOPHOLE[231, CHAR], LOOPHOLE[232, CHAR], LOOPHOLE[233, CHAR], LOOPHOLE[180, CHAR], LOOPHOLE[177, CHAR], LOOPHOLE[181, CHAR], LOOPHOLE[106, CHAR], LOOPHOLE[109, CHAR], <<>> LOOPHOLE[74, CHAR], LOOPHOLE[129, CHAR], LOOPHOLE[130, CHAR], LOOPHOLE[131, CHAR], LOOPHOLE[132, CHAR], LOOPHOLE[133, CHAR], LOOPHOLE[134, CHAR], LOOPHOLE[135, CHAR], LOOPHOLE[136, CHAR], LOOPHOLE[137, CHAR], LOOPHOLE[145, CHAR], LOOPHOLE[146, CHAR], LOOPHOLE[147, CHAR], LOOPHOLE[148, CHAR], LOOPHOLE[149, CHAR], LOOPHOLE[150, CHAR], <<>> LOOPHOLE[151, CHAR], LOOPHOLE[152, CHAR], LOOPHOLE[153, CHAR], LOOPHOLE[162, CHAR], LOOPHOLE[163, CHAR], LOOPHOLE[164, CHAR], LOOPHOLE[165, CHAR], LOOPHOLE[166, CHAR], LOOPHOLE[167, CHAR], LOOPHOLE[168, CHAR], LOOPHOLE[169, CHAR], LOOPHOLE[178, CHAR], LOOPHOLE[79, CHAR], LOOPHOLE[179, CHAR], LOOPHOLE[95, CHAR], LOOPHOLE[255, CHAR], LOOPHOLE[0, CHAR], -- high-order bit 1 LOOPHOLE[1, CHAR], LOOPHOLE[2, CHAR], LOOPHOLE[3, CHAR], LOOPHOLE[4, CHAR], LOOPHOLE[9, CHAR], LOOPHOLE[6, CHAR], LOOPHOLE[7, CHAR], LOOPHOLE[8, CHAR], LOOPHOLE[5, CHAR], LOOPHOLE[21, CHAR], LOOPHOLE[11, CHAR], LOOPHOLE[12, CHAR], LOOPHOLE[13, CHAR], LOOPHOLE[14, CHAR], LOOPHOLE[15, CHAR], <<>> LOOPHOLE[16, CHAR], LOOPHOLE[17, CHAR], LOOPHOLE[18, CHAR], LOOPHOLE[19, CHAR], LOOPHOLE[20, CHAR], LOOPHOLE[10, CHAR], LOOPHOLE[22, CHAR], LOOPHOLE[23, CHAR], LOOPHOLE[24, CHAR], LOOPHOLE[25, CHAR], LOOPHOLE[26, CHAR], LOOPHOLE[27, CHAR], LOOPHOLE[28, CHAR], LOOPHOLE[29, CHAR], LOOPHOLE[30, CHAR], LOOPHOLE[31, CHAR], <<>> LOOPHOLE[64, CHAR], LOOPHOLE[90, CHAR], LOOPHOLE[127, CHAR], LOOPHOLE[123, CHAR], LOOPHOLE[91, CHAR], LOOPHOLE[108, CHAR], LOOPHOLE[80, CHAR], LOOPHOLE[125, CHAR], LOOPHOLE[77, CHAR], LOOPHOLE[93, CHAR], LOOPHOLE[92, CHAR], LOOPHOLE[78, CHAR], LOOPHOLE[107, CHAR], LOOPHOLE[96, CHAR], LOOPHOLE[75, CHAR], LOOPHOLE[97, CHAR], <<>> LOOPHOLE[240, CHAR], LOOPHOLE[241, CHAR], LOOPHOLE[242, CHAR], LOOPHOLE[243, CHAR], LOOPHOLE[244, CHAR], LOOPHOLE[245, CHAR], LOOPHOLE[246, CHAR], LOOPHOLE[247, CHAR], LOOPHOLE[248, CHAR], LOOPHOLE[249, CHAR], LOOPHOLE[122, CHAR], LOOPHOLE[94, CHAR], LOOPHOLE[76, CHAR], LOOPHOLE[126, CHAR], LOOPHOLE[110, CHAR], LOOPHOLE[111, CHAR], <<>> LOOPHOLE[124, CHAR], LOOPHOLE[193, CHAR], LOOPHOLE[194, CHAR], LOOPHOLE[195, CHAR], LOOPHOLE[196, CHAR], LOOPHOLE[197, CHAR], LOOPHOLE[198, CHAR], LOOPHOLE[199, CHAR], LOOPHOLE[200, CHAR], LOOPHOLE[201, CHAR], LOOPHOLE[209, CHAR], LOOPHOLE[210, CHAR], LOOPHOLE[211, CHAR], LOOPHOLE[212, CHAR], LOOPHOLE[213, CHAR], LOOPHOLE[214, CHAR], <<>> LOOPHOLE[215, CHAR], LOOPHOLE[216, CHAR], LOOPHOLE[217, CHAR], LOOPHOLE[226, CHAR], LOOPHOLE[227, CHAR], LOOPHOLE[228, CHAR], LOOPHOLE[229, CHAR], LOOPHOLE[230, CHAR], LOOPHOLE[231, CHAR], LOOPHOLE[232, CHAR], LOOPHOLE[233, CHAR], LOOPHOLE[180, CHAR], LOOPHOLE[177, CHAR], LOOPHOLE[181, CHAR], LOOPHOLE[106, CHAR], LOOPHOLE[109, CHAR], <<>> LOOPHOLE[74, CHAR], LOOPHOLE[129, CHAR], LOOPHOLE[130, CHAR], LOOPHOLE[131, CHAR], LOOPHOLE[132, CHAR], LOOPHOLE[133, CHAR], LOOPHOLE[134, CHAR], LOOPHOLE[135, CHAR], LOOPHOLE[136, CHAR], LOOPHOLE[137, CHAR], LOOPHOLE[145, CHAR], LOOPHOLE[146, CHAR], LOOPHOLE[147, CHAR], LOOPHOLE[148, CHAR], LOOPHOLE[149, CHAR], LOOPHOLE[150, CHAR], <<>> LOOPHOLE[151, CHAR], LOOPHOLE[152, CHAR], LOOPHOLE[153, CHAR], LOOPHOLE[162, CHAR], LOOPHOLE[163, CHAR], LOOPHOLE[164, CHAR], LOOPHOLE[165, CHAR], LOOPHOLE[166, CHAR], LOOPHOLE[167, CHAR], LOOPHOLE[168, CHAR], LOOPHOLE[169, CHAR], LOOPHOLE[178, CHAR], LOOPHOLE[79, CHAR], LOOPHOLE[179, CHAR], LOOPHOLE[95, CHAR], LOOPHOLE[255, CHAR] ]]; END.