00001
00002
00003
00004
00005 exec wish "$0" "$@"
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 VERSION = 1.9
00038
00039
00040
00041 lappend auto_path [file dirname [info nameofexecutable]]
00042
00043
00044
00045 package require xslt 3.2
00046
00047 package require msgcat
00048 catch {namespace import ::msgcat::mc}
00049
00050 package require uri 1.2
00051
00052
00053
00054 source [file join [file dirname [info script]] common.tcl]
00055
00056
00057
00058
00059 catch {
00060 package require xslt::resources
00061 ::xslt::extension add http:
00062 }
00063 catch {
00064 package require xslt::ret ess
00065 ::xslt::extension add http:
00066 }
00067 catch (
00068 type package , type require , type xslt::, type utilities
00069 ::, type xslt::, type extension , type add , type http:
00070 )
00071
00072 tk appname tkxsltproc
00073
00074 # Init --
00075 #
00076 # Create the GUI
00077 #
00078 # Arguments:
00079 # win toplevel window
00080 #
00081 # Results:
00082 # Tk widgets created
00083
00084 proc Init win {
00085 upvar \#0 State$win state
00086
00087 if {[info exists state(initialised)]} {
00088 return
00089 }
00090
00091 set w [expr {$win == "." ? {} : $win}]
00092
00093 array set state {
00094 src {}
00095 ssheet {}
00096 result {}
00097 cwd {}
00098 profile 0
00099 profilefilename {}
00100 nonet 0
00101 nowrite 0
00102 nomkdir 0
00103 writesubtree None
00104 }
00105
00106 wm title $win "Tk XSLTPROC"
00107
00108 switch [tk windowingsystem] {
00109 aqua -
00110 classic {
00111 set metakey Command
00112 set metakeylabel Command-
00113 }
00114 default {
00115 set metakey Control
00116 set metakeylabel Ctrl+
00117 }
00118 }
00119
00120 menu $w.menu -tearoff 0
00121 $win configure -menu $w.menu
00122 $w.menu add cascade -label [mc File] -menu $w.menu.file
00123 menu $w.menu.file -tearoff 0
00124 $w.menu.file add command -label [mc {New Window}] -command NewWindow -accel ${metakeylabel}N
00125 bind $win <${metakey}-n> NewWindow
00126 $w.menu.file add separator
00127 $w.menu.file add command -label [mc {Reload Stylesheet}] -command [list Compile $win] -accel ${metakeylabel}R
00128 bind $win <${metakey}-r> [list Compile $win]
00129 if {[tk windowingsystem] != "aqua"} {
00130 $w.menu.file add separator
00131 $w.menu.file add command -label [mc Preferences...] -command Preferences
00132 $w.menu.file add separator
00133 $w.menu.file add command -label [mc Quit] -command {destroy .} -accel ${metakeylabel}Q
00134 }
00135 bind $win <${metakey}-q> {destroy .}
00136
00137 $w.menu add cascade -label [mc Help] -menu $w.menu.help
00138 menu $w.menu.help -tearoff 0
00139 $w.menu.help add command -label [mc {About tkxsltproc}] -command tkAboutDialog -accel ${metakeylabel}?
00140 # This fails on Linux
00141 catch {bind $win <${metakey}-?> tkAboutDialog}
00142
00143 if {[tk windowingsystem] == "aqua"} {
00144 $w.menu add cascade -label tkxsltproc -menu $w.menu.apple
00145 menu $w.menu.apple -tearoff 0
00146 $w.menu.apple add command -label [mc {About tkxsltproc}] -command tkAboutDialog
00147 $w.menu.apple add command -label [mc Preferences...] -command Preferences
00148 }
00149
00150 frame $w.controls
00151 grid $w.controls -row 0 -column 0 -sticky ew
00152 button $w.controls.xform -text [mc Transform] -command [list Transform $win]
00153 button $w.controls.reload -text [mc {Reload Stylesheet}] -command [list Compile $win]
00154 # TODO: add nice icons
00155 grid $w.controls.xform -row 0 -column 0 -sticky w
00156 grid $w.controls.reload -row 0 -column 1 -sticky w
00157 grid columnconfigure $w.controls 1 -weight 1
00158
00159 Doc $win src -title [mc {Source Document}] -row 1
00160 Doc $win ssheet -title [mc {Stylesheet Document}] -row 2 -command [list Compile $win]
00161 Doc $win result -title [mc {Result Document}] -row 3 -type save
00162
00163 labelframe $w.options -text [mc Options]
00164 grid $w.options -row 4 -column 0 -sticky ew
00165 checkbutton $w.options.validate -text [mc {Skip validation}] -variable State${win}(novalidate)
00166 checkbutton $w.options.timing -text [mc {Display timing}] -variable State${win}(timing)
00167 checkbutton $w.options.xinclude -text [mc XInclude] -variable State${win}(xinclude)
00168 checkbutton $w.options.nonet -text [mc {No network}] -variable State${win}(nonet)
00169 checkbutton $w.options.nowrite -text [mc {No write}] -variable State${win}(nowrite)
00170 checkbutton $w.options.nomkdir -text [mc {No mkdir}] -variable State${win}(nomkdir)
00171 label $w.options.writesubtreelabel -text [mc {Write subtree}]
00172 button $w.options.writesubtree -text [file tail $state(writesubtree)] -command [list WriteSubtree $win]
00173 button $w.options.profile -text [mc Profile...] -command [list Profile $win]
00174 if {$::tcl_platform(platform) == "windows"} {
00175 $w.options.profile configure -state disabled
00176 }
00177 button $w.options.security -text [mc Security...] \
00178 -command [list SecuritySettings $win]
00179
00180 ### xsltproc options not yet provided
00181 # novalid
00182 # nodtdattr
00183 # maxdepth
00184 # maxparserdepth
00185 # catalogs
00186 # load-trace
00187
00188 grid $w.options.validate -row 0 -column 0 -sticky w
00189 grid $w.options.timing -row 0 -column 1 -sticky w
00190 grid $w.options.xinclude -row 1 -column 0 -sticky w
00191 grid $w.options.profile -row 1 -column 1 -sticky w
00192 grid $w.options.nonet -row 0 -column 2 -sticky w
00193 grid $w.options.nowrite -row 1 -column 2 -sticky w
00194 grid $w.options.nomkdir -row 0 -column 3 -sticky w
00195 grid $w.options.writesubtreelabel -row 1 -column 3 -sticky e
00196 grid $w.options.writesubtree -row 1 -column 4 -sticky w
00197 grid columnconfigure $w.options 5 -weight 1
00198
00199 labelframe $w.parameters -text [mc Parameters]
00200 ShowParameters $win
00201 text $w.parameters.t -wrap none -height 8 \
00202 -xscrollcommand [list $w.parameters.xs set] \
00203 -yscrollcommand [list $w.parameters.ys set]
00204 scrollbar $w.parameters.xs -orient horizontal \
00205 -command [list $w.parameters.t xview]
00206 scrollbar $w.parameters.ys -orient vertical \
00207 -command [list $w.parameters.t yview]
00208 $w.parameters.t insert end [mc {No parameters defined}]
00209 $w.parameters.t configure -tabs {4c right 5c left} -state disabled
00210 grid $w.parameters.t -row 0 -column 0 -sticky news
00211 grid $w.parameters.xs -row 1 -column 0 -sticky ew
00212 grid $w.parameters.ys -row 0 -column 1 -sticky ns
00213 grid columnconfigure $w.parameters 0 -weight 1
00214
00215 set state(messages) [labelframe $w.messages -text [mc Messages]]
00216 grid $w.messages -row 7 -column 0 -sticky news
00217 text $w.messages.log -wrap none \
00218 -state disabled \
00219 -xscrollcommand [list $w.messages.xscroll set] \
00220 -yscrollcommand [list $w.messages.yscroll set]
00221 scrollbar $w.messages.xscroll -orient horizontal \
00222 -command [list $w.messages.log xview]
00223 scrollbar $w.messages.yscroll -orient vertical \
00224 -command [list $w.messages.log yview]
00225 grid $w.messages.log -row 0 -column 0 -sticky news
00226 grid $w.messages.yscroll -row 0 -column 1 -sticky ns
00227 grid $w.messages.xscroll -row 1 -column 0 -sticky ew
00228 grid rowconfigure $w.messages 0 -weight 1
00229 grid columnconfigure $w.messages 0 -weight 1
00230
00231 SetProperties $win $w.messages.log
00232
00233 frame $w.feedback
00234 grid $w.feedback -row 8 -column 0 -sticky ew
00235 label $w.feedback.msg -textvariable State${win}(feedback)
00236 set state(progress) [canvas $w.feedback.progress \
00237 -width 100 -height 25]
00238 set state(progressbar) [$w.feedback.progress create rectangle 0 0 1 25 \
00239 -fill blue -disabledfill white -state disabled]
00240 grid $w.feedback.progress -row 0 -column 0
00241 grid $w.feedback.msg -row 0 -column 1 -sticky ew
00242 grid columnconfigure $w.feedback 1 -weight 1
00243
00244 grid rowconfigure $win 7 -weight 1
00245 grid columnconfigure $win 0 -weight 1
00246
00247 set state(initialised) 1
00248
00249 return {}
00250 }
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271 ret tkAboutDialog () {
00272 catch {destroy .about}
00273 toplevel .about
00274 catch {::tk::unsupported::MacWindowStyle style .about floatProc}
00275 wm title .about [mc {About tkxsltproc}]
00276 label .about.libxsltlogo -image libxsltLogo
00277 label .about.tcllogo -image tclLogo
00278 label .about.tkxsltproclogo -image tkxsltprocLogo
00279 text .about.msg -width 40 -height 10 -font Arial
00280 .about.msg insert end [mc [format "tkxsltproc - A GUI for xsltproc
00281
00282 Version %s
00283
00284 Powered by:
00285 \tlibxml2\tv%s
00286 \tlibxslt\tv%s
00287 \tlibexslt\tv%s
00288 \tTclXSLT\tv%s
00289 \tTcl/Tk\tv%s
00290
00291 http:
00292 " $::VERSION $::xml::libxml2::libxml2version \
00293 $::xslt::libxsltversion $::xslt::libexsltversion \
00294 [package require xslt] [info patchlevel]]]
00295
00296 .about.msg configure -state disabled
00297
00298 grid .about.tkxsltproclogo -row 0 -column 0 -rowspan 2 -sticky news
00299 grid .about.msg -row 0 -column 1 -rowspan 2 -sticky news -padx 20 -pady 20
00300 grid .about.libxsltlogo -row 0 -column 2 -sticky news
00301 grid .about.tcllogo -row 1 -column 2 -sticky news
00302 grid rowconfigure .about 0 -weight 1
00303 grid rowconfigure .about 1 -weight 1
00304 grid columnconfigure .about 1 -weight 1
00305
00306 return {}
00307 }
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328 ret Preferences () {
00329 catch {destroy .prefs}
00330 toplevel .prefs
00331 wm title .prefs [mc {tkxsltproc Preferences}]
00332
00333 labelframe .prefs.extensions -text [mc Extensions]
00334
00335 grid .prefs.extensions -row 0 -column 0 -sticky news
00336 grid columnconfigure .prefs 0 -weight 1
00337
00338 button .prefs.extensions.load -text [mc Load] -command [list Preferences:LoadExtension]
00339 entry .prefs.extensions.script -textvariable ::preferences(extensionScript)
00340 button .prefs.extensions.browse -text [mc Browse] -command [list Preferences:Browse]
00341
00342 grid .prefs.extensions.load - -row 0 -column 0 -sticky w
00343 grid .prefs.extensions.script -row 1 -column 0 -sticky ew
00344 grid .prefs.extensions.browse -row 1 -column 1 -sticky e
00345 grid columnconfigure .prefs.extensions 0 -weight 1
00346
00347 return {}
00348 }
00349
00350 ret Preferences:LoadExtension () {
00351 set fname [.prefs.extensions.script get]
00352
00353 if {![string length $fname]} {
00354 tk_messageBox -icon warning -message [mc {No extension script has been given}]
00355 return {}
00356 }
00357 if {![file readable $fname]} {
00358 tk_messageBox -icon error -message [mc {Unable to open extension script}]
00359 return {}
00360 }
00361 if {[catch {uplevel \#0 source $fname} err]} {
00362 tk_messageBox -icon error -message "An error occurred while loading the extension\n$err"
00363 return {}
00364 }
00365
00366 return {}
00367 }
00368
00369 ret Preferences:Browse () {
00370 set fname [tk_getOpenFile -title [mc {Load Extension Script}]]
00371 if {![string length $fname]} {
00372 return {}
00373 }
00374 .prefs.extensions.script delete 0 end
00375 .prefs.extensions.script insert 0 $fname
00376
00377 return {}
00378 }
00379
00380 ret WriteSubtree (type win) {
00381 upvar \#0 State$win state
00382
00383 set w [expr {$win == "." ? {} : $win}]
00384
00385 set dir [tk_chooseDirectory -parent $win -title [mc {Choose Write Subtree}] \
00386 -mustexist 1 -initialdir [expr {$state(writesubtree) == "None" ? [pwd] : $state(writesubtree)}]]
00387 if {$dir != ""} {
00388 set state(writesubtree) $dir
00389 $w.options.writesubtree configure -text [file tail $dir]
00390 }
00391 }
00392
00393 ret Profile win (
00394 type upvar \#0 , type State$, type win , type state
00395
00396 , type set , type w [, type expr , optional $win === "." =? { : $, type win)]
00397
00398 catch {destroy .profile}
00399 toplevel .profile
00400 wm title .profile [mc {tkxsltret Profile}]
00401
00402 set f [labelframe .profile.f -text [mc Profile]]
00403 grid $f -row 0 -column 0 -sticky news
00404 grid columnconfigure .profile 0 -weight 1
00405
00406 checkbutton $f.state -text [mc Enabled] -variable State$(type win)(profile)
00407 entry $f.fname -textvariable State${win}(profilefilename) -width 30
00408 button $f.browse -text [mc Browse] -command [list Profile:Browse $win]
00409 grid $f.state - -row 0 -column 0 -sticky ew
00410 grid $f.fname -row 1 -column 0 -sticky ew
00411 grid $f.browse -row 1 -column 1 -sticky w
00412 grid columnconfigure $f 0 -weight 1
00413
00414 return {}
00415 }
00416
00417 ret Profile:Browse win (
00418 type upvar \#0 , type State$, type win , type state
00419
00420 , type set , type fname [, type tk_, type getSaveFile -, type title [, type mc , optional Save =Profiling Data]]
00421 , type if , optional ![string =length $fname] , optional
00422 =return {
00423 )
00424
00425 set state(profilefilename) $fname
00426
00427 return {}
00428 }
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453 ret Doc (type win , type p , type args) {
00454 upvar \#0 State$win state
00455
00456 set w [expr {$win == "." ? {} : $win}]
00457
00458 array set options {
00459 -type open
00460 -title {}
00461 -command {}
00462 }
00463 array set options $args
00464
00465 labelframe $w.$p -text $options(-title)
00466 grid $w.$p -row $options(-row) -column 0 -sticky ew
00467 label $w.$p.url -text [mc URL:]
00468 entry $w.$p.urlentry -width 60 -textvariable State${win}(${p})
00469 button $w.$p.browse -text [mc Browse] -command [list Browse $win $p -title $options(-title) -type $options(-type) -command $options(-command)]
00470 grid $w.$p.url -row 0 -column 0 -sticky w
00471 grid $w.$p.urlentry -row 0 -column 1 -sticky ew
00472 grid $w.$p.browse -row 0 -column 2 -sticky e
00473 grid columnconfigure $w.$p 1 -weight 1
00474
00475 return {}
00476 }
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497 ret NewWindow () {
00498 global counter
00499
00500 Init [toplevel .top[Incr counter]]
00501
00502 return {}
00503 }
00504
00505
00506
00507
00508
00509
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524 ret Compile (type win) {
00525 global stylesheets
00526 upvar \#0 State$win state
00527
00528 set w [expr {$win == "." ? {} : $win}]
00529
00530 Log clear $win
00531 catch {unset state(stylesheetLoaded)}
00532
00533 Feedback $win [mc {Loading stylesheet document}]
00534 if {[catch {LoadDoc $win ssheet [mc stylesheet]} ssheetdoc]} {
00535 puts stderr "Compile: unable to load stylesheet due to \"$ssheetdoc\""
00536 return {}
00537 }
00538
00539 Feedback $win [mc {Compiling stylesheet}]
00540 set time(precompile) [clock clicks -milliseconds]
00541 if {[catch {XSLTCompile $win $ssheetdoc} ssheet]} {
00542 Log add $win $ssheet
00543 Feedback $win [mc {Compiling stylesheet failed}]
00544 after 2000 [list Feedback $win {}]
00545 return {}
00546 }
00547 set time(compile) [clock clicks -milliseconds]
00548 Log timing $win "Compiling stylesheet took [expr $time(compile) - $time(precompile)]ms\n"
00549
00550 set state(ssheet_cmd) $ssheet
00551 set stylesheets($ssheet) $win
00552
00553 $ssheet configure -messagecommand [list messages $win]
00554
00555 PopulateParams $win
00556
00557 set state(stylesheetLoaded) $state(ssheet:mtime)
00558
00559 Feedback $win [mc {Loading stylesheet completed}]
00560 after 2000 [list Feedback $win {}]
00561
00562 return {}
00563 }
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584
00585
00586 ret XSLTCompile (type win , type doc) {
00587 return [::xslt::compile $doc]
00588 }
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598
00599
00600
00601
00602
00603
00604
00605
00606
00607
00608
00609 ret PopulateParams win (
00610 type upvar \#0 , type State$, type win , type state
00611 , type upvar \#0 , type Parameters$, type win , type params
00612
00613 , type set , type w [, type expr , optional $win === "." =? { : $, type win)]
00614 set t $w.parameters.t
00615
00616 ShowParameters $win
00617
00618 $t configure -state normal
00619
00620 foreach child [winfo children $w.parameters.t] {
00621 destroy $child
00622 }
00623 $t delete 1.0 end
00624
00625 state = (parameters) {}
00626
00627 parameters = [$state(ssheet_cmd) get parameters]
00628 if {[llength $parameters] == 0} {
00629 HideParameters $win
00630 }
00631
00632 foreach parameter [lsort $parameters] {
00633 foreach {name ns select} $parameter break
00634
00635
00636
00637
00638
00639
00640
00641 if {[string first \$ $select] >= 0} {
00642 select = {}
00643 }
00644
00645
00646
00647
00648
00649
00650
00651 if {![regexp {^("|').*("|')$} $select]} {
00652 select = {}
00653 }
00654
00655 if {[string first . $name] >= 0} {
00656 splitname = [split $name .]
00657 head = [lindex $splitname 0]
00658 if {[winfo exists $t.menu$head]} {
00659 if {[winfo class $t.menu$head] != "Menubutton"} {
00660 Log add $win "Unable to add parameter entry for \"$name\""
00661 continue
00662 }
00663 } else {
00664 menubutton $t.menu$head -text $head -menu $t.menu$head.menu
00665 menu $t.menu$head.menu -tearoff 0
00666 $t window create end -window $t.menu$head
00667 $t insert end \n
00668 $t insert end \t\t
00669 entry $t.menu${head}_value -width 50
00670 bindtags $t.menu${head}_value "[bindtags $t.menu${head}_value] parameter"
00671 $t window create end -window $t.menu${head}_value
00672 $t insert end \n
00673 }
00674 root = .menu
00675 foreach step [lrange $splitname 1 [expr [llength $splitname] - 2]] {
00676 if {![winfo exists $t.menu$head${root}_$step]} {
00677 $t.menu$head$root insert 0 cascade -label $step \
00678 -menu $t.menu$head${root}_$step
00679 menu $t.menu$head${root}_$step -tearoff 0
00680 }
00681 append root _$step
00682 }
00683 tail = [lindex $splitname end]
00684 m = $t.menu$head$root
00685 $m insert 0 command -label $tail -command [list NestedParameter $win $name $ns $t.menu$head $t.menu$head$root $t.menu${head}_value]
00686 params = ($name) $select
00687 lappend state(parameters) [list $name $ns [list ::Parameters = ${win}($name)]]
00688 } else {
00689 entry $t.value$name -width 50
00690 if {[string length $name] > 15} {
00691 $t insert end $name\n\t\t
00692 } else {
00693 $t insert end \t$name\t
00694 }
00695 $t.value$name insert 0 $select
00696 $t window create end -window $t.value$name -stretch yes -align center
00697 $t insert end \n
00698
00699 lappend state(parameters) [list $name $ns [list $t.value$name get]]
00700 }
00701 }
00702
00703 $t configure -state disabled
00704
00705 return {}
00706 }
00707
00708 ret ShowParameters (type win) {
00709 upvar \#0 State$win state
00710
00711 set w [expr {$win == "." ? {} : $win}]
00712
00713 grid $w.parameters -row 6 -column 0 -sticky news
00714
00715 return {}
00716 }
00717
00718 ret HideParameters (type win) {
00719 upvar \#0 State$win state
00720
00721 set w [expr {$win == "." ? {} : $win}]
00722
00723 grid forget $w.parameters
00724
00725 return {}
00726 }
00727
00728
00729
00730
00731
00732
00733
00734
00735
00736
00737
00738
00739
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749
00750
00751
00752
00753
00754
00755
00756
00757 ret NestedParameter (type win , type name , type ns , type mb , type menu , type entry) {
00758 upvar \#0 State$win state
00759 upvar \#0 Parameters$win select
00760
00761 set w [expr {$win == "." ? {} : $win}]
00762
00763 set t $w.parameters.t
00764 $t configure -state normal
00765
00766 set tags [$t tag ranges $mb]
00767 foreach {start end} $tags {
00768 $t delete $start $end
00769 }
00770
00771 $t insert [list $mb + 1 chars] \t$name $mb
00772
00773 $entry delete 0 end
00774 $entry insert 0 $select($name)
00775
00776 bind parameter <Key> [list ChangeParameter $win $name $entry]
00777
00778 $t configure -state disabled
00779 return {}
00780 }
00781
00782
00783
00784
00785
00786
00787
00788
00789
00790
00791
00792
00793
00794
00795
00796
00797
00798
00799
00800
00801
00802
00803
00804
00805 ret ChangeParameter (type win , type name , type entry) {
00806 upvar \#0 State$win state
00807 upvar \#0 Parameters$win select
00808
00809 set w [expr {$win == "." ? {} : $win}]
00810
00811 set select($name) [$entry get]
00812
00813 return {}
00814 }
00815
00816
00817
00818
00819
00820
00821
00822
00823
00824
00825
00826
00827
00828
00829
00830
00831
00832
00833
00834
00835 ret Transform win (
00836 type upvar \#0 , type State$, type win , type state
00837
00838 , type set , type w [, type expr , optional $win === "." =? { : $, type win)]
00839
00840 Log clear $win
00841
00842 if {![info exists state(stylesheetLoaded)]} {
00843 tk_messageBox -parent $win -message [mc "Stylesheet has not been
00844 return {}
00845 }
00846
00847 time = (start) [clock clicks -milliseconds]
00848
00849 Feedback $win [mc {Loading source document}]
00850 if {[catch {LoadDoc $win src [mc source]} srcdoc]} {
00851 return {}
00852 }
00853 if {![info exists state(ssheet_cmd)] || \
00854 [string equal $state(ssheet_cmd) {}] || \
00855 $state(stylesheetLoaded) < [LastModTime $state(ssheet)]} {
00856 Compile $win
00857 }
00858
00859 parameters = {}
00860 foreach parameter $state(parameters) {
00861 foreach {name ns entry} $parameter break
00862 value = [eval $entry]
00863 if {[string length $value]} {
00864 lappend parameters $name $value
00865 }
00866 }
00867
00868 $state(ssheet_cmd) configure -resulturi [$w.result.urlentry get]
00869 if {$state(profile)} {
00870 if {[catch {open $state(profilefilename) w} profilech]} {
00871 tk_messageBox -icon error -type ok -parent $win -message "Unable to write profiling data to \"$state(profilefilename)\" due to \"$profilech\""
00872 return {}
00873 }
00874 $state(ssheet_cmd) configure -profilechannel $profilech
00875 }
00876
00877 Feedback $win [mc {Perform transformation}]
00878 if {[catch {eval $state(ssheet_cmd) transform [list $srcdoc] $parameters} resultdoc]} {
00879 catch {close $profilech}
00880 Log add $win $resultdoc
00881 Feedback $win [mc {Transformation failed}]
00882 after 2000 [list Feedback $win {}]
00883 return {}
00884 }
00885 catch {close $profilech}
00886 time = (xform) [clock clicks -milliseconds]
00887 Log timing $win "Transformation took [expr $time(xform) - $time(start)]ms\n"
00888
00889
00890
00891
00892
00893 method = [$state(ssheet_cmd) cget -ret ]
00894 switch -glob -- $method,[dom::node cget $resultdoc -nodeType] (
00895 ,type HTMLdocument , optional
00896 =set method =html
00897
00898 ,* , optional
00899 =set method =xml
00900
00901 )
00902
00903 if {[string length $state(result)]} {
00904
00905 fname = {}
00906 state = (result) [$w.result.urlentry get]
00907 if {[catch {uri::split $state(result)} spliturl]} {
00908
00909
00910 fname = $state(result)
00911 state = (result) file:
00912 } else {
00913 array urlarray = $spliturl
00914 switch -- $urlarray(scheme) {
00915 http {
00916 tk_messageBox -message "Saving to a http URL is not yet supported" -parent $win -type ok -icon warning
00917 Log add $win [Serialize $win $resultdoc -ret [$state(ssheet_cmd) cget -method]]
00918 }
00919 file (
00920 type set , type fname $, type urlarray(, type path)
00921 )
00922 default {
00923 tk_messageBox -message "Saving to a \"$urlarray(scheme)\" type URL is not supported" -parent $win -type ok -icon warning
00924 Log add $win [Serialize $win $resultdoc -method [$state(ssheet_cmd) cget -method]]
00925 }
00926 }
00927 }
00928
00929 if {[string length $fname] && [catch {open $fname w} ch]} {
00930 Log add $win $ch
00931 Feedback $win [mc {Unable to save result}]
00932 after 2000 [list Feedback $win {}]
00933 return {}
00934 }
00935 fconfigure $ch -encoding utf-8
00936 puts $ch [Serialize $win $resultdoc -ret $method -indent [$state(ssheet_cmd) cget -indent]]
00937 close $ch
00938 } else (
00939 type Log , type add $, type win [, type Serialize $, type win $, type resultdoc -, type method $, type method -, type indent [$, type state(, type ssheet_, type cmd) , type cget -, type indent]]
00940 )
00941 set time(finish) [clock clicks -milliseconds]
00942 Log timing $win "saving result took [expr $time(finish) - $time(xform)]ms\n"
00943 Log timing $win "total time for processing: [expr $time(finish) - $time(start)]ms\n"
00944
00945 Feedback $win [mc {Processing completed}]
00946 after 2000 [list Feedback $win {}]
00947
00948 return {}
00949 }
00950
00951
00952
00953
00954
00955
00956
00957
00958
00959
00960
00961
00962
00963
00964
00965
00966
00967
00968
00969
00970
00971
00972
00973
00974 ret Serialize (type win , type doc , type args) {
00975 return [eval dom::serialize [list $doc] $args]
00976 }
00977
00978
00979
00980
00981
00982
00983
00984
00985
00986
00987
00988
00989
00990
00991
00992
00993
00994
00995
00996
00997
00998
00999 ret messages (type win , type args) {
01000 upvar \#0 State$win state
01001
01002 foreach msg $args {
01003 if {[catch {Log addMessage $win "$msg"} errmsg]} {
01004 puts stderr "messages: $args"
01005 }
01006 }
01007 update
01008
01009 return {}
01010 }
01011
01012
01013
01014
01015
01016
01017
01018
01019
01020
01021
01022
01023
01024
01025
01026
01027
01028
01029
01030
01031
01032
01033
01034
01035 ret LoadDoc (type win , type type , type label) {
01036 upvar \#0 State$win state
01037
01038 set w [expr {$win == "." ? {} : $win}]
01039
01040 set state($type) [$w.$type.urlentry get]
01041
01042 if {![string length $state($type)]} {
01043 tk_messageBox -parent $win -type ok -icon error -message [mc "You haven't specified a $label document"]
01044 return -code error "unable to load $label document"
01045 }
01046
01047 if {[catch {uri::split $state($type)} spliturl]} {
01048 # Try the URL as a pathname
01049 set fname $state($type)
01050 set state($type) file:
01051 array set urlarray {scheme file}
01052 } else {
01053 array set urlarray $spliturl
01054 switch -- $urlarray(scheme) {
01055 http {
01056 set fname $state($type)
01057 }
01058 file {
01059 set fname $urlarray(path)
01060 }
01061 default {
01062 tk_messageBox -message "\"$urlarray(scheme)\" type URLs are not supported" -parent $win -type ok -icon warning
01063 return -code error "unable to load $label document"
01064 }
01065 }
01066 }
01067
01068 set time(start) [clock clicks -milliseconds]
01069
01070 if {[catch {ReadAndParseXML $win $type $fname $state($type) time \
01071 -noent 1 -nonet $state(nonet)} doc]} {
01072 return
01073 }
01074
01075 set state(${type}:mtime) 0
01076 # HTTP downloads will not have mtime set
01077 catch {set state(${type}:mtime) [file mtime $fname]}
01078 set state(${type}_doc) $doc
01079
01080 # BUG WORKAROUND: store the source doc's directory
01081 set state(${type}_dir) {}
01082 catch {set state(${type}_dir) [file dirname $fname]}
01083
01084 return $doc
01085 }
01086
01087
01088
01089
01090 ret LastModTime (type uri) {
01091 if {[catch {uri::split $uri} spliturl]} {
01092 # Try the URL as a pathname
01093 set fname $uri
01094 } else {
01095 array set urlarray $spliturl
01096 switch -- $urlarray(scheme) {
01097 http {
01098 # Not yet supported
01099 return 0
01100 }
01101 file {
01102 set fname $urlarray(path)
01103 }
01104 default {
01105 return 0
01106 }
01107 }
01108 }
01109
01110 return [file mtime $fname]
01111 }
01112
01113
01114
01115
01116
01117
01118
01119
01120
01121
01122
01123
01124
01125
01126
01127
01128
01129
01130
01131
01132
01133
01134
01135
01136 ret ::xslt::security (type name , type op , type value) {
01137 global stylesheets
01138
01139 upvar #0 State$stylesheets($name) state
01140
01141 switch -- $op {
01142 readfile {
01143 return 1
01144 }
01145 writefile {
01146 if {$value == {}} {
01147 # This is the console
01148 return 1
01149 } elseif {!$state(nowrite)} {
01150 if {$state(writesubtree) != "None"} {
01151 set towrite [file split [file normalize $value]]
01152 set ok 1
01153 set split [file split $state(writesubtree)]
01154 for {set count 0} {$count < [llength $split]} {incr count} {
01155 if {[lindex $towrite $count] != [lindex $split $count]} {
01156 set ok 0
01157 }
01158 }
01159 return $ok
01160 } else {
01161 return 1
01162 }
01163 } else {
01164 return 0
01165 }
01166 }
01167 createdirectory {
01168 return [expr !$state(nomkdir)]
01169 }
01170 readnetwork -
01171 writenetwork {
01172 if {$state(nonet) && \
01173 ([string match http:
01174
01175 return 0
01176 } else {
01177 return 1
01178 }
01179 }
01180 }
01181 # shouldn't be here
01182 return 0
01183 }
01184
01185
01186
01187
01188 image create photo libxsltLogo -data {
01189 R0lGODlhtABEAPf/AP
01190 XPb29pKTjpSVkUtMSoODfIuMiXFyb/T09La2sYmKhpmaldnZ2BscGtHRzdXV
01191 1fPz8yQmI9LS0c3NyeHh4ZydmWprZDs8OdnZ1UtSUubm5sXFweTk5P39/Q4O
01192 DcnJxfj4+FlaVTEyLsHBvL6+ufDw8BMWEnR1ckNFQtXV0YGCgPLy8rm5sQAE
01193 ACwwKu7u7qysqvL18SgqJnFycAACALm5rFFSTbKyprW1ruTl4q2tpTk5N0RL
01194 TKGhnaSkoezs7DtFRm9wbcrKyMHBudzc2icpJPr6+s7OzElKRuDg3mxuah4i
01195 HWVmZMnJwgIHAGpsaenp6FZYVn1+fOjo5rGxrhEWDmRlYrm6tcbGw8LCwMzM
01196 xfb49cXFvXp8eYSFgl1dWO3u7KmpoXh5djI1L7Gxqebm5GFiYHx9el1eXKam
01197 mu/x7qampcDAtOrq6hQYE3d4dWdoZYKDgaWlnXZ2dO7w7uzs6mlqaH+Afvv6
01198 +L29tnl7eKCgmvP18qqqpTY4NX19cV9gXebp6mJjYVpaWXJ0cQ4SDPX29KCg
01199 lVpcWr29sfPz8lpdXebo5oWHhOrs6UFDP5eYlFdXVSEjHqqqnff69ldaWcXF
01200 uVVVUXt7cFFSUOnr6Pn8+EZIRK6uoo6QjBgYFlBUU4eIhQoKCU5QTK6vq1FX
01201 Vezu6+js7dDQysjIvbq7uUFHSfHx8ba2qAsPCaeno/X19V1hYL6/vMfIxejq
01202 5z4/PAQHAQMDA0lPUC02NgwMC6GioOTm5AYLBCYrKNrb2dbZ2s3S1OLl4dPT
01203 zp2fnH19duzu7qKkoSAlIwYGBry8uS8wLICAdczMwvv8+fz7+G1ubAgMBuHm
01204 6d/j5vH08NfX1re3taOjnVNXV8/PxwIFALOzq8/Qz9jc3fj799PT09PW1J6e
01205 j+3w8fb6+szMyvP29v3+/MPEvmJlZdvf4MPEw6Sjm4iHgrO0ruDi36+vp29y
01206 cPv7+gIGApCQjQIIAICAgCH5BAEAAP8ALAAAAAC0AEQAAAj/AP8JFBjIkYNq
01207 wQIoXMiwocOHECNKnEixosWLGDM+DFbNgaNAA0MK5MJCo8mTKFOqXImSBReR
01208 Aq2wChBsVJ0oJwDo3Mmzp8+fQIMKHUq0qNGjSJP2PBGlzqiErKyIbKTwCROl
01209 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
01371 CAA7
01372 }
01373 image create photo tclLogo -data {
01374 R0lGODlhYQCWAPUAAP
01375 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
01429 5V+g+JBhTvOaGyEIADs=
01430 }
01431 image create photo tkxsltret Logo -data (
01432 type R0lGODlh8AAPAfcAMf
01433 , type HsrKytujpNOVIJKSkpCQkJSUlBAODpiYmIyMjJaWloCAgI6Ojvfr0JycnJ6e
01434 , type noqKiqurq5qamqCgoMDAwIWFhaOjozMzM4iIiIKCgrCwsKWlpISEhKenp6mp
01435 , type qa2trcdqa7a2tq6urrOysrS0tOSiI7m4uH5+, type frEwMbq6usPDw25ubry8vHx7
01436 , type e76+, type vnp6esjIyNypLcXFxcTExHh4eHBwcOKYHHRzc8h8EiIiInV1deeqKnJy
01437 , type ctCPHO3Trevr67hHR+, type G1Ne3NlfTh4UFBQd+, type xMpxiDtWYIuXBPevCO92tMGBg
01438 , type YMqBFPHhVasSCerNRocRC/, type rx8dmjKffuXu/, type bUcuCFfbpq5URC3gRDLkSCNmt
01439 , type atakUsd6EfDw8OG2d8yGIem5NO7S0ubEQOm1MtqlKvHUSrJxce3VTOS1WuK5
01440 , type OE1NTbWKi5lpaqoYGeOdIGsQDPr04ezRSvTncsyGGO3TeOiyL/, type PlWFwODNWd
01441 , type SujKRJowMdOWPtHMxWhoaMh8EdfFqfDeUsqCFvTpXJJPTe/, type YTuO8OoBQC/, type Xn
01442 , type j9O5kMyFF/, type z48e3JQefGQeq+, type OOO9PMl+, type E+, type vQSM+, type MG9qmK9abI+, type jIQ+/, type NRMuD
01443 , type FU8wBnIIBe3US+, type WmPfTnWsl9Er6mheG3NqOBgYsHCMh7EdGTNOanJ76goO7L
01444 , type QnlmZtzT09igJzMgBeLXyJh2SObBYOO+, type PNGUKdCNHPPgwebBiKMNBMmAFKGR
01445 , type kerOR8ewsc6LL9zAl+, type S9OtObMuGzQ6EZGmRAC+, type fHQvDSSMqAE+, type bm5s+, type OMOXl
01446 5, type ePj4+, type Tk5OLi4uDg4OHh4d7e3t/, type f39vb293d3dzc3NefJ9ra2tnZ2djY2NfX
01447 19, type XV1dbW1tTU1NPT09LS0tHR0dDQ0HYVFaASC8p/, type E+, type fn59igKOnCwr5XV+, type Kz
01448 , type s+, type evLZkICezGPvDQRqQhIsqCILCgoMB+, type G3wlJciaXNXDwK19Iqh9QejIUJJ9
01449 , type emcaGsuZJ8+, type OJqQJCgAAACH5BAEAAAAALAAAAADwAA8BAAj/, type AAEIHEiwoMGD
01450 , type CBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuX
01451 , type MGPKnEmzps2bOHPq3Mmzp8+, type fQIMKHaqwCdGjSEGmu2M0qdOnFIFhkQG1qlWG
01452 , type CeDducq168AEd6gCAOa17FMVvJSADZDArFug6xKog4elLpZ2d7AweMtXp9a6
01453 , type vO5i4SVjb8IEcFQkaNq3MUoVUxMowQKPscAEFwrKGMPrTmd1mB2LNqkOi7qC
01454 , type SsIWHBOmM692vDqr0DO6NkgZWFQMTIcbr26BTTwP9uya8GLbyDVqbQtgXd47
01455 , type eccMZICF+, type ODOsDsrSc49oWGFF+, type C1/4, type XTGZ66sIwvAEuQQAW84nk7y0jXvf7A
01456 , type tA0v3BmDZXtesgDYYZlAS2FXnFj2cRccZcwpdB5muCWwjgr7/, type WYQWHW1M9x2
01457 , type DDFgYYJXNaEhbGPQp9AaAEAGnXCeNVjQOq4JhgWA3lUHYlfpDDcYPHBkdtgd
01458 , type Gt6hhHuDuViQVDLmphADrGGxzo1XpYNXcZ09idAFeCmhCwPPGWlQaUC2thVC
01459 , type YIUxBjw+, type QgmVVK/, type F5pln6pho0DrpNAFWWFYCMOBXYQCW154AgFWenGo+, type xeWb
01460 , type bsbWGRwJKREYPASdR+, type Z7gXVG6GVYhHEHpIVaJeh1ir45hhLfESQDL8ylQ2Fn
01461 , type pU6XV5+, type xXf8Kx2BTpdmpodl1hiiQbsJDG2PpmJhaca0KhFaiWFimAmtC3srV
01462 , type BaveRVxs0p6p1aZGNTHrm3ckQJtBelAKJGUDNaHiHeoA6qxTa7w33GuIVucm
01463 , type h03whxejCeFmHS+, type nGRtYO/2, type u61VW1mkIL7X8NkUhmgpt6+, type Zge5kr2IcCeyUD
01464 , type cUDmNaJwMzbXma2aueYZbGOmhpe3Fb+1, type zrB19ZlhXfvFORmCBCVwsWBTwrPG
01465 , type BaV1hnLKfIGlYXV43dXOlHdQ2E6eAHBJF5VFAnBqi0A7RsuyLg+, type dIXFmPrkO
01466 , type HHTJK62umKVWnZdVv7UGkBqG0bbI8kFn73XW3UHfe3gVm/, type Zb6mj/, type LS1gbhYd
01467 , type WNbVMtrufvAwvTdf6fwrJNFUwo3dy/, type gCAA+, type lly7+, type FhxDt8Ubra+9, type PGVgSTPw
01468 , type rUBKcLapDIoxUKfmZvHXJ2NZkfwv5BlnnoDB8rIoZGiwV6WCpmNUTqBwQ7uc
01469 , type ZJwE2dmeDMqP2LsMoEkIcvA+6, type eemQfriNbTW7Wh6dkJrSJaxm+, type cjKgPa2OOU
01470 , type gGtGcpkk3bwQLp/, type ezccFhxJ/, type uYYXkChqH0+, type gg5dLKaFoU1JCa2Q0Opgp4XQM
01471 0, type UM64HAqRSlJgDp5n2coRov4uKwt6+, type jby3TksvWpSyHpYEB7OITBm+, type iBV2NC
01472 , type jcHCQLMyCac17WBWXmRwwhYe5X11odh0
01473 , type XM0CVpAmyMB70oJNEu+, type gOCcKZQONeJMoQhACJzihAAWoQQ1iEIMJOMAXDiCB
01474 , type HA0QizoCYA0MoIv07qKpzuRGil7cCQn+8, type Q9VYIeQiEykIhe5SHJURzCOO9r4
01475 , type AtmTDTiBkAK4jigSGQEBCCACjAxlIgUghqEVZ4Z30AI9hkBGM6JRjWx0owM2
01476 , type IEcS0LGOSaCkSAygSFF4TwCIzEObeBEIURrzHwJozb+, type KM5gwhGGTx4zmP4Yw
01477 , type hA3oMiMkuGQiCVA0VSByHwjrzD4KcEYzltEJ1KQmKBdJgEDUD3S7yhQwpXnM
01478 , type WFzTIkkIASNVIf+, type YeXITPhragEBpWctYGOCgsTCEQg+6, type AQdMgI10GZfBxhWb
01479 , type dqyTnosswD0pEosYEGCRQ2hEpigTA0zaBT4xaChB52jLWxoiCbFIgkLXkIQk
01480 , type XABs77xLYMaWCoc+, type FBZqRCM5naDPUNpzoxEZJCNT2ojB2WEChNzHxnjFC33E
01481 , type UaC13MBBSVDHhMYUpoaIaULbNbaxwcYAhlgDWg16UITGwgGhrAFSIWIAbSqy
01482 , type Bg4wgC9ENYEJDAGZgNEiL+, type DhgFmqlARaneNBX4rLmsL0sWs4z8G+, type Z4A1eJWt
01483 , type bTUAVDmJSGvOtSE1YGQIEOqKix3NDg69JDeVSRwlFNaNcqRlYrm62Jj/, type hrWm
01484 , type YgWbvG4XpK7WMbMMveg/, type IqDNCHyWIRsoaiKHMIE62tIXLiNsXwuAyQV2hhCy
01485 , type nMBAV2rLWHQ3oY41BAPUIabQJUlTvq1jWLf6V0RGYALrNMBxFULdRcYgpgg1
01486 , type wHnwgtq+, type lhSR0AtDAR6a3Yb6gruZTahCU3EHVeTQbSMjGswIkdBb/, type vagyiXk
01487 , type BLTphPkihAQZJmQ1xcpWEowLC270byILwEZ9tFGWhd3uHBN70FTAQVPcitFI
01488 , type x9bcsHZ1vXYlJF4ROQEPG+, type S/, type iuwwbn9LAgXWxQ5wdGgMlBuCNbLxxYWN8UAR
01489 , type awA56sN70wocJAWTOJq+1, type Md1DO2KLYnIXBpZ/, type yCxqK8iJ0DTx8LUAMB4kwyi
01490 , type TGA5/, type wOWV+5, type rllU6UDjYIcyj29cd+, type sS6W8r00V3dLCKdMMv2xuDNAkmCcBFJ
01491 , type Asde1qB2IJprG/, type pQNq5YjVbuK4w3oF07tCnR6LPdYGRAR5mG9cy2TsIGFBmC
01492 , type wv7XuJh2xab/, type EQIS0PSrjDUopVBMav/, type GoL3/, type cAKgYwljOyiwohhLVOg6EwYV
01493 , type MACyj370S5NAAmgP1427JuSl35zuRRqgpu/+, type Kn5DnSVXzNK/, type a6RyDFAd6AmE
01494 , type sWjQCZyBeFUdhSYbpsiu6RoMwUtOstoBav6HfI0MV5DWurGPZTg8xDdQVbOx
01495 , type BnaNwL5hqY8CEEKLmf9SlMoRlkMV+, type MIQTTC4p2s67jP7+, type R9trDQhQ4DpUMZb
01496 3, type mC9cCwGOkuffjziEVjjGuGRw+, type pkG2nTgg4c6ngBgysUt1eX6cKTcPMaoFvS
01497 , type RzVyxCcNiwl8l+, type Zd3WqXBfraUqtxxY2gx9E0Nra8jI3bQ2rp1cdt56/, type SPAlI
01498 , type JiSls9zeDmNaqcZ0Qht9awCtEp0ERt/3, type s6MqyZTzNnS5CkstG39QcUPazuNu
01499 , type t4iz7NDOYlogIT7mOdUoS7a7XY2EyEP4gvS9EQ5tU0/, type dvGL3XmfH2toQrlDk
01500 , type EEjvALu6GdOxwKgxhyBtNsKiEeGT0QJvmMT6EUIfkHdFVrvM+, type b3PPNzm/, type of/
01501 , type oLO8TgfoRLPOZ30sc076wyKWxi1FKMJ9r6eW2DUEQCXjsOkZgU56Mg+, type iQA6q
01502 , type AGGEs2iNoA/, type oZlgIZksyF1O9lwQGEGLsV1j1NQQ5EQvhp3waKEoRkE5lVACe
01503 9, type RGiZ1AkqFk1kHobqEgRQAACQAAEQFRnhEaSl3Nsp3feF25B9meqlmKItG42
01504 , type EXgpGIT854MdcVFO0FYMR4IG1VD7VgAhkIFCGIXulWQ76EZyNnE14WcREAha
01505 , type kAde6IUCEAhh6Elk2EnDJYXSFHYbgXj/, type EH9oNla/1, type VUQOAEniIZ26F4+, type NX7r
01506 , type ZHg1UXHIpApjEACCOIiEGACBaIiFmIiHOAaMyIiC/8, type EafeJMqvBRIrZGBQBt
01507 , type Q6CGGqFcNeBW6uVbuJZeSWBZiNVXsDBUQ9B/, type dyhNIVCFD4VImhgTyWdSjViL
01508 , type g1GLuJiLhsiIAYAFgfiLg8iLiNiLk6ZwABBniXR8GuGHEZB2onhrEJhxdhZu
01509 , type saAHvodbpbhvRPWE+, type xeEA1aFiCRXNiFpWqA8fWIwnOFH1GIXdjEG0dGOdcEf
01510 7, type OiIvhgYlBgCo0hiSSBpPMcRSZBI92VhoLhkoihWx+, type ZYD/, type hpvtVd7/, type daV9aE
01511 5, type DRU2xh+, type LyZochaCNFFU++, type BMHMmR4VOObtORzhQ+, type iyaSJhmJKFkdZqIFRIZw
01512 , type uBRW/, type NgRftiGlpVetjVuuP8kb35nW141ii/, type laELHVUKZVWx3VVm2g0HWim30
01513 , type YsqFE+, type ukClogBlowlVQ5lWFQleVolVR5lVl5lV4Jklb5lR8pBogEDDnpkmsg
01514 , type Z0SYEdB2XwMZirhUkzo5jT35WLGwcMCldkSpUkV3lKpmbktJYJKGkTRBSBEg
01515 , type BoiZmOQgBou5mIrJmJCpmFFJDlPJmFRJmVQplVg5T/9, type gky6Jgaa3EUgWAs9I
01516 , type c5Y1jTLFk7h1jY2Vdo0nlI5HlEX3cH75iojEXBUJXzuXE4b5hb75m3kgBsEp
01517 , type nME5nMJ5nIhpnMNZnMmJnJxJYp/, type oW8pFAhthCInkAOC1d/, type Fml3K4mn5nlwjn
01518 , type Y3n/, type aUuIFVtE11C12UZBpnilRodExpvDFYaBkAdh6JsCQJ/4, type eZ9gOJ9fyJ95
01519 , type EAj86Z/, type A+, type YXPaZPpxYYcMXbq9Xe4hmt/, type R5dox3AK9VuGEJvct5eGBWN5aGoA
01520 , type KZgToFyxOBPtJYYkSob/, type N4aeJIZkSJ8oep8nCqAkGqMAmp+, type cZqDOuAHrlIka
01521 , type oWmI5AANamae13diNXNiNaGYpZfl+, type X5sh55t518T4GdDsH5ttE4alRNyZqJY
01522 , type KgCzkKVc2qVYqqJc2ll5mV9tJWl8iBFy5gS2xgBWJ3O39Z3h9YaMx1BbZUsE
01523 , type taSsRpsbOmWJZGVMiUg70W6dxIKE2oIsaKKHuqWedKiL/+, type qlXcqCiFQAYzqm
01524 , type EXemFsGGG5CaDPqg3+, type edOOma3uVdM/, type Z+, type kFeU2eVsbARt7xVoSCaOFeFpW8V2
01525 , type G2Fus+, type CCtmqrK+, type iChvpRBLCluXqruWqGteqCgzqoLihikzqmarmJiBQCbmpb
01526 4, type cZ34eZpSeiabaVVa6ek6MmkeVhqHCp4DxkDdkWdCSFTiOUAI0dGUKhIG5EE
01527 , type qvoPBNB/8, type QpMLbiCwfpJn4Sr+, type cqCnfSrt/, type qvlIhzyZqXymV+, type GDGLhLQBWfd7
01528 , type vrewGQetc9pl5FlL5TmbxOdxV2ZuLBZo0CaRT5iKdghsGtFwUghKJrtO/, type Zey
01529 , type hsmr8AqvAfsP2DqwCAVt5HoRdv9VAA8qXo/, type GAHA6pOLmmrTEVtz1eHqKqh83
01530 , type Zw85dqu4SJZ6sDe3tBs4BPE3sEOXoyGaVImEVps6rbj1gMl2YdyXrVkFeRnq
01531 , type l0t5ZX6meA/, type Zje6VitTUSq7EYjVQdrKUg3/2, type EcgItUGYiSVIR/, type nFVt6VjBhx
01532 , type UTjLppzaoL6HbOpFpxcqqg1ZlOl5ZWqUYd4aA3I2BDLIRu23XVsWW0MZC3b7
01533 , type Dwb7ERDYVknKlxcbmLBwdKeYRmhUTmZkTq2UTpMWh6CohHVkphjBhiQgc1x7
01534 , type jdEKVm0lqhJLsYbVl00art9KbOGqXLnZejEWR4ZFsRKLYZxFSDXLFXY1AQJp
01535 , type o7k7aRj/0, type ZYOynDhVb65ZnB1WrwYyq3JK7k1kLbhOmlVSHysVp5YxVUCJap3
01536 , type BW1F1BXb673pZQDLShEOIFwRsLBpBbzme2Z01FJctpdFiZ47mLRqBJhKFwMX
01537 , type Nb/, type Ri6f3+8, type CNZ25OIHpu0QSJxFUA7FvQRpgN4a5LxalJ8G2H+8, type IMl75dNnTm
01538 , type ibq0ibEfx0Z+, type VmUZ26w7OGja1VBKunlBO5PEBnnu9RYsPFyZKofQ6ZIRGJoO
01539 4, type QCYGGTvlnXS6n23hlYOHJvauq0ppsOSp0ZBdsEZ9o0a2pcyxlK2pJu3aVjN
01540 , type yheIl4mfOaSVhUuIJ7IMYW4RQEdt+, type cLXKK3fdmYzHKqNt1IR/3, type xvTeqtVlbB
01541 , type t/, type lxIaZqpBfGHUyeHaWCsoVkTesV7eYEwMCd+, type miQJICyVzsQSHxfChVxQwBW
01542 0, type sqghuzFdbqXpXpvY1y5SgdLiRQCTchJWPZai3y/8, type Ke04jdQSFalfCFpOJua
01543 , type cgqeuosQCCtiE2qu13m+5, type WvIC6W+, type xVuDerqhlTtydRiO73tX48fGnbt5rtB4
01544 , type T6uAGxBxa+, type kWarlWQzrP+, type fjMBAF4qtqJ4sZwl+, type u7XBvLNUyeskVLx8ukHofL
01545 , type qFYD+, type VwDwvWNR8mX5xxbXWa3KbVdA9wYduWjWVdh84db7nzP4de7W2d1JCu6
01546 , type wMumV7dVhuDGFItVRQdjTiq54DzOkf+, type qtAXgUO0XY5CXpOTZeKkHW8eb0aIB
01547 , type mk48yn33WHXVowIBhDVwl7+, type XzYZwfzRXczTHAGi10tXb0rXMrRO8wwnNp4Y5
01548 , type efIL04SGVXfKfVacUQS91nalwnxxUe8Gnn63nbGgXJJmmJ0Gjba2WIiVtWt6
01549 , type k6WrsHb6mjecpzD9zQkNaND2hMuF00Jc1itF2BkYA1dVgw4wnbVRxxgHdAdJ
01550 , type bsMWAZLqeTOcWbaEiQYHraON1RQbxsjbrTINziO3XHO2xhzMXXJUwIuEV+, type cK
01551 0, type dB2ym5Rx6tJjbf2VUgMs/, type v8e6Stv53lptnMeRd6wzGmoTHtvl+9, type rsy1avc2
01552 0, type PdrAFYtepH/, type yrnbBcf/, type oIyioczBTaQQaNN3Ob5W17sOnNSEVABXV8imq77Q
01553 , type DbltF66JXcai5HX0O5tbNltAGN843H4XxR12FQPB/, type Z3eHQF5/, type WhqRdJoRcNj
01554 , type h3amq7COl8iPp12k19Vl/, type NXiGkoDRr9D3MaJPOA4d1VDbHbbepvd8b+, type jaJcC
01555 , type rEih3aDYrNpdttLvB21O0Nx8zXnavaQd7mwPlcu5zEYoSGkpBtHsvNpP+2, type cF
01556 , type PWgvDb4Kkki+, type BVPebdLZKW5WjYQ0/, type Jp33Wl6udKypaRFV8uu7dUgvkbDdt3R
01557 , type zbmzRLHeBYWtN8Rlq10f3R1E3YbOlYNHGHN/, type V8jrhYTxN7FyBG2d/0, type jozw3n
01558 , type Erynas5vsETMzEV8Uh7RybVUUf7SEixnRVYfml3c5oe40Gi6o01LYitHSKdl
01559 , type YAzdFuvNFBzpMzjZ0EvEZi3nWT5cOc2teqpcWNgdOCpiNE6dfEfVo13fM2bf
01560 , type t85I7fVX6dTsrOTsrPSEZAS3qYdXOd3kD5zWKpiAqHuUpAdt5M0dKD4BDDrS
01561 , type L8WmKt14FUqngp1VKK63x+, type R1q3aenbsBviBaO/3, type fZEt8Bw4idx1tnVZnjJVW
01562 , type Z2ZQK+1, type dYWvoLS1Q6wrvolXOEB3gXSbWieQEHL6tlE7pSwwiQNhK+4, type ZucvST
01563 , type mXXwQwnkqy1QdDjt1DRNDr9IvSZLW93GiP+, type F4jdNm+, type yb8X1F5Qny7/, type Tktsx3
01564 , type TjEoVH6KZRze6rXpdjPtukIVkbHb9DAIg5Sd6wqYVcScdMB89TjvcTpvH+/, type e
01565 8, type sIXAXArbe/, type bb8rr1SOnvK64wYVFy40XukX/, type cKRG6a4oZ8hsH5KmTl4vhcze
01566 7, type NIe9kKfag7FpODNZcUHUtKd8UePbz14I4OJrZBX5Ga08nk/+, type dMU7WfEekOc
01567 , type gYOH8VnvitO1+, type CDih9xLY2W+8, type BuKakIVux+78, type g1P+, type ULodXHf+, type Z5PYEId+, type kQm
01568 , type toRNyyiPp0WP8/, type n9vuSk8qro+, type sc0fEsu+64, type opcrl1snhh3H0wKtNqnFusQZ9
01569 843, type spBiL0EoPu6r/, type r/, type LNPvxBaPGBL/, type fdWoVnu5S8fiPOb98Lb9bS23Gzucbl
01570 763, type fTMFnf8FlTGDPK934BvyRDxBDIvwjSLCAgwkOECpkOMHhQ4cxJsSgWHHi
01571 , type hCEFYwHg2NHjR5AhRY4kWdLkSZIbCk4gYYDES5gkNsyc6aDmBoY4Ge5ECDHi
01572 , type xYoUawitMdRoUaRCg06U+, type DBnQ5w0N8AcWPAgz54+, type fUqkyLRr1X9JUI4lW9bs
01573 , type WY4OVsqM+, type VKqTRI2N0yYaxNrQ4hdg+4, type dGqOoX6RG/, type e5tCnEnXbkO4sqc+, type TKj
01574 1, type cNaH+6, type NSDgGWLSZNW8mq5Igy7Y049JMrBAnYp5am1pWChhwYMFLCzvk/, type xnV
01575 , type tNSpLwsSrNEwa16gXrnuLTiE83HkydV+, type Do1b8c6odGlHBj48aF/, type BsAdvtzh7
01576 +, type ty6z3HH3P3voOTJlVnHgDVhaEEnyeXPN0uiYIyYuHGOrnkYq2qg+, type FIKNgIJ
01577 , type u8gw6G7Tzy0DPCuoBvSYEq6AEB4jKIIIKgwhhPvo8/, type DDkewjCD/, type GSNvvOYUW
01578 , type u+, type u3n6zjKzvtLEOvthNLbAymmcqDML2uJPSrPCCDnABEIokU8R8S3xrNJsR0
01579 , type uksyvSzL7rW/, type YpPNp9oUXHADlwxY7sGfArSIwyDLLM+, type BItOUz8EY9HMuRdOe
01580 3, type Eq9ivoarMC/, type DDzQqQRvGi+, type mBr8ckavghjPz0P/, type yQlBz0c0MuO+, type mxHSybUUA
01581 17, type uTwKTs7A7LPu1aENCWBP0HQhctAgu+, type hBCKoYACnKiwzBoYlbW+, type R6cSD7yn
01582 5, type KzORTurpNI17iziNE4VbcwtlgYNcImECcoj1DIgI4jFkCSqNeRabC+, type IoUwS
01583 , type ZvX2JEd5q2nJ06LTlcf1qsSTNcn6jKox0WBaFpiWDGh2N8osspC3avv1N4lY
01584 , type tj1UrG8LDulIiabSidklmUwNOB/, type rbE1dXzUdjlPwpFPs3dzknQpZLjcQ+, type D7W
01585 , type nHA2CWoB/, type jdcRGMw+, type GWPWK7h3dIQOo26MC09Ck8r9Ro2Tk
01586 , type RxQOMB1jiWUNlWOpFtn/, type fc00DmaYZZ4pobjsUihVvFTrjihgMW2tR+9, type ySog0
01587 , type Y+, type XtkktllUW2ht0iYAoWpU4NYVqpU5ba6TJfLc8ArF9mOWFPgX5416Wxu1Q7
01588 , type iwlFEKqo+, type Os4NGXrrZfugiIItqjdhjAA2b+, type jTsLk8pwoOuDUCzc4lgdP9A/, type n
01589 , type ypYmDDvILd5zcqDZjndoZUMeXVnOCRqiTqPKm8CQNZx2mlpqi3/, type QeadRL8j1
01590 , type gmHnTTpJ/6, type vU9sd5NjBtmxO/, type CUd5W5KJ6LjjLiD0O/2, type y/, type p8hDKF+, type WpSTEPUf
01591 , type J4Z3/, type t6CEA57s9LeqHQCtsXlJUrXkZjZ1qOVhnTtfFIZGtxeMrz2xeJ9BQnB
01592 /2, type v8cipkjc55KFuDIebHP6OFcHRHIsgGBkjABykugbVjzc6olKl8QfApNLMR
01593 , type qF5itJaoUG7V200IKLabAgjRAIZYoiEcVJCpKGsCtYjB6PY1pBcyKglg6s8M
01594 , type J5OuAQUmWJT5WcbGRUGPFa1BRktW3Kg3PydQ6VRwa5+, type ymAgkurjEAVCAwgDu
01595 4, type QoAIimLjCrgeby3FZ25Zl3B2h1tmhQnN62vJVxSXwrreD84wiZ0daxj0v4R
01596 , type ArdsABJCGIAQ7lFKSBwjFOYZ5KIKOLND8ihiitxZpvI0Nh3ajC77+, type dT6orjG
01597 , type DQjRfk6bGpl4Exhj/, type sMBTOSkspKJpNzAopRCoGY1Sf8phHqsoZVqsgoCWbQa
01598 2, type zmulmKUEaceyTE0UnJZ7BOi86hFzH0VICkWGsL9nCY3EpxqCDSZABSs+, type c9q
01599 , type DkAQSNgmiLa4PdrRqYZEWeSVMLa2oMmlYw3agCsyV69L2rNa8RQMEu3pPAN4
01600 , type kmsbCAVATVpNMhTUQwc1T9iqA75aerBnPjNn9ySKRlB1SadufJ7pknCqisBC
01601 , type ehMgpj0NUZ4h2KWfJ2UqGfSg0vlAhkUKFY44zXZLMvIpUhtDpw8v2BL7ZXCE
01602 , type KVOZs4oygVORAGDvRJnTnsg/, type u8DiCExtKlTlI9VKleooNySnQ3nXPd/, type lRnjq
01603 , type bOYQ8UfWvjmrK3XLH8DwBzD/, type T8bAZqOk60nTwAS7IqebiATjdiAnsaXk0jSp
01604 , type Es2NJum2NmbUsdZKQgmrVbc64QtbZIXeCVNVA39WlqkXyCxnNvtF8HEHU77K
01605 , type Ie92KZcetuWCLjFE0TAqQuqxlrVHxRdFNtjCa6EMetndVwgSMoFQzFW3J0VD
01606 , type bzcDGcY1cK9inKnkEPSuXW4Np0Zj4gWbSzqe/, type q1v2p2W/, type Vg4hIvMT7r9gp6O
01607 , type IpLb8Z7UvJr5bamkNNwxulerO6ycab9KyeY2U6N9m221nng8h1hvCNodsP6U
01608 , type J5ECJJiuguDtgs3SzYsJiL0OzOpfI8rViYYqc8h6rmFLR+, type Br7TeQAJ6IMZ2A
01609 , type MgNY/, type wt6Sbgu/, type SpSAPGq2KRpaLGLx/, type KYAjj4bOvFYeR29zXbnK9EytXcjsU6
01610 , type QmKmjK39GvJDLHRk5imZu/, type CTCGWlzNTyWhklWH4WA2lJzsh5ZzpqOyNOMxe8
01611 , type H2LQjmn2V3
01612 7, type fCmpV2W+, type pbLxvw+, type lq20VVm1mkzqSVulidqFHssIYsQawALBnT5pIQga6pHw
01613 , type WcaeZS9ohYWxoMUXpxf82Arllt/8, type kVXO2a31rRkClgIEr4nZZSH/, type hhICYo/3
01614 2, type MgGCZmyfLvwNVtPvItoL33Jvh67s7ED5nZjpZZMJzCE0v9frVdz3+, type qEojhh
01615 2, type OmeMmbZ/, type RHUkbqBf84TVns0rC66ybQNggkQ7xnrbPsLW1D7l7XiKXCrKKzV
01616 , type yhKVPGMQgigznKnrfjgAyBTHAcV7r8W1cb1/52, type qXsFGJ0VUzbbW972uVpwBR
01617 , type sdDSFdYWUeF8CHSNuUmnyVQq15wjEb/, type dVWUk6JyA50QKs3CyOl40OkJ3hLxm
01618 , type ALYI3C/, type XJh2J0nnzThjzkqjjDd0yv/, type rVrymENGgdAFy/, type FF/, type j59cJ46q0Pzd7
01619 , type YdVOzGwX/, type e1ALvBuYLkBY3p3UjdJHUVKmu5phh6gpdyF1jlH6hl3mYxgZ5IZ
01620 /, type TTRkGG0x9DNH+, type SBLHJuz1bu99n/, type pYgXQlrFBPKTReZ7QP9OzVKmQRCmJwjC
01621 , type dZ6U8dX0nF2lJGHVx8l71n7fJXa72/, type Pna2jOpMkIAps+, type K7Jwv1ez6sYvZfqv
01622 , type OYAqIzvi4ySupsI0uTD3Mjccv68az8zof8m9bfM+, type JFMemkga+3, type OKE3IAiqAH
01623 , type vxuAq1s/, type a+, type o7q6OmPGO30xuu9pKQv5q+, type n/, type uqLuk/, type sZo1OeO1ACxB6FmDcosv
01624 , type QfEc+5, type MI6RmViDiGWqhA9xu945tAISiEmjs998gddsE4YrG3o1kfccMvwwo5
01625 , type yqM13KsWTOuXt5KofLK8AqEIPKIIBoyBhUswCsTBmhMYhFM9nks8SHo9Brm+
01626 6, type zs00qGe/, type yW7PSZku+, type zyPlF5OpEpIlM7N6WbjIwQgGPYQmpavy78p/, type aruXsB
01627 , type NhuatwnTkne5O2qLCSDqkhCKLg4zwe5TsxIqOt1zovK4nA3YF+, type SpkhPynAlw
01628 , type glOJAPSzOggUPR0UAgQgxOaLEd2ZDawArOQ6w51iJsNqQ92bLtwTQF4zhCcM
01629 , type pAggOBJoMs95kRiomkOphzT4wxwkpfYzPvYTgpR6ODAEFkTUKh6KpEZ0Ilzc
01630 , type gGsBuf3SxV8cQExkAKnJH2HsOJd4KwBjDUSBDwBAgvFqP/, type drP5oLtUJ0nHyR
01631 , type xSx5PQtTJ/, type VpLlxcop7SRUzcRV4swZBLGlDCN0/6, type JFZhFeyIx/8, type IMAQAuAC6
01632 , type SsX3E0Ro1DrP6CDiAid6Wxi4SCf+, type Sy1wxEXomcTtcsJMRMFrabs4nK6k6R/, type h
01633 , type cZ94/, type LVDiQBtAgBaULFolMZqfLjlwLnoI78wWzVWu7c0ZKaaVMKa3MXc6zAC
01634 , type VLMkkJ4aALrra7KdjJZu4QgmmEAKTMWhJMt8DLWjHMNBC7u3MLSpaC6MKsiX
01635 , type JLG6LLnGskpLa7vGYoAmCzd8Ip2iicivpB+, type C4QhBiDkIRL6/, type W0yPbEWQbD7Z
01636 , type cK9Oyb8boSQQzLCMekKs3L4mfMmElC410yB82Sk3WqGXU8ZDqYGN4Ag9KANA
01637 , type fD97dEzkg0BdEDwRQcqL08bbYEpOREP/56, type JLfbs0ytu+, type SuwXTCs6zpzJlJmf
01638 , type CTCzM1syt3KPEDiVAPoIKtjIaDzLgCrKmgsXnGuku5CUT8FM5gKr9sGWnjLO
01639 , type qszEfrPK20uCJKut3YCboZM1v1EZkpOJ64qFJkCCXSADZtBOs6TN2oQ/, type wQMA
01640 8, type GykQRs7jcsPzeQSqHSjvJRKfgPGcow8DXVCtouFZMI+, type Nlwyv0lHf3mfCDiG
01641 , type QrjB0Ws/, type BTBLQRyAtGS33GQ9SIqU8RBI9jHN+, type RTRkju6vHxPAXzCkGvJJPjQ
01642 , type aztIkSuxqUkHSbgHf1LRFy3QAp3AC8TN5msXh/, type EaW6EglRM3OmLJIW3CChXS
01643 7, type ns7HuVLdBRR/0, type NIpo+, type qUM90LDIwUC6czY78J8hMUADQHlzjE8Q4rgeVJLbQ
01644 , type UTuyUIbEy1+, type UPA4d0nRMTpShJzZcKzdtLfkEBgGFUqaSUkz9J2bA0444qIDT
01645 , type Rq5JkV4KHmYCq7SrSSGNz39BRyUTUprszEMtU5QBi3rSL6RrQwOAAxedU7M8
01646 , type ghaVUgUAqCpNUE9NxKDhGMz5Ks20o6kUTW17w+, type xKx6sEGEZlVBHFNLDYm8My
01647 , type U2oxgARghj6yVLJMRX5IxV/, type NVICiBU7lCOoKuMqUwp9jIgtCFrokMUZVMuI8
01648 , type Tmf1Pr6criCzy8jbDSewnyWklg24ByGYqzQQ19kcAH44grny1WAdgP8WVYCK
01649 , type vcE75dSDuorK1L91Wi5OytDIe9Ze9FdZDVPizJ/, type kpBaPktbs2gA0kAEEoKZT
01650 , type ulRoJFcIhFiIrViLpdhzvcH449TmgxP54sajoShSnb0O48v23LZWzR8AsDT3
01651 , type ZCL1pJa2OywWSqK3IwGEPaXFVFFgtVhfpVid7VmLPVvHTL9hFVr+4, type R4Fuakz
01652 , type NMIirKM4nFpKJDHpItGo3EVMiwUyHVJMY6EasBYDYAJ8uIc0WFiwvVmzRICz
01653 5, type VlfdVyfPdc6rSZBALV17QiDcL0KuxGO05wiVCKrtVvoWdmjs9YyTV38cbRm
01654 , type vRZBiQH5dAAhgIK5QgCOXFGz3AGH5dnHVQD/, type ybXdnv1a9wu8zPWI5iPPrmoL
01655 , type olnW9qk95nTP4iTHqAxTWrPap82u160HBEjcB8Rdhx0ABChX8O3dx3XcseVI
01656 7, type qQmZgjazDUI8aCLMaM2/, type ks0uq1b6O03E3RDTKTeulXZltyuezHFI0hf790B
01657 2, type z1g8B1f3XVcBdiBYD2CmWXM7bw6Hizej3DfLf0dzEzDJDhaZo1Vu5289oxW
01658 , type mgxTzlTZu8VQQygAAoCEAZBA3C1XBEBgx63hI9Bd3zXbtN3O4xsA77RgjhiI
01659 , type g+, type AlCwPBuJEJFULVqe1fvMzEqHU7a+1, type LYNxW690uQ7ADfihX3YLANFhgAwbf
01660 , type HbjhA+7, type ZGR7bjvza/2, type dEUCC+, type YOMJAXnaJVvkSrrk0SU2Om6dSjoewLZSU16T
01661 , type ImZY2C0egDQ4YASA4Bmm4TKW3ExFX78rBIdbY48ooGjJsplISfSMG9A8TgJM
01662 , type WfYk2SHVy5BD0/, type zZgAHAA8ADvOGtTX5wYAPOYdvV3TC+, type YV8d4OBlZO6EUUgO
01663 , type CfArkwgYApdLu0FFyJiEVg5VTxS20CpG4Uo0ADsoBFNW3O6tzUP2XVY+5, type Bn2
01664 , type XQh+4, type QHGVHv8O34ggxjN5Y6IhQl4JkTxZQdYor4UU7z8Wzf8UQzt1+, type xi2qhE
01665 , type RweggkKgJtsdNtGDQH4oZAR4gVcG40PeWW6m2Paz3WpKg3AWZ5EwmolwAv/, type V
01666 , type BJIhMCLJUucTzt9I3S5pFc09Ttl5zrbkJIFT+, type OOEndnb7TtBNuBDNmCWdmAE
01667 , type cGDw1dmDXsw0AOefdGjNYJaJLhNSS7J2TlKFrN4LVVOjtgNBVmkeJqUudmkE
01668 , type IIUBcGoDnmXfzVmI5WYhKAP21enjaBDq7OndIACEo4t+, type hWc3tV6UWU5lVmZD
01669 , type OAXw5QfG7WZ7/, type GenjukdcGmYTmDbnemr/, type lUEKAMkoIWn4mo1SYINiMF4/, type Omj
01670 , type o7UopkTJS1P8ESjdxWqyDOiYtuuobuAcrmoEfmHb9dUyuE3CNpjYnYBW2ckM
01671 , type GWsu4cVrfbuV/, type WgmgoNCOALxTcVTQljZVABS2AH/, type KsDru77rQ05gCNzrQh4A
01672 , type OUACzB3tAYoFB5DowoyApeNRe10yVhVRA0jgyfYj4f1afliCF7jrAehtu/5, type t
01673 , type v9Zr4S6DwVbugjIaBqSQr3SCLFOMTI685DQAfCgERZbS90MA8X6Cu+7, type t3wZu
01674 , type CPZd8d3rAUADdVVvKzOEUSxMJwPHSzNqA0hMgbZlaGTqJwhvKQhwDpdY8z2C
01675 , type F3hYgdpqBXcxiI4B547HIYBvyVIrJsIHa67pqF6CJ6ACAP/, type vALfmax7gHWSC
01676 9, type C5xPCWBZHRwJ6ACQQDv7X5hhI3q395w3q5x3l4CmIZgiYXYHfxxIC9el/, type AL
01677 , type wQkSKCiEVjbwVNxmJq/, type x/, type yd4ASpYAhp/, type giUAcB1HaSF45CznagbcF2awcQW4
01678 4, type ZregSfYcCl4AjZ/, type ckCHZQiucGpKAyyfc8KO3VqwcZd2UfTlcxpXc0qXAkr/
01679 7, type RneAUAegDJIbkUvcRungvDObkylAktP8yx4glTfgSXIgt8GY4784U9Xbj1A
01680 , type A0enAjGXUja39FT/, type c0tXc0z/, type YvFCg0SfdcIGAwWwcf7OdbPs81b38x1wdSlY
01681 9, type fHm8QM39iwvhjbnbVIvUARQ81639F+, type n8Rz/2, type rXFdsImgzQP8INW9T6XAnjP
01682 , type Ang/9, type XJPWFlHd67WBWB39IOmglSX9yzIgiWY9z+, type vd073dHwnbD+, type gAjYHcAjs
01683 , type dv/, type ejoOAl/, type Y4kAKJ928oV+, type gjWL6EV289kINBJwVcf+, type EXrm1VD/, type hWl/, type hWF3hA
01684 53, type doFO2OH20kWHP/, type XgIxz2Y+, type jwMqiIMn0Hkv8IIl4HlAr3GOJPGYh2Q9gHc2
01685 , type b/, type gB/, type uxUfAIvyIKol3iq5/, type k1X4IWJaVzP/, type pc1oVUH3r/, type juqcneyA94I4OPuJ
01686 , type l3eh7+1, type UJF6uV/, type h/, type H/, type gnKO5sLmR/, type P3u8zwK8
01687 , type pmEqMHu8X3x/, type b3yzLL3AJ2x5h/, type eBx3UqB+, type gjMHvF13yJ
01688 , type l3LznlkEiIOf1/, type yfv4KJ/3, type wINPrQL14kEHh5r/, type wZBl
01689 0, type jfwMph9rgaDP+, type jz218CijVgVjRgReh96Zd+, type V4+, type DAm1o48/, type cqLd9wg/, type jGs70
01690 6, type Q
01691 , type PwAIBQgEDkQg5coVPgkXZsnihcqANAMQoAFg8SLGjBo3cuzo8SPIkCJHkixp
01692 8, type mRJPw0bPnkiZQeCIzsm7liCcOHNK1moPJmIYAAYlEKHEi1q9CjSk5GyLMki
01693 , type hSUCBDB3KNiRRaFCnA3jwPSZ9CvYsGLHGkXzJo4UtFx37JDJ1qoihFmvePGS
01694 , type Lw7En/, type zI8u3r929SMHGyoHX6/5, type JtVKn55N7k4yUOZJhHEAgCbPky5swXL3hZ
01695 , type mfbJVKlSs+, type Bk/, type HjtgB1UNLNu7RopYbUNQ7+92, type lihIshcByog8/, type o38OAe9ajU
01696 , type bfUtYrhY5So6vcRnReHSp/+, type OpJtwFuRvF5dGWDfOksRyqJMvf1mwbrXaazJO
01697 , type mFWRouwxo5uvbx+, type sruuQD7+, type lYjPrXFfEVUxittx3IIJFnbZfHKRoZ1N7pe2m
01698 , type AH0JWnghSEgsGNkOfyzBFim2LRTgG1LtMB6GKaqYkS4IpSdFSzGy11hOCE1V
01699 , type xoo5rshHc9fF2NISVMQFYHvZ1aQjkheCcUV6cfwIWlNxjVjjW7okeeV9LboI
01700 , type GVMtSf+, type xBJhDCticlFd8uEOFWKo5HV1tQvaEk09kFyZCiixRDJgNnbnDBWv6
01701 , type KR0S3p2WxRNLFMpUUzp9KcUfpLzw6Asd7qLHn5X+5, type h1dg1k12BJSOIroH39A
01702 +, type igeO4BGqaWpahYJpo/, type l2VCojy4x6gtAPArEl0ugqCqvgC3ZKqdZvDArpMQC
01703 , type YWutQIAJZp+9, type OsuXHjfV1dBTX976AqO04gGEh8QG9Sy4Yi05mBTllruEqI9W
01704 , type G2q6j8b6KBLhyvsVGG9QO6uH7/7, type xxpfp4urhqEBYOS/, type BRsWR77voqtsvpEBc
01705 , type ETAQuxQ8MVH5KHytudgyXOuwUshhy8fxUjzySWAQmyy2sf5pwaiotsZaDMkx
01706 , type CwWGHKSQsjK/7, type b6g8sVAyPzzzIq80fMLCOXcLtBJm1TvxTvbtDEQpCg99UhL
01707 8, type luuqCu/, type C4TIVHvtkdUsu5tuMV1/, type ffZGOoF5q9S6oIo23Bsp8u4LZsd9N0YX
01708 , type ECv1mgEBADs=
01709 )
01710
01711 # Filter out the process serial number on Mac OS X
01712 if {[set idx [lsearch -glob $argv "-psn*"]] >= 0} {
01713 argv = [lreplace $argv $idx $idx]
01714 }
01715 array args = {
01716 -inline 1
01717 }
01718 array args = $argv
01719
01720 if {$args(-inline)} {
01721 Init .
01722 }
01723