(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
(FILECREATED "25-Mar-94 13:43:20" |{PELE:MV:ENVOS}<LISPCORE>LIBRARY>BROWSER.;4| 26296  

      changes to%:  (FNS BROWSER.MIDDLEFN)

      previous date%: "20-Jan-93 16:00:51" |{PELE:MV:ENVOS}<LISPCORE>LIBRARY>BROWSER.;3|)


(* ; "
Copyright (c) 1983, 1984, 1987, 1988, 1990, 1993, 1994 by Venue & Xerox Corporation.  All rights reserved.
")

(PRETTYCOMPRINT BROWSERCOMS)

(RPAQQ BROWSERCOMS
       [(FILES MASTERSCOPE GRAPHER)
        (DECLARE%: EVAL@COMPILE DONTCOPY (FILES (LOADCOMP)
                                                GRAPHER)
               (CONSTANTS (CHANGEDSHADE 8840)))
        (FNS NUMSPATHS BROWSER BROWSER.WHENFNSCHANGED BRPATHS1 BROWSER.LEFTFN GET.BROWSE.PP.WINDOW 
             GET.BROWSE.DESCRIBE.WINDOW BROWSEPP PPREPAINTFN PPRESHAPEFN DESCRIBEREPAINTFN 
             BROWSERDESCRIBE BROWSER.MIDDLEFN DEDITPROCESSRUNNINGP REDRAWBROWSEGRAPH STBROWSER)
        (GLOBALRESOURCES BROWSEHASH)
        (DECLARE%: DONTCOPY (RECORDS BROWSEWIN PATHSARGS))
        [VARS (BROWSERBOXING)
              (BROWSERFORMAT)
              (BROWSERWINDOWS)
              (NODESELECTIONWINDOW)
              (PFWINDOW)
              (BROWSER.DESCRIBE.WINDOW)
              (BrowserPPWindowWidth 750)
              (BROWSERFONT '(GACHA 8]
        [P (MOVD? 'MSPATHS 'OLDMSPATHS)
           (PROG [(WC (FILEPKGTYPE 'FNS 'WHENCHANGED]
                 (OR (MEMB 'BROWSER.WHENFNSCHANGED WC)
                     (FILEPKGTYPE 'FNS 'WHENCHANGED (CONS 'BROWSER.WHENFNSCHANGED WC]
        (DECLARE%: DONTEVAL@LOAD DOCOPY (P (SELECTQ (SYSTEMTYPE)
                                                  (D (BROWSER T))
                                                  NIL])

(FILESLOAD MASTERSCOPE GRAPHER)
(DECLARE%: EVAL@COMPILE DONTCOPY 

(FILESLOAD (LOADCOMP)
       GRAPHER)

(DECLARE%: EVAL@COMPILE 

(RPAQQ CHANGEDSHADE 8840)


(CONSTANTS (CHANGEDSHADE 8840))
)
)
(DEFINEQ

(NUMSPATHS
  [LAMBDA (FROM TO INVERTED AVOIDING SEPARATE NOTRACE MARKING)
                                                             (* ; "Edited 11-Apr-88 11:08 by jrb:")
    (COND
       [(AND (WINDOWWORLD)
             (EQ (OUTPUT)
                 T))
        [OR AVOIDING (SETQ AVOIDING '(NIL (NIL NIL . FNS)
                                          APPLY LAMBDA (X)
                                          (GETPROP X 'AVOID]
        (RESETVARS ((MSPRINTFLG))
                   (AND INVERTED (UPDATECHANGED))
                   (STBROWSER
                    [GLOBALRESOURCE
                     BROWSEHASH
                     (PROG [X NAMED TEM (UNDONE (MSLISTSET FROM T))
                              ROOTS GRAPHNODE.LIST (SEEN BROWSEHASH)
                              (CALLRELATION (PARSERELATION 'CALL]
                           (DECLARE (SPECVARS SEEN UNDONE))
                           (CLRHASH SEEN)
                           (for X in UNDONE do (PUTHASH X (COND
                                                                         ((AND NOTRACE
                                                                               (MSMEMBSET X NOTRACE))
                                                                          -1)
                                                                         (T 0))
                                                                  SEEN)
                                                          (OR INVERTED (UPDATEFN X NIL 0)))
                           [do (COND
                                      (NAMED (PUTHASH (CAR NAMED)
                                                    0 SEEN)
                                             [push ROOTS (fetch (GRAPHNODE NODEID)
                                                                of (BRPATHS1 (CAR NAMED]
                                             (SETQ NAMED (CDR NAMED)))
                                      (UNDONE [COND
                                                 ([OR (NULL (SETQ TEM (GETHASH (CAR UNDONE)
                                                                             SEEN)))
                                                      (EQ TEM 0)
                                                      (AND (LISTP TEM)
                                                           (NULL (CAR TEM]
                                                  (PUTHASH (CAR UNDONE)
                                                         (LIST NIL)
                                                         SEEN)
                                                  (SETQ NAMED (LIST (CAR UNDONE]
                                             (SETQ UNDONE (CDR UNDONE)))
                                      (T (RETURN]
                           (RETURN (LAYOUTFOREST GRAPHNODE.LIST ROOTS BROWSERFORMAT BROWSERBOXING]
                    (PROG1 (LIST FROM TO INVERTED AVOIDING SEPARATE NOTRACE)
                                                             (* ; 
                                                 "this LIST is actually an 'instance' of PATHSARGS")
                           ]
       (T (OLDMSPATHS FROM TO INVERTED AVOIDING SEPARATE NOTRACE MARKING])

(BROWSER
  [LAMBDA (DISPLAYFLG)                                       (* rmk%: "16-Dec-83 15:39")
    (COND
       (DISPLAYFLG (SETQ BROWSERFONT (FONTCREATE BROWSERFONT))
              (MOVD 'NUMSPATHS 'MSPATHS))
       (T (MOVD 'OLDMSPATHS 'MSPATHS])

(BROWSER.WHENFNSCHANGED
  [LAMBDA (FNNAME TYPE REASON)                               (* DECLARATIONS%: (RECORDS BROWSEWIN))
                                                             (* ; "Edited 31-Mar-87 11:22 by jop")

    (* ;; "called by system when FNNAME has changed If FNNAME is in a browser window, it reprints and redescribes it.")

    (COND
       ((AND (ACTIVEWP PFWINDOW)
             (EQ (WINDOWPROP PFWINDOW 'FNBROWSED)
                 FNNAME))
        (BROWSEPP FNNAME PFWINDOW)))
    (COND
       ((AND (ACTIVEWP BROWSER.DESCRIBE.WINDOW)
             (EQ (WINDOWPROP BROWSER.DESCRIBE.WINDOW 'FNBROWSED)
                 FNNAME))
        (BROWSERDESCRIBE FNNAME BROWSER.DESCRIBE.WINDOW)))
    (for X in BROWSERWINDOWS do (COND
                                               ((find GRAPHNODE
                                                   in (fetch (GRAPH GRAPHNODES)
                                                             of (fetch (BROWSEWIN GRAPH)
                                                                       of X))
                                                   suchthat (EQ (fetch (GRAPHNODE NODELABEL)
                                                                       of GRAPHNODE)
                                                                    FNNAME))
                                                (COND
                                                   ((fetch (BROWSEWIN GRAPH) of X)
                                                    (DSPFILL NIL CHANGEDSHADE 'PAINT
                                                           (fetch (BROWSEWIN WINDOW) of
                                                                                         X))
                                                    (WINDOWPROP (fetch (BROWSEWIN WINDOW)
                                                                   of X)
                                                           'BUTTONEVENTFN
                                                           (FUNCTION REDRAWBROWSEGRAPH))
                                                    (replace (BROWSEWIN GRAPH) of X
                                                       with NIL])

(BRPATHS1
  [LAMBDA (FROM)                                     (* ; "Edited 11-Apr-88 11:27 by jrb:")
    (DECLARE (GLOBALVARS BROWSERFONT))
    (PROG (TEM)
          (MSPATHS2 FROM)
          (COND
             ((EQ (SETQ TEM (GETHASH FROM SEEN))
                  -1)                                        (* ; 
                                              "on NOPATHS list - create a node for it with no subs")
              (SETQ TEM (create GRAPHNODE
                               NODEID _ FROM
                               NODELABEL _ FROM
                               NODEFONT _ BROWSERFONT
                               TONODES _ NIL))
              (push GRAPHNODE.LIST TEM)
              (PUTHASH FROM TEM SEEN)
              (RETURN TEM))
             ((NEQ TEM 0)                                    (* ; "already expanded into a list")
              (RETURN TEM))
             (T (RETURN (PROG ((ENTRY (create GRAPHNODE
                                             NODEID _ FROM
                                             NODELABEL _ FROM
                                             NODEFONT _ BROWSERFONT)))
                              (push GRAPHNODE.LIST ENTRY)
                              (PUTHASH FROM ENTRY SEEN)
                              (replace (GRAPHNODE TONODES) of ENTRY
                                 with (for X
                                             in (for Y
                                                       in (COND
                                                                 ((NOT INVERTED)
                                                                  (GETRELATION FROM CALLRELATION))
                                                                 (T (GETRELATION FROM CALLRELATION T)
                                                                    )) when (MSPATHS2 Y)
                                                       collect Y) when (SETQ X (BRPATHS1
                                                                                        X))
                                             collect (fetch (GRAPHNODE NODEID) of X)))
                              (RETURN ENTRY])

(BROWSER.LEFTFN
  [LAMBDA (NODE NWINDOW)                                     (* ; "Edited 31-Mar-87 11:16 by jop")
                                                             (* ; 
                                                 "function that is applied upon selection of a node.")
    (COND
       ((NULL NODE))
       ((EQ (fetch NODELABEL of NODE)
            (WINDOWPROP (GET.BROWSE.PP.WINDOW)
                   'FNBROWSED))
        (BROWSERDESCRIBE (fetch NODELABEL of NODE)
               (GET.BROWSE.DESCRIBE.WINDOW)))
       (T                                                    (* ; 
                                                            "if first time touched, pretty print it.")
          (BROWSEPP (fetch NODELABEL of NODE)
                 (GET.BROWSE.PP.WINDOW])

(GET.BROWSE.PP.WINDOW
  [LAMBDA NIL                                                (* ; "Edited 31-Mar-87 11:23 by jop")
                                                             (* ; 
                                           "returns the window for pretty printing from the browser.")
    (COND
       ((WINDOWP PFWINDOW)
        PFWINDOW)
       (T (SETQ PFWINDOW (CREATEW NIL "Browser print out window"))
          (WINDOWPROP PFWINDOW 'REPAINTFN 'PPREPAINTFN)
          (WINDOWPROP PFWINDOW 'REPAINTFN 'PPREPAINTFN)
          (WINDOWPROP PFWINDOW 'RESHAPEFN 'PPRESHAPEFN)
          (WINDOWPROP PFWINDOW 'SCROLLFN 'SCROLLBYREPAINTFN)
          PFWINDOW])

(GET.BROWSE.DESCRIBE.WINDOW
  [LAMBDA NIL                                                (* ; "Edited 31-Mar-87 11:23 by jop")
                                                             (* ; 
                                           "returns the window for describe action from the browser.")
    (COND
       ((WINDOWP BROWSER.DESCRIBE.WINDOW)
        BROWSER.DESCRIBE.WINDOW)
       (T (SETQ BROWSER.DESCRIBE.WINDOW (CREATEW NIL "Browser describe window"))
          (WINDOWPROP BROWSER.DESCRIBE.WINDOW 'REPAINTFN 'DESCRIBEREPAINTFN)
          (WINDOWPROP BROWSER.DESCRIBE.WINDOW 'RESHAPEFN 'DESCRIBEREPAINTFN)
          (WINDOWPROP BROWSER.DESCRIBE.WINDOW 'SCROLLFN 'SCROLLBYREPAINTFN)
          BROWSER.DESCRIBE.WINDOW])

(BROWSEPP
  [LAMBDA (FN WINDOW)                                        (* ; "Edited 31-Mar-87 11:16 by jop")
    (DECLARE (GLOBALVARS BrowserPPWindowWidth))
    (PROG (WIDTH BOTTOM)
          (WINDOWPROP WINDOW 'FNBROWSED FN)
          (CLEARW WINDOW)
          (MOVETOUPPERLEFT WINDOW)
          (WINDOWPROP WINDOW 'EXTENT NIL)
          (SETQ WIDTH (PPREPAINTFN WINDOW))                  (* ; "set the extent of the window.")
          (WINDOWPROP WINDOW 'EXTENT (create REGION
                                            LEFT _ 0
                                            BOTTOM _ (SETQ BOTTOM (DSPYPOSITION NIL WINDOW))
                                            WIDTH _ WIDTH
                                            HEIGHT _ (IDIFFERENCE (WINDOWPROP WINDOW 'HEIGHT)
                                                            BOTTOM])

(PPREPAINTFN
  [LAMBDA (WINDOW REGION RESHAPE)                       (* ; "Edited 11-Jun-90 14:11 by mitani")

    (* ;; "repaints the browser pp window WINDOW.  Returns the width of the image so that caller can set the EXTENT.")

    (PROG ((FN (WINDOWPROP WINDOW 'FNBROWSED))
           (EXTENT (WINDOWPROP WINDOW 'EXTENT))
           DEF FNTYPE)
          (RETURN (COND
                     (FN (printout WINDOW .FONT LAMBDAFONT)
                         (MOVETOUPPERLEFT WINDOW EXTENT)
                         (printout WINDOW .FONT DEFAULTFONT)
                         (COND
                            ((for FPTYPE in MSFNTYPES
                                when (SETQ DEF (GETDEF FN (ffetch (MSANALYZABLE FILEPKGNAME)
                                                                 of FPTYPE)
                                                          NIL
                                                          'NOERROR))
                                do (SETQ FNTYPE (ffetch (MSANALYZABLE FILEPKGNAME)
                                                       of FPTYPE))
                                      (RETURN DEF) finally NIL)
                                                             (* ; 
                                                           "set up linelength characteristics.")
                             (RESETLST
                                 (RESETSAVE (OUTPUT WINDOW))
                                 (RESETSAVE (SETREADTABLE T))
                                 (RESETSAVE **COMMENT**FLG)
                                 (if (EQ FNTYPE 'FNS)
                                     then (printout WINDOW "(" .FONT LAMBDAFONT |.P2| FN .FONT 
                                                     DEFAULTFONT T))
                                 (DSPRIGHTMARGIN (fetch (REGION RIGHT) of (DSPCLIPPINGREGION
                                                                                   NIL WINDOW))
                                        WINDOW)
                                 (PRINTDEF DEF (AND (EQ FNTYPE 'FNS)
                                                    2)
                                        'FNS)
                                 (if (EQ FNTYPE 'FNS)
                                     then (PRIN1 ")" WINDOW)))
                             (fetch (REGION WIDTH) of (DSPCLIPPINGREGION NIL WINDOW)))
                            (T                               (* ; 
                                                           "set right margin out so wouldn't clip.")
                               (DSPRIGHTMARGIN 5000 WINDOW)
                               (APPLY* (FUNCTION PF*)
                                      FN NIL (GETSTREAM WINDOW))
                               (DSPRIGHTMARGIN (fetch (REGION RIGHT) of (DSPCLIPPINGREGION
                                                                                 NIL WINDOW))
                                      WINDOW)
                               BrowserPPWindowWidth)))
                     (T 0])

(PPRESHAPEFN
  [LAMBDA (WINDOW)                                           (* lmm "20-Jul-84 15:48")
    (BROWSEPP (WINDOWPROP WINDOW 'FNBROWSED)
           WINDOW])

(DESCRIBEREPAINTFN
  [LAMBDA (WIN REG)                                          (* ; "Edited 31-Mar-87 11:24 by jop")
                                                             (* ; 
                                                        "reprints the contents of a describe window.")
    (PROG [(FN (WINDOWPROP WIN 'FNBROWSED))
           (EXTENT (WINDOWPROP WIN 'EXTENT]
          (COND
             (FN (RESETLST (RESETSAVE MSPRINTFLG NIL)
                        (RESETSAVE (OUTPUT WIN))
                        (DSPSCROLL 'OFF WIN)
                        (COND
                           (EXTENT (MOVETOUPPERLEFT WIN EXTENT)))
                        (MSDESCRIBE FN])

(BROWSERDESCRIBE
  [LAMBDA (FN WIN)                                           (* ; "Edited 31-Mar-87 11:15 by jop")
          
          (* ;; "puts the masterscope DESCRIBE information in the window DS.  Keeps tracks of which fn so if it changes the window can be updated.")

    (WINDOWPROP WIN 'FNBROWSED FN)
    (CLEARW WIN)
    (DESCRIBEREPAINTFN WIN)
    (WINDOWPROP WIN 'EXTENT (create REGION
                                   LEFT _ 0
                                   BOTTOM _ (DSPYPOSITION NIL WIN)
                                   WIDTH _ (WINDOWPROP WIN 'WIDTH)
                                   HEIGHT _ (IDIFFERENCE (WINDOWPROP WIN 'HEIGHT)
                                                   (DSPYPOSITION NIL WIN])

(BROWSER.MIDDLEFN
  [LAMBDA (NODE NWINDOW)                                 (* ; "Edited 25-Mar-94 13:25 by jds")
                                                             (* ; 
                 "called when yellow selection from browser.  Call display editor on the function.")
    (COND
       ((NULL NODE))
       [(THIS.PROCESS)                                       (* ; "processes are running.")
        (SELECTQ (EDITMODE)
            (DEDIT [COND
                      ((DEDITPROCESSRUNNINGP)
                       (printout PROMPTWINDOW T T "Dedit can't run in two processes at once, yet." T
                              "You can call Dedit in the same process by typing "
                              (fetch NODELABEL of NODE)
                              " " "into the Dedit " "window then selecting 'Edit'."))
                      (T (ADD.PROCESS `(ED ',(fetch NODELABEL of NODE])
            ((SEDIT SEDIT:SEDIT)                             (* ; 
                                                     "SEdit doesn't have to worry about this stuff")
                 (ED (fetch NODELABEL of NODE)
                     ':DONTWAIT))
            (ED (fetch NODELABEL of NODE]
       (T (ED (fetch NODELABEL of NODE])

(DEDITPROCESSRUNNINGP
  [LAMBDA NIL                                                (* ; "Edited 31-Mar-87 11:27 by jop")
          
          (* ;; "is there a dedit process running?")

    (AND (EQ (EDITMODE)
             'DEDIT)
         \DEDITWINDOWS])

(REDRAWBROWSEGRAPH
  [LAMBDA (WINDOW)                                           (* DECLARATIONS%: (RECORDS BROWSEWIN))
                                                             (* ; "Edited 31-Mar-87 11:24 by jop")
    (PROG [(WN (find X in BROWSERWINDOWS suchthat (EQ (fetch (BROWSEWIN WINDOW)
                                                                     of X)
                                                                  WINDOW]
          (AND WN (APPLY 'NUMSPATHS (fetch (BROWSEWIN ARGS) of WN)))
                                                             (* ; "(OR WN (SHOULDNT))")
          (WINDOWPROP WINDOW 'BUTTONEVENTFN (FUNCTION APPLYTOSELECTEDNODE))
          (APPLYTOSELECTEDNODE WINDOW])

(STBROWSER
  [LAMBDA (GRAPH ARGS)                                       (* DECLARATIONS%: (RECORDS BROWSEWIN))
                                                             (* ; "Edited 31-Mar-87 11:18 by jop")

    (* ;; "puts a browser graph for the args FROMFN in a window.  If a similar graph is already a window, that window is reused;  otherwise a new window is created.")

    (WINDOWADDPROP (bind TMP for W in BROWSERWINDOWS
                      when (EQUAL (fetch (PATHSARGS DISCRIMINANT) of ARGS)
                                      (fetch (PATHSARGS DISCRIMINANT) of (fetch
                                                                                  (BROWSEWIN ARGS)
                                                                                    of W)))
                      do (replace (BROWSEWIN ARGS) of W with ARGS)
                            (replace (BROWSEWIN GRAPH) of W with GRAPH)
                            (SHOWGRAPH GRAPH (SETQ W (fetch (BROWSEWIN WINDOW) of W))
                                   (FUNCTION BROWSER.LEFTFN)
                                   (FUNCTION BROWSER.MIDDLEFN))
                            (RETURN W)
                      finally (SETQ W (SHOWGRAPH GRAPH (CONCAT "PATHS"
                                                                  (COND
                                                                     ((SETQ TMP (fetch
                                                                                 (PATHSARGS FROM)
                                                                                   of ARGS))
                                                             (* ; 
                          "CADDDR here gets the thing that looks like it might be a function name.")
                                                                      (CONCAT (COND
                                                                                 ((CADR (CADR TMP))
                                                                                  " FROM ")
                                                                                 (T " TO "))
                                                                             (CADDDR TMP)))
                                                                     (T ""))
                                                                  (COND
                                                                     ((SETQ TMP (fetch
                                                                                 (PATHSARGS TO)
                                                                                   of ARGS))
                                                             (* ; 
                          "CADDDR here gets the thing that looks like it might be a function name.")
                                                                      (CONCAT (COND
                                                                                 ((CADR (CADR TMP))
                                                                                  " FROM ")
                                                                                 (T " TO "))
                                                                             (CADDDR TMP)))
                                                                     (T "")))
                                                 (FUNCTION BROWSER.LEFTFN)
                                                 (FUNCTION BROWSER.MIDDLEFN)))
                            (push BROWSERWINDOWS
                                   (create BROWSEWIN
                                          ARGS _ ARGS
                                          GRAPH _ GRAPH
                                          WINDOW _ W))
                            (RETURN W))
           'CLOSEFN
           (FUNCTION (LAMBDA (WINDOW)                        (* ; 
                        "The closing function for browser windows.  removes it from BROWSERWINDOWS")
                       (SETQ BROWSERWINDOWS (DREMOVE (for X in BROWSERWINDOWS
                                                        when (EQ (fetch (BROWSEWIN WINDOW)
                                                                        of X)
                                                                     WINDOW)
                                                        do (RETURN X))
                                                   BROWSERWINDOWS])
)
(DECLARE%: DONTCOPY 
(DECLARE%: EVAL@COMPILE 

[PUTDEF 'BROWSEHASH 'RESOURCES '(NEW (LIST (HARRAY 30]
)
)

(/SETTOPVAL '\BROWSEHASH.GLOBALRESOURCE NIL)
(DECLARE%: DONTCOPY 
(DECLARE%: EVAL@COMPILE

(RECORD BROWSEWIN (ARGS GRAPH WINDOW))

(RECORD PATHSARGS (FROM TO . ETC)
                      [ACCESSFNS PATHSARGS ((DISCRIMINANT (CONS (fetch (PATHSARGS FROM)
                                                                   of DATUM)
                                                                (fetch (PATHSARGS TO)
                                                                   of DATUM])
)
)

(RPAQQ BROWSERBOXING NIL)

(RPAQQ BROWSERFORMAT NIL)

(RPAQQ BROWSERWINDOWS NIL)

(RPAQQ NODESELECTIONWINDOW NIL)

(RPAQQ PFWINDOW NIL)

(RPAQQ BROWSER.DESCRIBE.WINDOW NIL)

(RPAQQ BrowserPPWindowWidth 750)

(RPAQQ BROWSERFONT (GACHA 8))

(MOVD? 'MSPATHS 'OLDMSPATHS)

[PROG [(WC (FILEPKGTYPE 'FNS 'WHENCHANGED]
      (OR (MEMB 'BROWSER.WHENFNSCHANGED WC)
          (FILEPKGTYPE 'FNS 'WHENCHANGED (CONS 'BROWSER.WHENFNSCHANGED WC]
(DECLARE%: DONTEVAL@LOAD DOCOPY 

(SELECTQ (SYSTEMTYPE)
    (D (BROWSER T))
    NIL)
)
(PUTPROPS BROWSER COPYRIGHT ("Venue & Xerox Corporation" 1983 1984 1987 1988 1990 1993 1994))
(DECLARE%: DONTCOPY
  (FILEMAP (NIL (1952 24987 (NUMSPATHS 1962 . 5228) (BROWSER 5230 . 5493) (BROWSER.WHENFNSCHANGED 5495
 . 7794) (BRPATHS1 7796 . 10062) (BROWSER.LEFTFN 10064 . 10922) (GET.BROWSE.PP.WINDOW 10924 . 11606) (
GET.BROWSE.DESCRIBE.WINDOW 11608 . 12356) (BROWSEPP 12358 . 13232) (PPREPAINTFN 13234 . 16368) (
PPRESHAPEFN 16370 . 16550) (DESCRIBEREPAINTFN 16552 . 17248) (BROWSERDESCRIBE 17250 . 18008) (
BROWSER.MIDDLEFN 18010 . 19317) (DEDITPROCESSRUNNINGP 19319 . 19590) (REDRAWBROWSEGRAPH 19592 . 20355)
 (STBROWSER 20357 . 24985)))))
STOP
