- testing for NaNs

From: Campbell, Robert D \(SELEX\) \(UK Edinburgh\) <"Campbell,>
Date: Mon, 13 Aug 2007 11:03:30 +0100

----boundary-LibPST-iamunique-575623212_-_-
Content-type: text/plain


Andrew

There is also suitable, but very different, code in
Strings.RealToStringForm.
This uses Math.Mantissa & Math.Exponent (which ARE exported!). I have
platform independent (ie Gardens Point friendly) versions of these - see
below:

This is much tested, but NOT guaranteed!

Cheers

Robert.



MODULE LibStrings; (* Date : 5 June 2006 *)
                        (* Author : Robert D Campbell *)
                        (* Version : Gardens Point *)


IMPORT Sys := mscorlib_System;

TYPE
  M = Sys.Math;


CONST
  digitspace = 08FX;
  maxExp = 309; (* SHORT (ENTIER ( Math.Log (MAX (REAL)))) + 1
*)
  maxDig = 15; (* SHORT (ENTIER (-Math.Log (Math.Eps ())))
*)
  fact2 = 1.E30; (* 10 ^ (2 * maxDig)
*)


PROCEDURE SplitReal* (x : REAL; OUT mant : REAL; OUT exp : INTEGER);
  CONST
    ln2 = 0.6931471805599453094172321;
    big = 1073741824.; (* 2^ 30 *)
    tiny = 1. / big;
  VAR
    ex : INTEGER;
  BEGIN
    IF x = 0. THEN mant := 0.; exp := 0; RETURN END;
    IF x = INF THEN mant := 1.; exp := MAX (INTEGER); RETURN
END;
    IF x = -INF THEN mant := -1.; exp := MAX (INTEGER); RETURN
END;

    exp := SHORT (ENTIER ((M.Log (ABS (x))) / ln2)); ex := ABS
(exp);
    IF exp = 0 THEN
      mant := x
    ELSIF exp > 0 THEN
      WHILE ex > 30 DO x := x * tiny; DEC (ex, 30) END;
      mant := x / ASH (1, ex)
    ELSE
      WHILE ex > 30 DO x := x * big; DEC (ex, 30) END;
      mant := x * ASH (1, ex)
    END;

    IF ABS (mant) >= 2. THEN mant := mant * 0.5; INC (exp) END;

    ASSERT (ABS (mant) < 2., 61);
    ASSERT (ABS (mant) >= 1., 62)
  END SplitReal;


PROCEDURE IntPower* (x : REAL; pwr : INTEGER) : REAL;
  VAR
    res : REAL;
  BEGIN
    IF pwr = 0 THEN RETURN 1. END;
    IF pwr = 1 THEN RETURN x END;
    IF x = 0. THEN ASSERT (pwr > 0, 20); RETURN 0. END;

    IF pwr < 0 THEN pwr := -pwr; x := 1. / x END;
    res := 1;
    LOOP
      IF ODD (pwr) THEN res := res * x END;
      IF pwr = 1 THEN RETURN res END;
      x := x * x; pwr := ASH (pwr, -1)
    END
  END IntPower;


PROCEDURE RealToStringForm* (x : REAL; precision, minW, expW : INTEGER;
                              fillCh : CHAR; OUT s : ARRAY OF CHAR);

  VAR
    exp, len, i, j, n, k, p : INTEGER;
    mant : REAL;
    m : ARRAY 80 OF CHAR;
    neg : BOOLEAN;
  BEGIN
    ASSERT ((precision > 0) (*& (precision <= 18)*), 20);
    ASSERT ((minW >= 0) & (minW < LEN (s)), 21);
    ASSERT ((expW > -LEN (s)) & (expW <= 3), 22);
    SplitReal (x, mant, exp);
    IF exp = MAX (INTEGER) THEN
      IF fillCh = '0' THEN fillCh := digitspace END;
      x := mant;
      IF x = -1 THEN m := '-inf'; n := 4
      ELSIF x = 1 THEN m := 'inf'; n := 3
        ELSE m := 'nan'; n := 3
      END;
      i := 0; j := 0;
      WHILE minW > n DO s[i] := fillCh; INC (i); DEC (minW) END;
      WHILE (j <= n) & (i < LEN(s)) DO s [i] := m [j]; INC (i); INC
