/dup_dict growabledict def /dup_cnt 0 def /mark_obj_saved { % any -- dup_dict exch dup_cnt dup /dup_cnt exch 1 add store put } def /obj_saved_before { % filetype any -- boolean dup_dict 1 index known { 1 index dup_dict 3 -1 roll get writeobject ( #g) writestring true } { pop pop false } ifelse } def /save_shared_class { % filetype shared_class -- 2 copy obj_saved_before not { dup mark_obj_saved 2 copy /pdb_script get save_obj 1 index 32 write 2 copy /ps_script get save_obj 1 index 32 write 1 index exch /superclass get /classname get save_obj ( SC) writestring } { pop pop } ifelse } def /save_obj { % filetype any -- dup truedicttype save_obj$SwiTch0 exch 2 copy known not { pop /$deFaUlT } if get exec } def /save_obj$SwiTch0 16 dict dup begin /$deFaUlT { pop (null) writestring } def /hntype { 2 copy obj_saved_before not { 1 index /class 2 index send save_shared_class 1 index ( BO\n) writestring dup mark_obj_saved dup /persistent exch send { exch 2 copy exch known { 2 index 2 index save_obj 2 index 32 write 2 index 1 index 4 -1 roll get save_obj 1 index ( def\n) writestring } { exch pop } ifelse } forall pop (EO) writestring } { pop pop } ifelse } def /dicttype { 2 copy obj_saved_before not { dup mark_obj_saved 2 copy maxlength writeobject 1 index ( Bd\n) writestring { 2 index 3 -1 roll save_obj 1 index 32 write 1 index exch save_obj dup ( def\n) writestring } forall ( Ed\n) writestring } { pop pop } ifelse } def /fonttype { dup /FontMatrix get exch 2 index 1 index /FontName get save_obj 2 index ( findfont ) writestring 1 index 0 get 2 index 3 get eq { 1 index 1 get 0 eq } false ifelse { 1 index 2 get 0 eq } false ifelse { 1 index 4 get 0 eq } false ifelse { 1 index 5 get 0 eq } false ifelse { 2 index 3 -1 roll 0 get save_obj 1 index ( scalefont ) } { 2 index 3 -1 roll save_obj 1 index ( makefont ) } ifelse writestring 1 index exch /PrinterMatched get save_obj ( printermatchfont) writestring } def /colortype { colorrgb 3 array astore 2 copy 0 get save_obj 1 index 32 write 2 copy 1 get save_obj 1 index 32 write 1 index exch 2 get save_obj ( rgbcolor) writestring } def /operatortype { 64 string cvs dup length 3 -2 roll 1 4 -1 roll 2 sub getinterval writestring } def /arraytype { dup length dup 0 ne { 6 eq { dup 0 get 1 eq } false ifelse { dup 1 get 0 eq } false ifelse { dup 2 get 0 eq } false ifelse { dup 3 get 1 eq } false ifelse { 2 copy 4 get save_obj 1 index 32 write 1 index exch 5 get save_obj ( MX) } { 2 copy xcheck ({) ([) ifelse writestring dup 0 exch { exch 3 index 3 -1 roll save_obj dup 1 add exch 4 lt { 2 index 32 write } { pop 0 2 index (\n) writestring } ifelse } forall pop xcheck (}\n) (]\n) ifelse } } { pop xcheck ({}) (//nullarray) } ifelse ifelse writestring } def /packedarraytype currentdict /arraytype get def /stringtype { dup length dup 60 gt { pop 1 index (\() writestring 0 exch { lit_char exch 2 index 2 index writestring exch length add dup 50 gt { pop dup (\\\n) writestring 0 } if } forall pop (\)) writestring } { 0 ne {writeobject} { pop (//nullstring) writestring } ifelse } ifelse } def /nametype { dup name_ok {writeobject} { 1 index exch cvns save_obj ( cvn) writestring } ifelse } def /marktype { pop ([) writestring } def /nulltype {writeobject} def /booleantype currentdict /nulltype get def /integertype currentdict /booleantype get def /realtype { exch 1 index cvi 2 index eq { exch cvi } {exch} ifelse writeobject } def /fixedtype currentdict /realtype get def end def /save_object { % filetype any -- 1 index (% HyperNeWS window \(c\)1990 Turing Institute\n) writestring 1 index (2.001 HNBegin\n) writestring /dup_cnt 0 store 1 index exch save_obj dup_dict cleanoutdict (\nHNEnd\n) writestring } def