(j) END
    ELSE
      neg := FALSE; len := 1; m := '00';
      IF x < 0. THEN x := -x; neg := TRUE; DEC (minW) END;
      IF x # 0. THEN
        exp := (exp - 8) * 30103 DIV 100000; (* * log(2) *)
        IF exp > 0 THEN
          n := SHORT (ENTIER (x / IntPower (10., exp)));
          x := x / IntPower (10., exp) - n
        ELSIF exp > -maxExp THEN
          n := SHORT (ENTIER (x * IntPower (10., -exp)));
          x := x * IntPower (10., -exp) - n
        ELSE
          n := SHORT (ENTIER (x * IntPower (10., -exp - 2 * maxDig) *
fact2));
          x := x * IntPower (10., -exp - 2 * maxDig) * fact2 - n
        END;
                       (* x0 = (n + x) * 10^exp, 200 < n < 5000 *)
        p := precision - 4;
        IF n < 1000 THEN INC (p) END;
        IF (expW < 0) & (p > exp - expW) THEN p := exp - expW END;
        IF p >= 0 THEN
          x := x + 0.5 / IntPower (10., p); (* rounding correction
*)
          IF x >= 1 THEN INC (n); x := x - 1. END
        ELSIF p = -1 THEN INC (n, 5)
        ELSIF p = -2 THEN INC (n, 50)
        ELSIF p = -3 THEN INC (n, 500)
        END;
        i := 0; k := 1000; INC (exp, 3);
        IF n < 1000 THEN k := 100; DEC (exp) END;
        WHILE (i < precision) & ((k > 0) OR (x # 0)) DO
          IF k > 0 THEN p := n DIV k; n := n MOD k; k := k DIV
10
            ELSE x := x * 10.; p := SHORT (ENTIER (x)); x := x -
p
          END;
          m [i] := CHR (p + ORD ('0')); INC (i);
          IF p # 0 THEN len := i END
        END
      END;
                            (* x0 = m[0].m[1]...m[len-1] * 10^exp *)
      i := 0;
      IF (expW < 0) OR (expW = 0) & (exp >= -3) & (exp <= len + 1)
THEN
        n := exp + 1; k := len - n;
        IF n < 1 THEN n := 1 END;
        IF expW < 0 THEN k := -expW ELSIF k < 1 THEN k := 1
END;
        j := minW - n - k - 1; p := -exp;
        IF neg & (p >= MAX (0, n) + MAX (0, k)) THEN neg := FALSE;
INC (j) END
      ELSE
        IF ABS (exp) >= 100 THEN expW := 3
        ELSIF (expW < 2) & (ABS (exp) >= 10) THEN expW := 2
        ELSIF expW < 1 THEN expW := 1
        END;
        IF len < 2 THEN len := 2 END;
        j := minW - len - 3 - expW; k := len;
        IF j > 0 THEN
          k := k + j; j := 0;
          IF k > precision THEN j := k - precision; k := precision
END
        END;
        n := 1; DEC (k); p := 0
      END;
      IF neg & (fillCh = '0') THEN s [i] := '-'; INC (i); neg :FALSE END;
      WHILE j > 0 DO s [i] := fillCh; INC (i); DEC (j) END;
      IF neg & (i < LEN (s)) THEN s [i] := '-'; INC (i) END;
      j := 0;
      WHILE (n > 0) & (i < LEN (s)) DO
        IF (p <= 0) & (j < len) THEN s [i] := m [j]; INC (j)
                                  ELSE s [i] := '0' END;
        INC (i); DEC (n); DEC (p)
      END;
      IF i < LEN (s) THEN s [i] := '.'; INC (i) END;
      WHILE (k > 0) & (i < LEN( s)) DO
        IF (p <= 0) & (j < len) THEN s [i] := m [j]; INC (j)
                                  ELSE s [i] := '0' END;
        INC (i); DEC (k); DEC (p)
      END;
      IF expW > 0 THEN
        IF i < LEN (s) THEN s [i] := 'E'; INC (i) END;
        IF i < LEN (s) THEN
          IF exp < 0 THEN s [i] := '-'; exp := -exp ELSE s [i]
:= '+' END;
          INC (i)
        END;
        IF (expW = 3) & (i < LEN (s)) THEN
          s [i] := CHR (exp DIV 100 + ORD ('0')); INC (i) END;
        IF (expW >= 2) & (i < LEN (s)) THEN
          s [i] := CHR (exp DIV 10 MOD 10 + ORD ('0')); INC (i) END;
        IF i < LEN (s) THEN s [i] := CHR (exp MOD 10 + ORD ('0'));
INC (i) END
      END
    END;
    IF i < LEN (s) THEN s [i] := 0X ELSE HALT (23) END
  END RealToStringForm;

END LibStrings.

>> -----Original Message-----
>> From: blackbox{([at]})nowhere.xy
>> Behalf Of A Thomas
>> Sent: 13 August 2007 09:04
>> To: BlackBox Mailing List
>> Subject: [BlackBox] - testing for NaNs
>>
>> *** WARNING ***
>>
>> This mail has originated outside your organization, either
>> from an external partner or the Global Internet.
>> Keep this in mind if you answer this message.
>>
>> Hei,
>>
>> I would like to test a REAL to see if it is a NaN. What
>> is the best way of doing this? If I use a variant record I
>> can regard the 8 byte real as two 4 byte integers (or maybe
>> better two variables of type SET)But what bit pattern will
>> indicate a NaN?
>>
>> Thanks
>>
>> Andrew
>>
>> --- BlackBox
>> --- send subject HELP or UNSUBSCRIBE to blackbox{([at]})nowhere.xy
>>
>>
>>

SELEX Sensors and Airborne Systems Limited
Registered Office: Sigma House, Christopher Martin Road, Basildon, Essex SS14 3EL
A company registered in England & Wales. Company no. 02426132
********************************************************************
This email and any attachments are confidential to the intended
recipient and may also be privileged. If you are not the intended
recipient please delete it from your system and notify the sender.
You should not copy it or use it for any purpose nor disclose or
distribute its contents to any other person.
********************************************************************

--- BlackBox
--- send subject HELP or UNSUBSCRIBE to blackbox{([at]})nowhere.xy

----boundary-LibPST-iamunique-575623212_-_-
Content-type: application/rtf
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="rtf-body.rtf"

e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbXRleHQgXGRlZmYwe1xmb250dGJsDQp7XGYwXGZz
d2lzcyBBcmlhbDt9DQp7XGYxXGZtb2Rlcm4gQ291cmllciBOZXc7fQ0Ke1xmMlxmbmlsXGZjaGFy
c2V0MiBTeW1ib2w7fQ0Ke1xmM1xmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyIE5ldzt9fQ0Ke1xj
b2xvcnRibFxyZWQwXGdyZWVuMFxibHVlMDtccmVkMFxncmVlbjBcYmx1ZTI1NTt9DQpcdWMxXHBh
cmRccGxhaW5cZGVmdGFiMzYwIFxmMFxmczIwIFxwYXINCkFuZHJld1xwYXINClxwYXINClRoZXJl
IGlzIGFsc28gc3VpdGFibGUsIGJ1dCB2ZXJ5IGRpZmZlcmVudCwgY29kZSBpblxwYXINClN0cmlu
Z3MuUmVhbFRvU3RyaW5nRm9ybS5ccGFyDQpUaGlzIHVzZXMgTWF0aC5NYW50aXNzYSAmIE1hdGgu
RXhwb25lbnQgKHdoaWNoIEFSRSBleHBvcnRlZCEpLiBJIGhhdmVccGFyDQpwbGF0Zm9ybSBpbmRl
cGVuZGVudCAoaWUgR2FyZGVucyBQb2ludCBmcmllbmRseSkgdmVyc2lvbnMgb2YgdGhlc2UgLSBz
ZWVccGFyDQpiZWxvdzpccGFyDQpccGFyDQpUaGlzIGlzIG11Y2ggdGVzdGVkLCBidXQgTk9UIGd1
YXJhbnRlZWQhXHBhcg0KXHBhcg0KQ2hlZXJzXHBhcg0KXHBhcg0KUm9iZXJ0LlxwYXINClxwYXIN
ClxwYXINClxwYXINCk1PRFVMRSAgTGliU3RyaW5ncztcdGFiICgqICBEYXRlICAgIDogIDUgIEp1
bmUgIDIwMDYgICAgICAqKVxwYXINClx0YWIgXHRhYiBcdGFiICgqICBBdXRob3IgIDogIFJvYmVy
dCBEIENhbXBiZWxsICAqKVxwYXINClx0YWIgXHRhYiBcdGFiICgqICBWZXJzaW9uIDogIEdhcmRl
bnMgUG9pbnQgICAgICAqKVxwYXINClxwYXINClxwYXINCklNUE9SVCAgU3lzIDo9IG1zY29ybGli
X1N5c3RlbTtccGFyDQpccGFyDQpUWVBFXHBhcg0KICBNICA9ICBTeXMuTWF0aDtccGFyDQpccGFy
DQpccGFyDQpDT05TVFxwYXINCiAgZGlnaXRzcGFjZSAgPSAgMDhGWDtccGFyDQogIG1heEV4cCAg
ICAgID0gIDMwOTtcdGFiICgqICBTSE9SVCAoRU5USUVSICggTWF0aC5Mb2cgKE1BWCAoUkVBTCkp
KSkgKyAxXHBhcg0KKilccGFyDQogIG1heERpZyAgICAgID0gICAxNTtcdGFiICgqICBTSE9SVCAo
RU5USUVSICgtTWF0aC5Mb2cgKE1hdGguRXBzICgpKSkpXHBhcg0KKilccGFyDQogIGZhY3QyICAg
ICAgID0gIDEuRTMwO1x0YWIgKCogIDEwIF4gKDIgKiBtYXhEaWcpXHBhcg0KKilccGFyDQpccGFy
DQpccGFyDQpQUk9DRURVUkUgIFNwbGl0UmVhbCogKHggOiBSRUFMOyBPVVQgbWFudCA6IFJFQUw7
IE9VVCBleHAgOiBJTlRFR0VSKTtccGFyDQogIENPTlNUXHBhcg0KICAgIGxuMiAgID0gIDAuNjkz
MTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTtccGFyDQogICAgYmlnICAgPSAgMTA3Mzc0MTgyNC47ICgq
ICAyXiAzMCAgKilccGFyDQogICAgdGlueSAgPSAgMS4gLyBiaWc7XHBhcg0KICBWQVJccGFyDQog
ICAgZXggICA6ICBJTlRFR0VSO1xwYXINCiAgQkVHSU5ccGFyDQogICAgSUYgIHggID0gICAwLiAg
IFRIRU4gIG1hbnQgOj0gIDAuOyBleHAgOj0gMDsgIFJFVFVSTiAgRU5EO1xwYXINCiAgICBJRiAg
eCAgPSAgIElORiAgVEhFTiAgbWFudCA6PSAgMS47IGV4cCA6PSBNQVggKElOVEVHRVIpOyBSRVRV
Uk5ccGFyDQpFTkQ7XHBhcg0KICAgIElGICB4ICA9ICAtSU5GICBUSEVOICBtYW50IDo9IC0xLjsg
ZXhwIDo9IE1BWCAoSU5URUdFUik7IFJFVFVSTlxwYXINCkVORDtccGFyDQpccGFyDQogICAgZXhw
ICA6PSAgU0hPUlQgKEVOVElFUiAoKE0uTG9nIChBQlMgKHgpKSkgLyBsbjIpKTsgZXggIDo9ICBB
QlNccGFyDQooZXhwKTtccGFyDQogICAgSUYgIGV4cCAgPSAgMCAgVEhFTlxwYXINCiAgICAgIG1h
bnQgIDo9ICB4XHBhcg0KICAgIEVMU0lGICBleHAgID4gIDAgIFRIRU5ccGFyDQogICAgICBXSElM
RSAgZXggID4gIDMwICBETyAgeCAgOj0gIHggKiB0aW55OyBERUMgKGV4LCAzMCkgIEVORDtccGFy
DQogICAgICBtYW50ICA6PSAgeCAvIEFTSCAoMSwgZXgpXHBhcg0KICAgIEVMU0VccGFyDQogICAg
ICBXSElMRSAgZXggID4gIDMwICBETyAgeCAgOj0gIHggKiBiaWc7ICBERUMgKGV4LCAzMCkgIEVO
RDtccGFyDQogICAgICBtYW50ICA6PSAgeCAqIEFTSCAoMSwgZXgpXHBhcg0KICAgIEVORDtccGFy
DQpccGFyDQogICAgSUYgIEFCUyAobWFudCkgID49ICAyLiAgVEhFTiAgbWFudCAgOj0gIG1hbnQg
KiAwLjU7IElOQyAoZXhwKSAgRU5EO1xwYXINClxwYXINCiAgICBBU1NFUlQgKEFCUyAobWFudCkg
PCAgMi4sIDYxKTtccGFyDQogICAgQVNTRVJUIChBQlMgKG1hbnQpID49IDEuLCA2MilccGFyDQog
IEVORCAgU3BsaXRSZWFsO1xwYXINClxwYXINClxwYXINClBST0NFRFVSRSAgSW50UG93ZXIqICh4
IDogUkVBTDsgcHdyIDogSU5URUdFUikgOiBSRUFMO1xwYXINCiAgVkFSXHBhcg0KICAgIHJlcyAg
OiAgUkVBTDtccGFyDQogIEJFR0lOXHBhcg0KICAgIElGICBwd3IgID0gIDAgICBUSEVOICBSRVRV
Uk4gIDEuICBFTkQ7XHBhcg0KICAgIElGICBwd3IgID0gIDEgICBUSEVOICBSRVRVUk4gIHggICBF
TkQ7XHBhcg0KICAgIElGICB4ICAgID0gIDAuICBUSEVOICBBU1NFUlQgKHB3ciA+IDAsIDIwKTsg
UkVUVVJOICAwLiAgRU5EO1xwYXINClxwYXINCiAgICBJRiAgcHdyICA8ICAwICBUSEVOICBwd3Ig
IDo9ICAtcHdyOyB4ICA6PSAgMS4gLyB4ICBFTkQ7XHBhcg0KICAgIHJlcyAgOj0gIDE7XHBhcg0K
ICAgIExPT1BccGFyDQogICAgICBJRiAgT0REIChwd3IpICBUSEVOICByZXMgIDo9ICByZXMgKiB4
ICBFTkQ7XHBhcg0KICAgICAgSUYgIHB3ciAgPSAgMSAgVEhFTiAgUkVUVVJOICByZXMgIEVORDtc
cGFyDQogICAgICB4ICA6PSAgeCAqIHg7IHB3ciAgOj0gIEFTSCAocHdyLCAtMSlccGFyDQogICAg
RU5EICAgIFxwYXINCiAgRU5EICBJbnRQb3dlcjtccGFyDQpccGFyDQpccGFyDQpQUk9DRURVUkUg
IFJlYWxUb1N0cmluZ0Zvcm0qICh4IDogUkVBTDsgcHJlY2lzaW9uLCBtaW5XLCBleHBXIDogSU5U
RUdFUjtccGFyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsQ2ggOiBDSEFSOyBP
VVQgcyA6IEFSUkFZIE9GIENIQVIpO1xwYXINClxwYXINCiAgVkFSXHBhcg0KICAgIGV4cCwgbGVu
LCBpLCBqLCBuLCBrLCBwICA6ICBJTlRFR0VSO1xwYXINCiAgICBtYW50ICAgICAgICAgICAgICAg
ICAgICAgOiAgUkVBTDtccGFyDQogICAgbSAgICAgICAgICAgICAgICAgICAgICAgIDogIEFSUkFZ
ICA4MCAgT0YgIENIQVI7XHBhcg0KICAgIG5lZyAgICAgICAgICAgICAgICAgICAgICA6ICBCT09M
RUFOO1xwYXINCiAgQkVHSU5ccGFyDQogICAgQVNTRVJUICgocHJlY2lzaW9uID4gMCkgKComIChw
cmVjaXNpb24gPD0gMTgpKiksIDIwKTtccGFyDQogICAgQVNTRVJUICgobWluVyA+PSAwKSAmICht
aW5XIDwgTEVOIChzKSksIDIxKTtccGFyDQogICAgQVNTRVJUICgoZXhwVyA+IC1MRU4gKHMpKSAm
IChleHBXIDw9IDMpLCAyMik7XHBhcg0KICAgIFNwbGl0UmVhbCAoeCwgbWFudCwgZXhwKTtccGFy
DQogICAgSUYgIGV4cCA9ICBNQVggKElOVEVHRVIpICBUSEVOXHBhcg0KICAgICAgSUYgIGZpbGxD
aCA9ICcwJyAgVEhFTiAgZmlsbENoICA6PSAgZGlnaXRzcGFjZSAgRU5EO1xwYXINCiAgICAgIHgg
IDo9ICBtYW50O1xwYXINCiAgICAgIElGICAgICB4ID0gLTEgIFRIRU4gIG0gIDo9ICAnLWluZic7
IG4gOj0gNFxwYXINCiAgICAgIEVMU0lGICB4ID0gIDEgIFRIRU4gIG0gIDo9ICAnaW5mJzsgIG4g
Oj0gM1xwYXINCiAgICAgICAgRUxTRSBtICA6PSAgJ25hbic7IG4gIDo9ICAzXHBhcg0KICAgICAg
RU5EO1xwYXINCiAgICAgIGkgIDo9ICAwOyBqICA6PSAgMDtccGFyDQogICAgICBXSElMRSAgbWlu
VyA+IG4gIERPICBzW2ldICA6PSAgZmlsbENoOyBJTkMgKGkpOyBERUMgKG1pblcpICBFTkQ7XHBh
cg0KICAgICAgV0hJTEUgKGogPD0gbikgJiAoaSA8IExFTihzKSkgIERPICBzIFtpXSAgOj0gIG0g
W2pdOyBJTkMgKGkpOyBJTkNccGFyDQooaikgRU5EXHBhcg0KICAgIEVMU0VccGFyDQogICAgICBu
ZWcgIDo9ICBGQUxTRTsgbGVuICA6PSAgMTsgbSAgOj0gICcwMCc7XHBhcg0KICAgICAgSUYgIHgg
PCAwLiAgVEhFTiAgeCAgOj0gIC14OyBuZWcgIDo9ICBUUlVFOyBERUMgKG1pblcpICBFTkQ7XHBh
cg0KICAgICAgSUYgIHggIyAwLiAgVEhFTlxwYXINCiAgICAgICAgZXhwICA6PSAgKGV4cCAtIDgp
ICogMzAxMDMgRElWIDEwMDAwMDtcdGFiICgqICogbG9nKDIpICopXHBhcg0KICAgICAgICBJRiAg
ZXhwID4gMCAgVEhFTlxwYXINCiAgICAgICAgICBuICA6PSAgU0hPUlQgKEVOVElFUiAoeCAvIElu
dFBvd2VyICgxMC4sIGV4cCkpKTtccGFyDQogICAgICAgICAgeCAgOj0gIHggLyBJbnRQb3dlciAo
MTAuLCBleHApIC0gblxwYXINCiAgICAgICAgRUxTSUYgIGV4cCA+IC1tYXhFeHAgIFRIRU5ccGFy
DQogICAgICAgICAgbiAgOj0gIFNIT1JUIChFTlRJRVIgKHggKiBJbnRQb3dlciAoMTAuLCAtZXhw
KSkpO1xwYXINCiAgICAgICAgICB4ICA6PSAgeCAqIEludFBvd2VyICgxMC4sIC1leHApIC0gblxw
YXINCiAgICAgICAgRUxTRVxwYXINCiAgICAgICAgICBuICA6PSBTSE9SVCAoRU5USUVSICh4ICog
SW50UG93ZXIgKDEwLiwgLWV4cCAtIDIgKiBtYXhEaWcpICpccGFyDQpmYWN0MikpO1xwYXINCiAg
ICAgICAgICB4ICA6PSB4ICogSW50UG93ZXIgKDEwLiwgLWV4cCAtIDIgKiBtYXhEaWcpICogZmFj
dDIgLSBuXHBhcg0KICAgICAgICBFTkQ7XHBhcg0KICAgICAgICAgICAgICAgICAgICAgICAoKiB4
MCA9IChuICsgeCkgKiAxMF5leHAsIDIwMCA8IG4gPCA1MDAwICopXHBhcg0KICAgICAgICBwICA6
PSAgcHJlY2lzaW9uIC0gNDtccGFyDQogICAgICAgIElGICBuIDwgMTAwMCAgVEhFTiAgSU5DIChw
KSAgRU5EO1xwYXINCiAgICAgICAgSUYgKGV4cFcgPCAwKSAmIChwID4gZXhwIC0gZXhwVykgIFRI
RU4gIHAgIDo9ICBleHAgLSBleHBXICBFTkQ7XHBhcg0KICAgICAgICBJRiAgcCA+PSAwICBUSEVO
XHBhcg0KICAgICAgICAgIHggIDo9ICB4ICsgMC41IC8gSW50UG93ZXIgKDEwLiwgcCk7XHRhYiAo
KiByb3VuZGluZyBjb3JyZWN0aW9uXHBhcg0KKilccGFyDQogICAgICAgICAgSUYgICB4ID49IDEg
IFRIRU4gIElOQyAobik7IHggIDo9ICB4IC0gMS4gIEVORFxwYXINCiAgICAgICAgRUxTSUYgIHAg
PSAtMSAgVEhFTiAgSU5DIChuLCA1KVxwYXINCiAgICAgICAgRUxTSUYgIHAgPSAtMiAgVEhFTiAg
SU5DIChuLCA1MClccGFyDQogICAgICAgIEVMU0lGICBwID0gLTMgIFRIRU4gIElOQyAobiwgNTAw
KVxwYXINCiAgICAgICAgRU5EO1xwYXINCiAgICAgICAgaSAgOj0gIDA7IGsgIDo9ICAxMDAwOyBJ
TkMgKGV4cCwgMyk7XHBhcg0KICAgICAgICBJRiAgbiA8IDEwMDAgIFRIRU4gIGsgIDo9ICAxMDA7
IERFQyAoZXhwKSAgRU5EO1xwYXINCiAgICAgICAgV0hJTEUgIChpIDwgcHJlY2lzaW9uKSAmICgo
ayA+IDApIE9SICh4ICMgMCkpICBET1xwYXINCiAgICAgICAgICBJRiAgayA+IDAgIFRIRU4gIHAg
IDo9ICBuIERJViBrOyBuICA6PSAgbiBNT0QgazsgayAgOj0gIGsgRElWXHBhcg0KMTBccGFyDQog
ICAgICAgICAgICBFTFNFICB4ICA6PSAgeCAqIDEwLjsgcCAgOj0gIFNIT1JUIChFTlRJRVIgKHgp
KTsgeCAgOj0gIHggLVxwYXINCnBccGFyDQogICAgICAgICAgRU5EO1xwYXINCiAgICAgICAgICBt
IFtpXSAgOj0gIENIUiAocCArIE9SRCAoJzAnKSk7IElOQyAoaSk7XHBhcg0KICAgICAgICAgIElG
ICBwICMgMCAgVEhFTiAgbGVuICA6PSAgaSAgRU5EXHBhcg0KICAgICAgICBFTkRccGFyDQogICAg
ICBFTkQ7XHBhcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIHgwID0gbVswXS5tWzFd
Li4ubVtsZW4tMV0gKiAxMF5leHAgKilccGFyDQogICAgICBpICA6PSAgMDtccGFyDQogICAgICBJ
RiAgKGV4cFcgPCAwKSBPUiAoZXhwVyA9IDApICYgKGV4cCA+PSAtMykgJiAoZXhwIDw9IGxlbiAr
IDEpXHBhcg0KVEhFTlxwYXINCiAgICAgICAgbiAgOj0gIGV4cCArIDE7IGsgIDo9ICBsZW4gLSBu
O1xwYXINCiAgICAgICAgSUYgIG4gPCAxICBUSEVOICBuIDo9IDEgIEVORDtccGFyDQogICAgICAg
IElGICBleHBXIDwgMCAgVEhFTiAgayAgOj0gIC1leHBXICBFTFNJRiAgayA8IDEgIFRIRU4gIGsg
IDo9ICAxXHBhcg0KRU5EO1xwYXINCiAgICAgICAgaiAgOj0gIG1pblcgLSBuIC0gayAtIDE7IHAg
IDo9ICAtZXhwO1xwYXINCiAgICAgICAgSUYgIG5lZyAmIChwID49IE1BWCAoMCwgbikgKyBNQVgg
KDAsIGspKSAgVEhFTiAgbmVnICA6PSAgRkFMU0U7XHBhcg0KSU5DIChqKSAgRU5EXHBhcg0KICAg
ICAgRUxTRVxwYXINCiAgICAgICAgSUYgIEFCUyAoZXhwKSA+PSAxMDAgIFRIRU4gIGV4cFcgIDo9
ICAzXHBhcg0KICAgICAgICBFTFNJRiAgKGV4cFcgPCAyKSAmIChBQlMgKGV4cCkgPj0gMTApICBU
SEVOICBleHBXICA6PSAgMlxwYXINCiAgICAgICAgRUxTSUYgIGV4cFcgPCAxICBUSEVOICBleHBX
ICA6PSAgMVxwYXINCiAgICAgICAgRU5EO1xwYXINCiAgICAgICAgSUYgIGxlbiA8IDIgIFRIRU4g
IGxlbiA6PSAyICBFTkQ7XHBhcg0KICAgICAgICBqICA6PSAgbWluVyAtIGxlbiAtIDMgLSBleHBX
OyBrICA6PSAgbGVuO1xwYXINCiAgICAgICAgSUYgIGogPiAwICBUSEVOXHBhcg0KICAgICAgICAg
IGsgIDo9ICBrICsgajsgaiAgOj0gIDA7XHBhcg0KICAgICAgICAgIElGICBrID4gcHJlY2lzaW9u
ICBUSEVOICBqIDo9ICBrIC0gcHJlY2lzaW9uOyBrICA6PSAgcHJlY2lzaW9uXHBhcg0KRU5EXHBh
cg0KICAgICAgICBFTkQ7XHBhcg0KICAgICAgICBuICA6PSAgMTsgREVDIChrKTsgcCAgOj0gIDBc
cGFyDQogICAgICBFTkQ7XHBhcg0KICAgICAgSUYgIG5lZyAmIChmaWxsQ2ggPSAnMCcpICBUSEVO
ICBzIFtpXSAgOj0gICctJzsgSU5DIChpKTsgbmVnICA6PVxwYXINCkZBTFNFICBFTkQ7XHBhcg0K
ICAgICAgV0hJTEUgIGogPiAwICBETyAgcyBbaV0gIDo9ICBmaWxsQ2g7IElOQyAoaSk7IERFQyAo
aikgIEVORDtccGFyDQogICAgICBJRiAgbmVnICYgKGkgPCBMRU4gKHMpKSAgVEhFTiAgcyBbaV0g
IDo9ICAnLSc7IElOQyAoaSkgRU5EO1xwYXINCiAgICAgIGogIDo9ICAwO1xwYXINCiAgICAgIFdI
SUxFICAobiA+IDApICYgKGkgPCBMRU4gKHMpKSAgRE9ccGFyDQogICAgICAgIElGICAocCA8PSAw
KSAmIChqIDwgbGVuKSAgVEhFTiAgcyBbaV0gIDo9ICBtIFtqXTsgSU5DIChqKSBccGFyDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUxTRSAgcyBbaV0gIDo9ICAnMCcgIEVORDtc
cGFyDQogICAgICAgIElOQyAoaSk7IERFQyAobik7IERFQyAocClccGFyDQogICAgICBFTkQ7XHBh
cg0KICAgICAgSUYgIGkgPCBMRU4gKHMpICBUSEVOICBzIFtpXSAgOj0gICcuJzsgSU5DIChpKSAg
RU5EO1xwYXINCiAgICAgIFdISUxFICAoayA+IDApICYgKGkgPCBMRU4oIHMpKSAgRE9ccGFyDQog
ICAgICAgIElGICAocCA8PSAwKSAmIChqIDwgbGVuKSAgVEhFTiAgcyBbaV0gIDo9ICBtIFtqXTsg
SU5DIChqKVxwYXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTFNFICBzIFtp
XSAgOj0gICcwJyAgRU5EO1xwYXINCiAgICAgICAgSU5DIChpKTsgREVDIChrKTsgREVDIChwKVxw
YXINCiAgICAgIEVORDtccGFyDQogICAgICBJRiAgZXhwVyA+IDAgIFRIRU5ccGFyDQogICAgICAg
IElGICBpIDwgTEVOIChzKSAgVEhFTiAgcyBbaV0gIDo9ICAnRSc7IElOQyAoaSkgRU5EO1xwYXIN
CiAgICAgICAgSUYgIGkgPCBMRU4gKHMpICBUSEVOXHBhcg0KICAgICAgICAgIElGICBleHAgPCAw
ICBUSEVOICBzIFtpXSAgOj0gICctJzsgZXhwICA6PSAgLWV4cCAgRUxTRSAgcyBbaV1ccGFyDQo6
PSAgJysnICBFTkQ7XHBhcg0KICAgICAgICAgIElOQyAoaSlccGFyDQogICAgICAgIEVORDtccGFy
DQogICAgICAgIElGICAoZXhwVyA9IDMpICYgKGkgPCBMRU4gKHMpKSAgVEhFTlxwYXINCiAgICAg
ICAgICBzIFtpXSAgOj0gIENIUiAoZXhwIERJViAxMDAgKyBPUkQgKCcwJykpOyBJTkMgKGkpICBF
TkQ7XHBhcg0KICAgICAgICBJRiAgKGV4cFcgPj0gMikgJiAoaSA8IExFTiAocykpICBUSEVOXHBh
cg0KICAgICAgICAgIHMgW2ldICA6PSAgQ0hSIChleHAgRElWIDEwIE1PRCAxMCArIE9SRCAoJzAn
KSk7IElOQyAoaSkgIEVORDtccGFyDQogICAgICAgIElGICBpIDwgTEVOIChzKSAgVEhFTiAgcyBb
aV0gIDo9ICBDSFIgKGV4cCBNT0QgMTAgKyBPUkQgKCcwJykpO1xwYXINCklOQyAoaSkgRU5EXHBh
cg0KICAgICAgRU5EXHBhcg0KICAgIEVORDtccGFyDQogICAgSUYgIGkgPCBMRU4gKHMpICBUSEVO
ICBzIFtpXSAgOj0gIDBYICBFTFNFICBIQUxUICgyMykgIEVORFxwYXINCiAgRU5EICBSZWFsVG9T
dHJpbmdGb3JtO1xwYXINClxwYXINCkVORCAgTGliU3RyaW5ncy5ccGFyDQpccGFyDQo+PiAtLS0t
LU9yaWdpbmFsIE1lc3NhZ2UtLS0tLVxwYXINCj4+IEZyb206IGJsYWNrYm94QG9iZXJvbi5jaCBb
bWFpbHRvOmJsYWNrYm94QG9iZXJvbi5jaF0gT24gXHBhcg0KPj4gQmVoYWxmIE9mIEEgVGhvbWFz
XHBhcg0KPj4gU2VudDogMTMgQXVndXN0IDIwMDcgMDk6MDRccGFyDQo+PiBUbzogQmxhY2tCb3gg
TWFpbGluZyBMaXN0XHBhcg0KPj4gU3ViamVjdDogW0JsYWNrQm94XSAtIHRlc3RpbmcgZm9yIE5h
TnNccGFyDQo+PiBccGFyDQo+PiAgICAgICAgICAgICAgICoqKiBXQVJOSU5HICoqKlxwYXINCj4+
IFxwYXINCj4+IFRoaXMgbWFpbCBoYXMgb3JpZ2luYXRlZCBvdXRzaWRlIHlvdXIgb3JnYW5pemF0
aW9uLCBlaXRoZXIgXHBhcg0KPj4gZnJvbSBhbiBleHRlcm5hbCBwYXJ0bmVyIG9yIHRoZSBHbG9i
YWwgSW50ZXJuZXQuIFxwYXINCj4+ICAgICAgS2VlcCB0aGlzIGluIG1pbmQgaWYgeW91IGFuc3dl
ciB0aGlzIG1lc3NhZ2UuIFxwYXINCj4+IFxwYXINCj4+IEhlaSxccGFyDQo+PiBccGFyDQo+PiBc
dGFiIEkgd291bGQgbGlrZSB0byB0ZXN0IGEgUkVBTCB0byBzZWUgaWYgaXQgaXMgYSBOYU4uIFdo
YXQgXHBhcg0KPj4gaXMgdGhlIGJlc3Qgd2F5IG9mIGRvaW5nIHRoaXM/IElmIEkgdXNlIGEgdmFy
aWFudCByZWNvcmQgSSBccGFyDQo+PiBjYW4gcmVnYXJkIHRoZSA4IGJ5dGUgcmVhbCBhcyB0d28g
NCBieXRlIGludGVnZXJzIChvciBtYXliZSBccGFyDQo+PiBiZXR0ZXIgdHdvIHZhcmlhYmxlcyBv
ZiB0eXBlIFNFVClCdXQgd2hhdCBiaXQgcGF0dGVybiB3aWxsIFxwYXINCj4+IGluZGljYXRlIGEg
TmFOP1xwYXINCj4+IFxwYXINCj4+IFRoYW5rc1xwYXINCj4+IFxwYXINCj4+IFx0YWIgQW5kcmV3
XHBhcg0KPj4gXHBhcg0KPj4gLS0tIEJsYWNrQm94XHBhcg0KPj4gLS0tIHNlbmQgc3ViamVjdCBI
RUxQIG9yIFVOU1VCU0NSSUJFIHRvIGJsYWNrYm94QG9iZXJvbi5jaFxwYXINCj4+IFxwYXINCj4+
IFxwYXINCj4+IFxwYXINClxwYXINClNFTEVYIFNlbnNvcnMgYW5kIEFpcmJvcm5lIFN5c3RlbXMg
TGltaXRlZFxwYXINClJlZ2lzdGVyZWQgT2ZmaWNlOiBTaWdtYSBIb3VzZSwgQ2hyaXN0b3BoZXIg
TWFydGluIFJvYWQsIEJhc2lsZG9uLCBFc3NleCBTUzE0IDNFTFxwYXINCkEgY29tcGFueSByZWdp
c3RlcmVkIGluIEVuZ2xhbmQgJiBXYWxlcy4gIENvbXBhbnkgbm8uIDAyNDI2MTMyXHBhcg0KKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKipccGFyDQpUaGlzIGVtYWlsIGFuZCBhbnkgYXR0YWNobWVudHMgYXJlIGNvbmZpZGVu
dGlhbCB0byB0aGUgaW50ZW5kZWRccGFyDQpyZWNpcGllbnQgYW5kIG1heSBhbHNvIGJlIHByaXZp
bGVnZWQuIElmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZFxwYXINCnJlY2lwaWVudCBwbGVhc2Ug
ZGVsZXRlIGl0IGZyb20geW91ciBzeXN0ZW0gYW5kIG5vdGlmeSB0aGUgc2VuZGVyLlxwYXINCllv
dSBzaG91bGQgbm90IGNvcHkgaXQgb3IgdXNlIGl0IGZvciBhbnkgcHVycG9zZSBub3IgZGlzY2xv
c2Ugb3JccGFyDQpkaXN0cmlidXRlIGl0cyBjb250ZW50cyB0byBhbnkgb3RoZXIgcGVyc29uLlxw
YXINCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqXHBhcg0KXHBhcg0KLS0tIEJsYWNrQm94XHBhcg0KLS0tIHNlbmQgc3Vi
amVjdCBIRUxQIG9yIFVOU1VCU0NSSUJFIHRvIGJsYWNrYm94QG9iZXJvbn19AFJUIChwd3I

----boundary-LibPST-iamunique-575623212_-_---
Received on Mon Aug 13 2007 - 12:03:30 UTC

This archive was generated by hypermail 2.3.0 : Thu Sep 26 2013 - 06:31:25 UTC