Fossil SCM

Fix typo in auto.def Merge trunk

jan.nijtmans 2017-07-06 15:32 UTC fossil-2.3-with-older-SQLite merge
Commit 10c7e0fcea6db1043a15d1f118cfa0638bd60735abd010e0e62fc91444c3eee9
+1 -1
--- auto.def
+++ auto.def
@@ -93,11 +93,11 @@
9393
# if sqlite3_trace_v2() can be found as well. If we can find open() but
9494
# not trace_v2(), then the system SQLite is too old to link against
9595
# fossil.
9696
#
9797
if {[check-function-in-lib sqlite3_open sqlite3 $extralibs]} {
98
- if {![check-function-in-lib sqlite3_trace_v3 sqlite3 $extralibs]} {
98
+ if {![check-function-in-lib sqlite3_trace_v2 sqlite3 $extralibs]} {
9999
user-error "system sqlite3 too old (require >= 3.14.0)"
100100
}
101101
102102
# Success. Update symbols and return.
103103
#
104104
105105
ADDED skins/bootstrap/css.txt
106106
ADDED skins/bootstrap/details.txt
107107
ADDED skins/bootstrap/footer.txt
108108
ADDED skins/bootstrap/header.txt
--- auto.def
+++ auto.def
@@ -93,11 +93,11 @@
93 # if sqlite3_trace_v2() can be found as well. If we can find open() but
94 # not trace_v2(), then the system SQLite is too old to link against
95 # fossil.
96 #
97 if {[check-function-in-lib sqlite3_open sqlite3 $extralibs]} {
98 if {![check-function-in-lib sqlite3_trace_v3 sqlite3 $extralibs]} {
99 user-error "system sqlite3 too old (require >= 3.14.0)"
100 }
101
102 # Success. Update symbols and return.
103 #
104
105 DDED skins/bootstrap/css.txt
106 DDED skins/bootstrap/details.txt
107 DDED skins/bootstrap/footer.txt
108 DDED skins/bootstrap/header.txt
--- auto.def
+++ auto.def
@@ -93,11 +93,11 @@
93 # if sqlite3_trace_v2() can be found as well. If we can find open() but
94 # not trace_v2(), then the system SQLite is too old to link against
95 # fossil.
96 #
97 if {[check-function-in-lib sqlite3_open sqlite3 $extralibs]} {
98 if {![check-function-in-lib sqlite3_trace_v2 sqlite3 $extralibs]} {
99 user-error "system sqlite3 too old (require >= 3.14.0)"
100 }
101
102 # Success. Update symbols and return.
103 #
104
105 DDED skins/bootstrap/css.txt
106 DDED skins/bootstrap/details.txt
107 DDED skins/bootstrap/footer.txt
108 DDED skins/bootstrap/header.txt
+1 -1
--- auto.def
+++ auto.def
@@ -93,11 +93,11 @@
9393
# if sqlite3_trace_v2() can be found as well. If we can find open() but
9494
# not trace_v2(), then the system SQLite is too old to link against
9595
# fossil.
9696
#
9797
if {[check-function-in-lib sqlite3_open sqlite3 $extralibs]} {
98
- if {![check-function-in-lib sqlite3_trace_v3 sqlite3 $extralibs]} {
98
+ if {![check-function-in-lib sqlite3_trace_v2 sqlite3 $extralibs]} {
9999
user-error "system sqlite3 too old (require >= 3.14.0)"
100100
}
101101
102102
# Success. Update symbols and return.
103103
#
104104
105105
ADDED skins/bootstrap/css.txt
106106
ADDED skins/bootstrap/details.txt
107107
ADDED skins/bootstrap/footer.txt
108108
ADDED skins/bootstrap/header.txt
--- auto.def
+++ auto.def
@@ -93,11 +93,11 @@
93 # if sqlite3_trace_v2() can be found as well. If we can find open() but
94 # not trace_v2(), then the system SQLite is too old to link against
95 # fossil.
96 #
97 if {[check-function-in-lib sqlite3_open sqlite3 $extralibs]} {
98 if {![check-function-in-lib sqlite3_trace_v3 sqlite3 $extralibs]} {
99 user-error "system sqlite3 too old (require >= 3.14.0)"
100 }
101
102 # Success. Update symbols and return.
103 #
104
105 DDED skins/bootstrap/css.txt
106 DDED skins/bootstrap/details.txt
107 DDED skins/bootstrap/footer.txt
108 DDED skins/bootstrap/header.txt
--- auto.def
+++ auto.def
@@ -93,11 +93,11 @@
93 # if sqlite3_trace_v2() can be found as well. If we can find open() but
94 # not trace_v2(), then the system SQLite is too old to link against
95 # fossil.
96 #
97 if {[check-function-in-lib sqlite3_open sqlite3 $extralibs]} {
98 if {![check-function-in-lib sqlite3_trace_v2 sqlite3 $extralibs]} {
99 user-error "system sqlite3 too old (require >= 3.14.0)"
100 }
101
102 # Success. Update symbols and return.
103 #
104
105 DDED skins/bootstrap/css.txt
106 DDED skins/bootstrap/details.txt
107 DDED skins/bootstrap/footer.txt
108 DDED skins/bootstrap/header.txt
--- a/skins/bootstrap/css.txt
+++ b/skins/bootstrap/css.txt
@@ -0,0 +1,11 @@
1
+/*!
2
+* Bootstrap v3.3.2 (http://getbootstrap.com)
3
+* Copyright 2011-2015 Twitter, Inc.
4
+* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
+*/
6
+
7
+/*!
8
+* Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=fe63ebfc82d223781373)
9
+* Config saved to config.json and https://gist.github.com/fe63ebfc82d223781373
10
+*//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure, Bootstrap v3.3.2 (http:/*!
11
+* Bootstrablock}S@6f,L@7RW,N@H~f,1:}M@7w,M:display:none;height:0}I@8k,F:display:none}a{S@GWl,d:}a:active,a:hover{outline:0}abbr[title]{O@25z,2f:}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;I@7Jl,N@H~f,1e:}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{S@Vz,V@WT,M@W~,j:;height:0}pre{overflow:auto}code,kbd,pre,samp{X@JN,E:font-size:1em}b@KB,1A:color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{J@ME,1:}1A@M_,J@Yz,M:button;cursor:pointer}b@OV,F:cursor:default}m@PP,P:border:0;padding:0}input{I@Qj,1:}M@7WW,1:,J@CKW,1:{J@WT,F:border-box;-mozN@6fW,M@Sl,A:padding:0}1W@TL,C:height:auto}L@75~,T@VU,S@Vz,V@WT,M@W~,1:}K@75~,H@YV,z@Xy,N@Yz,A:}fieldset{I@E0l,K:c0c0c0;margin:0 2px;T@_G,1I:}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{G@CPW,f:collapse;border-spacing:0}td,th{padding:0}1L@cQ,D:@media print{J@e0,Y@eO,M@e~,N@EIW,1F: !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{G@Hkl,O:underline}a[href]:after{R@i8,l:}abbr[title]:after{content:" (" attr(title) ")"}l@j_,Q:content:""}pre,blockquote{I@E0l,4:999;N@mk,e:}thead{display:table-header-group}tr,img{N@mk,10:}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{M@oh,t:}select{background:#fff !important}.navbar{display:none}W@qM,W@qw,8:}.label{I@E0l,B:000}.table{G@CPW,K:collapse !important}K@t0,L@AQl,C: !important}b@u0,L@E0l,F: !important}}*{J@WT,F:border-box;-mozN@6fW,L@Sl,I:}*:before,*:after{J@WT,F:border-box;-mozN@6fW,L@Sl,L:}html{font-size:10px;e@yo,6:}body{t@zc,F:font-size:14px;N@DV~,B:color:#333;L@AQl,1:}T@10p,b:font-family:inherit;font-size:inherit;J@120,H:}a{color:#337ab7;K@Hkl,V:}a:hover,a:focus{color:#23527c;G@Hkl,I:underline}a:focus{K@14E,f@6mE,J@9JU,L:}figure{margin:0}img{L@7SW,1:}l@16S,r:display:block;max-width:100%;height:auto}.img-rounded{H@NsG,S:}.img-thumbnail{padding:4px;N@DV~,M@9R0,L@E0l,1:;I@6sG,J@Itk,K@1C0,Y@1BG,V@1Aj,L@7RW,1C:max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;J@Jw~,9:border:0;L@EDl,1B:#eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;G@ImW,M@CNw,9:border:0}o@1HO,1B:position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}f@1Jf,12:font-family:inherit;font-weight:500;line-height:1.1;color:inherit}3l@1L_,J@AxF,P:line-height:1;color:#777}L@1QB,G:margin-top:20px;I@8hV,1:}1t@1RB,o:font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;I@8hV,1:}1t@1UM,2f:font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{J@Jw~,V:font-size:16px;font-weight:300;C@795,4:1.4}P@1_l,x:.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{J@Kil,2O:cf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{I@DC~,H:}.text-lowercase{O@1f9,H:}.text-uppercase{O@26z,1V:}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}L@1h~,1b:color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}I@1kE,1d:color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}K@1mS,a:color:#843534}.bg-primary{color:#fff;O@1nW,K:}a.bg-primary:hover{I@NPG,J:286090}.bg-success{J@NPG,P:ff0d8}a.bg-success:hover{I@NPG,G:c1e2b3}.bg-info{O@NPG,H:}a.bg-info:hover{J@KsW,I:fd9ee}.bg-warning{J@Kil,P:cf8e3}a.bg-warning:hover{J@Kil,H:7ecb5}.bg-danger{J@Kil,6:2dede}I@1tW,J@HcG,J:4b9b9}.page-header{J@1uW,J:margin:40px 0 20px;I@25z,U:solid #eee}ul,ol{margin-top:0;I@8hV,1:}O@1wP,2B:margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{L@7RW,H@1zk,Y:padding-right:5px}dl{margin-top:0;I@MzF,7:}dt,dd{M@DV~,b:}dt{font-weight:bold}dd{margin-left:0}P@1_l,I@21k,o:float:left;width:160px;clear:left;text-align:right;G@ImW,N:text-overflow:ellipsis;I@DC~,b:}.dl-horizontal dd{margin-left:180px}}b@256,C:cursor:help;T@25z,R:}.initialism{font-size:90%;O@26z,j:}blockquote{padding:10px 20px;margin:0 0 20px;H@28F,R:border-left:5px solid #eee}1A@290,G:margin-bottom:0}H@2CW,_@2Al,S:display:block;font-size:80%;N@DV~,B:color:#777}1A@2CW,L@2Di,1:}J@2Jy,M@2LW,Z:{padding-right:15px;padding-left:0;S@2FQ,V:border-left:0;text-align:right}3G@2GT,B:content:''}3A@2Jy,U:content:'\00A0 \2014'}address{J@Jw~,I:font-style:normal;M@DV~,J:}code,kbd,pre,samp{u@2P6,n:}code{padding:2px 4px;font-size:90%;color:#c7254e;J@Kil,6:9f2f4;H@Dp0,j:}kbd{padding:2px 4px;font-size:90%;color:#fff;K@1nW,2:3;H@Ns~,1:;R@F6l,N@2UV,1:;J@8NW,N@2UV,o:}kbd kbd{padding:0;font-size:100%;font-weight:bold;O@EIW,1F:box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;N@DV~,L@2YC,W:word-wrap:break-word;color:#333;J@Kil,6:5f5f5;I@E0l,4:ccc;H@Dp0,19:}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;S@GWl,X:;border-radius:0}.pre-scrollable{H@2bk,10:overflow-y:scroll}.container{margin-right:auto;margin-left:auto;I@2dE,J:padding-right:15px}P@1_l,O:.container{width:750px}}O@OgG,P:{.container{width:970px}}I@OgG,X:1200px){.container{width:1170px}}G@O90,_:{margin-right:auto;margin-left:auto;I@2dE,y:padding-right:15px}.row{margin-left:-15px;margin-right:-15px}8R@2jD,I@7Jl,F:min-height:1px;I@2dE,J:padding-right:15px}26@2sx,h:float:left}.col-xs-12{width:100%}.col-xs-11{I@3R0,C:}.col-xs-10{I@2wU,V:}.col-xs-9{width:75%}.col-xs-8{I@3Sl,x:}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{I@3UV,x:}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{I@3WE,38:}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{I@33G,2d:}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{H@4nG,31:}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{H@3iG,d:}.col-xs-push-6{left:50%}.col-xs-push-5{H@3BW,G:}.col-xs-push-4{H@3tk,d:}.col-xs-push-3{left:25%}.col-xs-push-2{H@3vG,G:}.col-xs-push-1{G@3MW,Q:}.col-xs-push-0{left:auto}I@3EW,H:margin-left:100%}G@3EW,2:1{O@3FT,1:}G@3EW,2:0{O@3GD,o:}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{O@3qT,P:}.col-xs-offset-7{margin-H@3iG,v:}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-H@3BW,I:}.col-xs-offset-4{O@3td,1:}H@3Kl,X:margin-left:25%}.col-xs-offset-2{C@8xy,D:16.66666667%}G@3EW,1:{N@3vz,W:}.col-xs-offset-0{margin-left:0}P@1_l,26@3No,h:float:left}.col-sm-12{width:100%}.col-sm-11{I@3R0,C:}.col-sm-10{I@2wU,V:}.col-sm-9{width:75%}.col-sm-8{I@3Sl,x:}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{I@3UV,x:}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{I@3WE,38:}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{I@33G,2d:}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{H@4nG,1N:}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}G@3g0,1Q:left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{H@3iG,d:}.col-sm-push-6{left:50%}.col-sm-push-5{H@3BW,G:}.col-sm-push-4{H@3tk,d:}.col-sm-push-3{left:25%}.col-sm-push-2{H@3vG,G:}.col-sm-push-1{G@3MW,y:}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}I@3nk,O@3FT,J:}.col-sm-offset-10{O@3GD,o:}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{O@3qT,P:}.col-sm-offset-7{margin-H@3iG,v:}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-H@3BW,I:}.col-sm-offset-4{O@3td,o:}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{C@8xy,U:16.66666667%}.col-sm-offset-1{N@3vz,X:}.col-sm-offset-0{margin-left:0}}O@OgG,1:{26@3xY,h:float:left}.col-md-12{width:100%}.col-md-11{I@3R0,C:}.col-md-10{I@2wU,V:}.col-md-9{width:75%}.col-md-8{I@3Sl,x:}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{I@3UV,x:}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{I@3WE,38:}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{I@33G,2d:}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{H@4nG,31:}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{H@3iG,d:}.col-md-push-6{left:50%}.col-md-push-5{H@3BW,G:}.col-md-push-4{H@3tk,d:}.col-md-push-3{left:25%}.col-md-push-2{H@3vG,G:}.col-md-push-1{G@3MW,Q:}.col-md-push-0{left:auto}I@4Ml,H:margin-left:100%}G@4Ml,2:1{O@3FT,1:}G@4Ml,2:0{O@3GD,o:}.col-md-offset-9{margin-left:75%}.col-md-offset-8{O@3qT,P:}.col-md-offset-7{margin-H@3iG,1:}H@4RW,d:margin-left:50%}.col-md-offset-5{margin-H@3BW,I:}.col-md-offset-4{O@3td,o:}.col-md-offset-3{margin-left:25%}.col-md-offset-2{C@8xy,D:16.66666667%}G@4Ml,1:{N@3vz,X:}.col-md-offset-0{margin-left:0}}I@OgG,8:1200px){26@4XI,h:float:left}.col-lg-12{width:100%}.col-lg-11{I@3R0,C:}.col-lg-10{I@2wU,V:}.col-lg-9{width:75%}.col-lg-8{I@3Sl,x:}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{I@3UV,x:}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{I@3WE,38:}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{I@33G,2d:}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{H@4nG,31:}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{H@3iG,d:}.col-lg-push-6{left:50%}.col-lg-push-5{H@3BW,G:}.col-lg-push-4{H@3tk,d:}.col-lg-push-3{left:25%}.col-lg-push-2{H@3vG,G:}.col-lg-push-1{G@3MW,Q:}.col-lg-push-0{left:auto}I@4wW,H:margin-left:100%}G@4wW,2:1{O@3FT,1:}G@4wW,2:0{O@3GD,o:}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{O@3qT,P:}.col-lg-offset-7{margin-H@3iG,1:}H@50G,d:margin-left:50%}.col-lg-offset-5{margin-H@3BW,I:}.col-lg-offset-4{O@3td,o:}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{C@8xy,D:16.66666667%}G@4wW,1:{N@3vz,c:}.col-lg-offset-0{margin-left:0}}table{S@GWl,1w:}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;I@MzF,1:}I@5nl,I@63G,1:hJ@5oV,v@59l,C@5Ai,N@DV~,I@JtW,1:;L@EDl,5:#ddd}I@5nl,1:{L@Juk,1:;S@5Cs,1:}a@5FG,3F@5Dw,18:border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{L@AQl,1:}R@5KE,K@5Jk,I@6HV,K@5LF,K@5Jk,15@5KW,S:padding:5px}.table-bordered{L@E0l,1:}R@MQG,R@5OG,1:hI@5OG,1V@5Nf,L@E0l,1:}R@MQG,I@5OG,B:head>tr>td{N@5QV,1:}e@5Qu,J@Kil,6:9f9f9}S@5S0,J@Kil,6:5f5f5}P@5Sv,l:position:static;float:none;display:table-column}l@5UE,R:position:static;float:none;I@P5l,1:}H@5nl,4c@5W8,J@Kil,6:5f5f5}N@5jl,1:dZ@5bB,21@5b8,J@HcG,6:8e8e8}H@5nl,1:dH@5g0,4X@5eA,J@NPG,6:ff0d8}N@5jl,2f@5jW,J@NPG,6:0e9c6}H@5nl,6:d.infoK@63G,M@5oR,6:d.infoI@59l,6:h.infoI@63G,2k@5oP,O@NPG,1:}N@5jl,2R@5ry,I@NPG,7:c4e3f3}H@5nl,1:dH@5xF,4X@5vP,J@Kil,6:cf8e3}N@5jl,2f@5~k,O@Kil,1:}H@5nl,4c@638,J@Kil,6:2dede}N@5jl,1:dZ@69B,21@698,J@HcG,6:bcccc}H@M_l,k:{overflow-x:auto;min-height:0.01%}@media screenG@O~W,7:767px){H@M_l,C:{width:100%;J@6Dl,I:overflow-y:hidden;h@6EV,L@E0l,1:}O@M_l,H:{margin-bottom:0}3U@6GW,I@DC~,1:}X@M_l,A:{border:0}j@M_l,4j@6M0,E:border-left:0}v@M_l,N@LJ0,K@Mh0,1:hk@6UV,N@Mdk,N@LJ0,I@MnG,G@Mi0,N@LJ0,Y@Mh0,N@LJ0,K@5NV,S:d:last-child{border-right:0}f@6S0,n@6YQ,K@Mtz,1:hg@6R~,B::last-childS@6Il,V@MxF,1j:d{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;J@Jw~,F:font-size:21px;J@120,L:;color:#333;border:0;I@25z,K:solid #e5e5e5}label{L@7RW,F:max-width:100%;H@Kt~,I:;font-weight:bold}L@75~,J@WT,F:border-box;-mozN@6fW,L@Sl,1:}g@6gl,F:margin:4px 0 0;I@6hl,I@Qj,Y:}input[type="file"]{display:block}K@6j0,P:display:block;width:100%}G@ClG,Q:,select[size]{height:auto}1G@6k_,K@14E,f@6mE,J@9JU,q:}output{display:block;padding-top:7px;font-size:14px;N@DV~,1U:color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;N@DV~,B:color:#555;M@9R0,L@A10,1:;I@E0l,4:ccc;I@6sG,V@F6l,M:1px rgba(0,0,0,0.075);i@8Ml,J@Itk,13@6uW,3:-o-H@IL~,q@6vv,H@IL~,p@6vv,1:}K@8OS,V:border-color:#66afe9;outline:0;V@F6l,r@6~b,1:;b@8NW,c@6~q,1:}G@72G,a:moz-placeholder{color:#999;opacity:1}_@71S,B:color:#999}e@72G,B:color:#999}1H@739,J@9OT,L@HcG,i:;opacity:1}textarea.form-control{height:auto}L@75~,N@Yz,1:}q@76m,1N@77e,H:line-height:34px}4I@79S,H:line-height:30px}P@79S,2:lgQ@79s,3T@7E~,U:line-height:46px}}.form-group{I@6Dl,I:}.radio,.checkbox{I@7Jl,U:display:block;margin-top:10px;I@8hV,1:}T@7Kz,G@Nn0,Y:padding-left:20px;margin-bottom:0;J@AxF,F:cursor:pointer}26@7N0,I:position:absolute;I@7PU,I:margin-top:4px \9}Y@7Q7,G:margin-top:-5px}V@7Qz,L@7RW,Y:padding-left:20px;margin-bottom:0;M@7SW,J@AxF,F:cursor:pointer}z@7TW,U:margin-top:0;margin-left:10px}J@CKW,2v@7VN,J:cursor:not-allowed}1r@7Ye,J:cursor:not-allowed}1n@7_s,J:cursor:not-allowed}L@8ly,o:padding-top:7px;padding-bottom:7px;margin-bottom:0}K@8ly,d@7dd,q:padding-left:0;padding-right:0}.input-sm{height:30px;H@B7V,V:font-size:12px;line-height:1.5;H@Ns~,1:}G@7gW,T:height:30px;line-height:30px}h@7hL,C:height:auto}S@7lU,D:{height:30px;H@B7V,V:font-size:12px;line-height:1.5;H@Ns~,1:}Z@7kE,T:height:30px;line-height:30px}1I@7lM,C:height:auto}S@7lU,K:-static{height:30px;H@B7V,q:font-size:12px;line-height:1.5}.input-lg{height:46px;I@CxG,F@Efv,M@7tV,H@NsG,j:}select.input-lg{height:46px;line-height:46px}h@7rC,C:height:auto}S@7vS,D:{height:46px;I@CxG,F@Efv,M@7tV,H@NsG,1:}I@7kE,j:lg .form-control{height:46px;line-height:46px}1I@7vK,C:height:auto}S@7vS,K:-static{height:46px;I@CxG,F@Efv,L@7tV,F:}.has-feedback{H@7Jl,1:}R@8yU,1:{K@7zl,1:}N@82E,1n:position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;J@81j,1:}X@824,d:width:46px;height:46px;line-height:46px}X@83O,d:width:30px;height:30px;line-height:30px}4H@84h,E:color:#3c763d}R@89G,L@89j,V@F6l,M:1px rgba(0,0,0,0.075);h@8NW,1:}Q@89G,S::focus{border-color:#2b542c;V@F6l,V@8Qf,7:67b168;h@8NW,H:,0 0 6px #67b168}W@8El,E:color:#3c763d;L@89j,J@NPG,6:ff0d8}Q@89G,O:-feedback{color:#3c763d}4H@8HE,E:color:#8a6d3b}Q@8OF,1:{L@8MG,V@F6l,M:1px rgba(0,0,0,0.075);h@8NW,1:}X@8OF,L:border-color:#66512c;V@F6l,b@8Pf,h@8NW,T:,0 0 6px #c0a16b}.has-warningJ@8oW,F:{color:#8a6d3b;L@8MG,J@Kil,6:cf8e3}Q@8OF,O:-feedback{color:#8a6d3b}3y@8Tl,E:color:#a94442}P@8Y0,L@8dE,V@F6l,M:1px rgba(0,0,0,0.075);h@8NW,1:}O@8Y0,7::focus{L@8_y,V@F6l,W@8Qf,6:e8483;h@8NW,H:,0 0 6px #ce8483}U@8cS,E:color:#a94442;L@8dE,J@Kil,6:2dede}O@8Y0,O:-feedback{color:#a94442}J@8fk,1:~N@82E,9:top:25px}o@8fk,k:top:0}.help-block{display:block;margin-top:5px;J@8hV,E:color:#737373}P@1_l,J@8ll,6:group{L@7RW,G:margin-bottom:0;L@7SW,1:}Q@8ll,1:{L@7RW,B:width:auto;L@7SW,1:}Y@8ll,K@FEG,1:}P@8pV,M:{display:inline-table;L@7SW,1:}R@8pV,H@8RW,S@8pU,t@8pF,B:width:auto}P@8pV,Q:>.form-control{width:100%}S@8rR,G:margin-bottom:0;L@7SW,1:}g@8si,L@7RW,T:margin-top:0;margin-bottom:0;L@7SW,1:}J@8si,_@8vD,F:padding-left:0}J@8si,L@CKV,j@8wo,I@7Jl,E:margin-left:0}n@8yH,7:top:0}}n@910,1:,N@910,f@8~U,i:margin-top:0;margin-bottom:0;padding-top:7px}o@910,G:min-height:27px}I@910,l:form-group{margin-left:-15px;margin-right:-15px}P@1_l,I@910,10:control-label{text-align:right;margin-bottom:0;padding-top:7px}}I@910,_@8yV,B:right:15px}P@1_l,I@910,T@978,N@97f,2:}}P@1_l,I@910,T@98r,M:padding-top:6px}}.btn{L@7RW,G:margin-bottom:0;J@AxF,I:text-align:center;M@7SW,U@9Ba,Q@9Be,F:cursor:pointer;L@A10,1:;H@E0l,C:transparent;I@DC~,X:;padding:6px 12px;font-size:14px;N@DV~,I@6sG,P@9FP,4:-mozI@9FW,L@9GE,H:user-select:none}1U@9Gu,K@14E,f@6mE,J@9JU,1:}X@9Jp,7@C~,4:333;K@Hkl,1:}O@9Ky,A:outline:0;L@A10,1:;R@F6l,Q@9MP,J@8NW,P@9N9,1:}q@9Na,J@9OT,J@81j,1:;8@71G,4:.65;L@NvR,4:65);O@EIW,d:box-shadow:none}.btn-default{color:#333;M@9R0,I:border-color:#ccc}24@9Ri,B:color:#333;J@HcG,6:6e6e6;K@9UU,1:}1B@9Sb,L@A10,1:}8j@9WR,M@9R0,m:border-color:#ccc}.btn-default .badge{color:#fff;K@1nW,Q:3}.btn-primary{color:#fff;O@1nW,1:;K@9gl,1:}V@9oE,1a@9hb,B:color:#fff;I@NPG,S:286090;border-color:#204d74}1B@9i0,L@A10,1:}L@9q0,N@9tT,P@AoW,7e@9mv,O@1nW,1:;K@9gl,Z:}.btn-primary .badge{color:#337ab7;L@AQl,P:}.btn-success{color:#fff;I@NPG,S:5cb85c;border-color:#4cae4c}24@9xf,B:color:#fff;I@NPG,S:449d44;border-color:#398439}X@A8G,Y@AjG,8:success{L@A10,1:}8j@A1O,I@NPG,S:5cb85c;border-color:#4cae4c}K@AAx,E:color:#5cb85c;L@AQl,M:}.btn-info{color:#fff;I@NPG,S:5bc0de;border-color:#46b8da}1n@ADA,B:color:#fff;J@1nW,R:1b0d5;border-color:#269abc}12@AG0,L@A10,1:}7t@AHT,I@NPG,w:5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;L@AQl,P:}.btn-warning{color:#fff;J@Kil,R:0ad4e;border-color:#eea236}V@AZW,1a@ASt,B:color:#fff;J@HcG,R:c971f;border-color:#d58512}X@Ac~,Y@AjG,8:warning{L@A10,1:}8j@AX7,J@Kil,y:0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;L@AQl,O:}.btn-danger{color:#fff;K@NPG,Q:534f;border-color:#d43f3a}1z@Ahw,B:color:#fff;I@NPG,S:c9302c;border-color:#ac2925}18@Aky,L@A10,1:}8S@AmW,K@NPG,w:534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;L@AQl,P:}.btn-link{color:#337ab7;J@AxF,G:border-radius:0}1T@Axs,S@GWl,1:;O@EIW,G:box-shadow:none}w@A~_,P:border-color:transparent}V@A~j,F:{color:#23527c;G@Hkl,A:underline;S@GWl,1:}K@Gxz,U@AJE,18@B3V,B:color:#777;K@Hkl,1:}R@B5F,I@CxG,F@Efv,M@7tV,H@NsG,S:}.btn-sm,.btn-group-sm>.btn{H@B7V,V:font-size:12px;line-height:1.5;H@Ns~,1:}R@B8h,k:padding:1px 5px;font-size:12px;line-height:1.5;H@Ns~,1A:}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}1S@BBh,R:width:100%}.fade{opacity:0;J@Itk,N:opacity .15s linear;-o-U@BEy,1:;U@BEy,1O:}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;I@EKG,G:}tr.collapse.in{H@Oil,J:}tbody.collapse.in{H@Oil,J:-group}.collapsing{I@7Jl,9:height:0;G@ImW,I@Itk,T@BLU,2:-od@BJx,c@BJy,I@Itk,14:-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;I@Itk,M@BNk,3:-o-V@BOj,1:;V@BOj,1:}V@BPG,I@7Jl,L@7RW,L@7SW,1:}e@BQs,I@7Jl,B:float:left}3O@BS5,A:z-index:2}1h@BVh,x:margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar G@BPG,L@BYj,B:float:left}14@BZJ,G:margin-left:5px}19@B_h,G:border-radius:0}S@BbA,E:margin-left:0}R@BbA,H@CBG,N@BaU,T@Bc~,O@LCG,2:0}1R@Bdw,Q@M7~,2:0;N@LOG,2:0}L@BjF,C:{float:left}M@BjF,H@C6G,N@BhW,G:border-radius:0}p@BjF,1J@Bj0,T@Bc~,O@LCG,2:0}M@BjF,S@BeB,I@CDk,Q@M7~,2:0;N@LOG,D:0}.btn-group G@D1W,e@Bnj,A:outline:0}X@Bob,Z:padding-left:8px;padding-right:8px}_@Bpn,I:padding-left:12px;I@Bqj,1:}W@BtE,1:{R@F6l,Q@9MP,J@8NW,P@9N9,1:}f@BtE,O@EIW,u:box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{N@BvP,K@5QV,2:0}N@BwB,N:border-width:0 5px 5px}O@BTG,V@C0G,V@C0G,u:>.btn{display:block;float:none;width:100%;max-width:100%}O@BTG,N:-group>.btn{float:none}O@BTG,U@C0k,M@BWG,K@CAl,l@C0k,U:margin-top:-1px;margin-left:0}P@BTG,H@C6G,H@CBG,H:{border-radius:0}Q@BTG,S@C3l,O@LCG,4:4px;T@Bc~,Q@M7~,2:0}P@BTG,S@BeB,1:{Q@M7~,4:4px;O@LCG,2:0;N@LOG,2:0}O@BTG,O@D9w,N@BhW,G:border-radius:0}O@BTG,a@CAz,P@Bj0,13@CAl,T@Bc~,Q@M7~,2:0}O@BTG,q@CDC,O@LCG,2:0;N@LOG,2:0}K@CIG,i:{display:table;width:100%;table-layout:fixed;O@CPW,1:}P@CIG,1:,V@CIG,C:{float:none;I@P5l,A:;width:1%}a@CIG,B:width:100%}X@CIG,O:dropdown-menu{left:auto}e@CLl,2s@CKh,I:position:absolute;M@CNw,J@81j,E:}.input-group{I@7Jl,8@OnC,6:table;O@CPW,1:}S@CPw,f:float:none;padding-left:0;padding-right:0}Q@Czj,1:{I@7Jl,l:z-index:2;float:left;width:100%;margin-bottom:0}U@CYi,T@CZz,6:addon,a@CZz,D:{height:46px;I@CxG,F@Efv,M@7tV,H@NsG,1:}J@CgV,2:lgL@CkE,T@CZz,n@CXE,T:height:46px;line-height:46px}L@Chl,41@CYv,C:height:auto}H@ClW,1M@CcT,C:height:30px;H@B7V,V:font-size:12px;line-height:1.5;H@Ns~,1:}N@CgV,J@CkG,T@ClW,P@CXE,P@Cli,T:height:30px;line-height:30px}4M@Chl,C:height:auto}I@8RV,H@D1l,1:,Q@Czj,1:{I@P5l,1:}I@8RV,2M@Co0,G:border-radius:0}I@8RV,H@D1l,A:{width:1%;I@DC~,1:;L@7SW,1:}J@8RV,W:padding:6px 12px;font-size:14px;J@AxF,g:line-height:1;color:#555;text-align:center;L@HcG,1:;I@E0l,4:ccc;H@Dp0,1:}I@8RV,A:.input-sm{H@B7V,F:font-size:12px;H@Ns~,1:}I@8RV,A:.input-lg{I@CxG,F:font-size:18px;H@NsG,1:}I@8RV,L@CKV,I@8RV,1: M@7WW,E:{margin-top:0}58@Czj,T@Bc~,O@LCG,2:0}I@8RV,S::first-child{border-right:0}R@Czj,2:laS@C~C,2:laM@C~C,J@D1z,X@D1l,2h@D7i,Q@M7~,2:0;N@LOG,2:0}I@8RV,Q::last-child{border-left:0}G@Cll,1:{I@7Jl,C:font-size:0;I@DC~,1:}M@Cll,H@7Jl,1:}L@Cll,N:+.btn{margin-left:-1px}L@Cll,6::hoverH@D1l,e@DFU,A:z-index:2}G@Cll,4::firV@D6~,3:firJ@D7W,J:{margin-right:-1px}G@Cll,s@D6x,1E:{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{I@7Jl,O:display:block}.nav>li>a{I@7Jl,E:display:block;H@JyW,1:}W@DMB,L@Hkl,L@HcG,1:}J@DNU,B:color:#777}I@DNU,7::hover,I@DNU,I::focus{color:#777;L@Hkl,S@GWl,K:;cursor:not-allowed}o@DQH,L@HcG,1:;K@DRW,g:}.nav .nav-divider{height:1px;margin:9px 0;G@ImW,J@HcG,i:5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{I@25z,1M:solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;N@DV~,H@E0l,C:transparent;H@Dp0,U: 4px 0 0}.nav-tabs>li>a:hover{R@DXi,1:}L@DYy,u@DYW,B:color:#555;M@9R0,L@E0l,1:;K@Dnl,R:transparent;cursor:default}O@DaG,R:width:100%;border-bottom:0}N@DaG,F:>li{float:none}N@DaG,O:>li>a{text-align:center;H@Kt~,1:}N@DaG,Q@DvU,J:top:auto;left:auto}P@1_l,N@DaG,4:>li{I@P5l,A:;width:1%}N@DaG,N:>li>a{margin-bottom:0}}N@DaG,L:>li>a{margin-right:0;H@Dp0,1:}N@DaG,1R@DmG,L@E0l,1:}P@1_l,N@DaG,6:>li>a{I@25z,B:solid #ddd;H@Dp0,9: 4px 0 0}N@DaG,1R@DmG,O@Dnl,g:}}.nav-pills>li{float:left}.nav-pills>li>a{H@Dp0,Y:}.nav-pills>li+li{margin-left:2px}M@Dqj,w@DqG,B:color:#fff;O@1nW,1b:}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}I@Del,B:float:none}K@DuG,I:text-align:center;H@Kt~,1:}d@DvG,J:top:auto;left:auto}P@1_l,I@Del,I@P5l,A:;width:1%}K@DuG,H:margin-bottom:0}}K@DyS,t:border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;H@Dp0,1:}T@E09,V@E08,f@E40,L@E0l,1:}P@1_l,P:.nav-tabs-justified>li>a{I@25z,B:solid #ddd;H@Dp0,9: 4px 0 0}T@E09,V@E08,f@E40,O@Dnl,2:}}N@E5E,V:display:none;visibility:hidden}L@E6C,E:display:block;I@EKG,1:}P@E7A,G:margin-top:-1px;O@LCG,2:0;N@LOG,A:0}.navbar{I@7Jl,G:min-height:50px;J@Jw~,H@E0l,C:transparent}P@1_l,8:.navbar{H@Dp0,2:}}P@1_l,R:.navbar-header{float:left}}H@EY0,J@ECk,J:padding-right:15px;I@2dE,X@EDl,r@F6l,1:;N@8NW,N@F8V,1:;W@EG0,1:}G@EY0,K:.in{overflow-y:auto}P@1_l,H@EY0,O:width:auto;border-top:0;O@EIW,G:box-shadow:none}G@EY0,A:.collapse{O@P7l,1:;U@EKG,N:height:auto !important;H@ELF,R@ELa,1:}G@EY0,4:.in{I@EMW,1:}1i@EMu,W:padding-left:0;padding-right:0}}g@EMu,U@EQ0,H:max-height:340px}x@EQp,g@EMu,U@EQ0,I:max-height:200px}}1t@EWP,a:margin-right:-15px;margin-left:-15px}P@1_l,1t@EWP,U:margin-right:0;margin-left:0}}J@EYz,Y:z-index:1000;border-width:0 0 1px}P@1_l,J@EYz,H:border-radius:0}}c@Ea5,g:position:fixed;right:0;left:0;z-index:1030}P@1_l,c@Ea5,z:border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}K@EO0,Q:{bottom:0;margin-bottom:0;K@Eek,h:}.navbar-brand{float:left;padding:15px 15px;F@Efv,T:line-height:20px;height:50px}d@Egj,K@Hkl,1:}I@Ehl,E:display:block}P@1_l,18@Eim,Y:margin-left:-15px}}.navbar-toggle{I@7Jl,1G:float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;S@GWl,1:;L@A10,1:;H@E0l,C:transparent;H@Dp0,1:}L@FxB,A:outline:0}P@Eoi,r:display:block;width:22px;height:2px;border-radius:1px}O@Eoi,Q:+.icon-bar{margin-top:4px}P@1_l,x:.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}H@GPF,H:padding-top:10px;K@EtG,H:line-height:20px}I@QHW,7:767px){W@GmG,p:{position:static;float:none;width:auto;margin-top:0;S@GWl,A:;border:0;O@EIW,G:box-shadow:none}X@GmG,4:li>aX@F0G,h: .dropdown-header{padding:5px 15px 5px 25px}X@GmG,M:li>a{line-height:20px}X@GmG,J@FoW,O@Gg0,C:>li>a:focus{L@A10,2:}}P@1_l,v:.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}H@GPF,H:padding-top:15px;G@EtG,s:5px}}.navbar-form{margin-left:-15px;margin-right:-15px;I@JyW,X@EDl,I@25z,I@EnW,1L@F6l,N@8NW,r@F8V,X:margin-top:8px;margin-bottom:8px}P@1_l,O@FSV,1:{L@7RW,G:margin-bottom:0;L@7SW,1:}J@FSV,8:control{L@7RW,B:width:auto;L@7SW,1:}J@FSV,F:control-static{K@FEG,1:}P@FG0,M:{display:inline-table;L@7SW,1:}20@FG0,B:width:auto}P@FG0,Q:>.form-control{width:100%}S@FJK,G:margin-bottom:0;L@7SW,1:}g@FKb,L@7RW,T:margin-top:0;margin-bottom:0;L@7SW,1:}s@FMo,F:padding-left:0}1M@FO4,I@7Jl,E:margin-left:0}n@FQA,7:top:0}}I@QHW,7:767px){O@FSV,1:{H@Kt~,1:}_@FSV,H:margin-bottom:0}}P@1_l,1C:.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;H@ELF,O@EIW,H:box-shadow:none}}U@FWi,D:margin-top:0;O@LCG,2:0;N@LOG,2:0}T@EO0,b:nav>li>.dropdown-menu{margin-bottom:0;O@LCG,4:4px;N@LOG,4:4px;T@Bc~,Q@M7~,k:0}.navbar-btn{margin-top:8px;margin-bottom:8px}J@FbF,G:margin-top:10px;I@8hV,1:}J@FcD,10:margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;I@6Dl,1:}P@1_l,x:.navbar-text{float:left;margin-left:15px;margin-right:15px}}P@1_l,D:.navbar-left{L@FgT,F:}.navbar-right{N@FhC,1F:margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{J@Kil,6:8f8f8;K@F~0,1:}O@FzW,H:brand{color:#777}O@FzW,K@GMk,G@Fql,Q:brand:focus{color:#5e5e5e;S@GWl,1:}P@FvW,F:ext{color:#777}O@FzW,K:nav>li>a{color:#777}O@FzW,r@FoS,B:color:#333;S@GWl,1:}O@FzW,1b@FqQ,B:color:#555;J@HcG,6:7e7e7}O@FzW,1h@Ft4,B:color:#ccc;S@GWl,1:}V@FvW,H@Nq~,1:}U@FvW,O@GIk,K@FxC,J@NPG,3:dd}U@FvW,B: .icon-bar{I@NPG,4:888}O@FzW,H@EPk,G@Fql,5:form{K@F~0,1:}O@FzW,1W@F~k,J@HcG,H:7e7e7;color:#555}I@QHW,7:767px){O@FzW,O@Gg0,H:>li>a{color:#777}O@FzW,O@Gg0,c@FoV,R@Gil,H:focus{color:#333;S@GWl,1:}O@FzW,O@Gg0,b@FqT,V@GlW,O@GIk,l@G8W,B:color:#555;J@HcG,6:7e7e7}O@FzW,O@Gg0,d@Ft7,N@GlW,P@GVW,J@Fql,N@GlW,H@FuV,B:color:#ccc;S@GWl,2:}}O@FzW,G:link{color:#777}O@FzW,B:link:hover{8@KRR,3:33}H@FzW,K:btn-link{color:#777}H@FzW,N@GxV,I@GIU,6:focus{8@KRR,3:33}H@FzW,J@Gx~,Q@AJE,O@GFW,1_@GIk,R:color:#ccc}.navbar-inverse{I@NPG,4:222;K@GLF,1:}O@Gm0,K:brand{color:#9d9d9d}O@Gm0,l@GMk,B:color:#fff;S@GWl,1:}O@Gm0,J:text{color:#9d9d9d}R@Gm0,K:>li>a{color:#9d9d9d}R@Gm0,K@FoV,J@Gfl,N:>li>a:focus{color:#fff;S@GWl,1:}R@Gm0,J@FqT,J@Gfl,h@Gml,H@G8~,B:color:#fff;O@GU0,1:}R@Gm0,1e@GUr,B:color:#444;S@GWl,1:}O@Gm0,7:toggle{G@DRW,2:3}O@Gm0,L@Fwj,G@Gfl,D:toggle:focus{K@1nW,2:3}O@Gm0,H:toggle .icon-bar{L@AQl,1:}O@Gm0,H@EPk,G@Gfl,5:form{K@Gak,1:}R@Gm0,6:>.openW@GV0,4:open_@Gqi,F:>.open>a:focus{O@GU0,C:;color:#fff}I@QHW,7:767px){n@Gm0,G:dropdown-header{K@GLF,1:}l@Gm0,A: .divider{O@GU0,1:}m@Gm0,J:li>a{color:#9d9d9d}m@Gm0,J@FoW,d@Gfl,N:>li>a:focus{color:#fff;S@GWl,1:}v@Gm0,x@Gn0,t@Gql,Q:active>a:focus{color:#fff;O@GU0,1:}n@Gm0,2H@Gpd,B:color:#444;S@GWl,2:}}O@Gm0,J:link{color:#9d9d9d}O@Gm0,M:link:hover{color:#fff}H@Gm0,N:btn-link{color:#9d9d9d}H@Gm0,d@GxV,I::focus{color:#fff}H@Gm0,J@Gx~,Q@AJE,G@GaG,1h@GxV,d:color:#444}.breadcrumb{padding:8px 15px;J@Jw~,G:list-style:none;J@Kil,6:5f5f5;H@Dp0,G:}.breadcrumb>li{K@FEG,1:}P@H10,f:content:"/\00a0";padding:0 5px;color:#ccc}K@H2E,N:color:#777}.pagination{L@7RW,T:padding-left:0;margin:20px 0;H@Dp0,V:}.pagination>li{display:inline}a@H4o,I@7Jl,S:float:left;padding:6px 12px;N@DV~,L@Hkl,E:color:#337ab7;M@9R0,L@E0l,I:;margin-left:-1px}y@H8Q,E:margin-left:0;Q@M7~,4:4px;N@LOG,4:4px}w@HAe,R@Lxk,4:4px;O@LCG,4:4px}1Y@HCc,E:color:#23527c;L@HcG,1:;H@Nq~,1:}K@HHG,2H@HFU,L:z-index:2;color:#fff;O@1nW,1:;K@DRW,G:;cursor:default}M@HKk,4:spanN@HKj,N@HDD,1e@HKQ,B:color:#777;M@9R0,I@Nq~,J:cursor:not-allowed}H@HQk,3:>a,H@HQk,6:>span{I@CxG,F:font-size:18px}I@HQk,m@HOy,Q@M7~,4:6px;N@LOG,4:6px}11@HQk,R@Lxk,4:6px;O@LCG,4:6px}g@HSo,H@B7V,F:font-size:12px}13@HU6,T@M7~,1:;Q@LOG,1:}11@HWA,V@Lrk,R@LCG,1W:}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}R@H_0,L@7RW,H:padding:5px 14px;M@9R0,L@E0l,K:;border-radius:15px}_@HbH,L@Hkl,L@HcG,1:}X@Hcd,C:float:right}e@HdQ,B:float:left}I@He~,K@Hez,q@Heu,B:color:#777;M@9R0,e:cursor:not-allowed}.label{display:inline;N@Hh9,1A:font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;I@DC~,1:;O@H~f,J@Hji,d:}a.label:hover,a.label:focus{color:#fff;L@Hkl,q:cursor:pointer}.label:empty{display:none}.btn .label{I@7Jl,O:top:-1px}.label-default{L@I0l,1:}L@Hnh,X@Hnb,I@NPG,M:5e5e5e}.label-primary{O@1nW,1:}L@Hpi,X@Hpc,I@NPG,M:286090}.label-success{I@NPG,7:5cb85c}L@Hrj,X@Hrd,I@NPG,J:449d44}.label-info{I@NPG,I:5bc0de}.label-infoK@HpW,H@Htl,J@1nW,L:1b0d5}.label-warning{J@Kil,6:0ad4e}r@HvC,J@HcG,K:c971f}.label-danger{K@NPG,5:534f}p@HxC,I@NPG,E:c9302c}.badge{L@7RW,1O:min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;O@H~f,I@DC~,J:;text-align:center;M@I0l,u:border-radius:10px}.badge:empty{display:none}.btn .badge{I@7Jl,j:top:-1px}.btn-xs .badge{top:0;padding:1px 5px}S@I3P,B:color:#fff;L@Hkl,F:cursor:pointer}N@KGl,_@I56,E:color:#337ab7;L@AQl,1:}G@LBW,K:>.badge{float:right}G@LBW,1I:>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{I@I8j,X:margin-bottom:30px;color:inherit;L@HcG,1:}T@IHE,R:color:inherit}.jumbotron p{J@6Dl,i:font-size:21px;font-weight:200}.jumbotron>hr{O@ICD,1:}n@ICd,H@NsG,b:}.jumbotron .container{max-width:100%}_@IER,Q:.jumbotron{padding:48px 0}n@ICd,I@IGU,J:padding-right:60px}T@IHE,q:font-size:63px}}.thumbnail{display:block;padding:4px;J@Jw~,N@DV~,M@9R0,L@E0l,1:;I@6sG,J@Itk,N@IKy,3:-o-X@IL~,1:;X@IL~,1:}W@16h,Z:margin-left:auto;margin-right:auto}s@INj,K@DRW,1:}K@IO~,g:padding:9px;color:#333}.alert{padding:15px;J@Jw~,H@E0l,C:transparent;H@Dp0,27:}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}b@ITo,J:padding-right:35px}p@IUm,I@7Jl,n:top:-2px;right:-21px;color:inherit}.alert-success{J@NPG,6:ff0d8;K@NJU,F:;color:#3c763d}I@IXz,P:border-top-color:#c9e2b3}R@IYj,Q:color:#2b542c}.alert-info{P@NPG,K@NPh,s:;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}O@IaS,T:color:#245269}.alert-warning{J@Kil,1K:cf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}R@IdD,S:color:#66512c}.alert-danger{J@Kil,e:2dede;border-color:#ebccd1;color:#a94442}H@IfG,P:border-top-color:#e4b9c0}Q@If~,E:color:#843534}d@Igh,5:from{Q@IlC,4:}to{K@IlC,9:0 0}}@-o-V@IkW,5:from{Q@IlC,4:}to{K@IlC,5:0 0}}W@IkV,5:from{Q@IlC,4:}to{K@IlC,F:0 0}}.progress{G@ImW,C:height:20px;J@Jw~,J@Kil,6:5f5f5;I@6sG,V@F6l,K:2px rgba(0,0,0,0.1);N@8NW,1~:2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;O@1nW,1:;R@F6l,K@2UV,4:15);J@8NW,K@2UV,4:15);Y@Itk,T@IuK,P@IuN,1:}r@IvG,I@IzG,2n@JfD,2~@IzG,2w@JaW,1:;Y@J4H,P@J4P,1:}p@J5I,v@J69,2:-oo@J6G,m@J7z,N:}.progress-bar-success{I@NPG,7:5cb85c}V@IvG,9:-success{I@IzG,2n@JfD,2~@IzG,2w@JaW,K:}.progress-bar-info{I@NPG,7:5bc0de}V@IvG,6:-info{I@IzG,2n@JfD,2~@IzG,2w@JaW,1:}M@JUz,J@Kil,6:0ad4e}V@IvG,9:-warning{I@IzG,2n@JfD,2~@IzG,2w@JaW,1:}L@JdU,K@NPG,5:534f}V@IvG,8:-danger{I@IzG,2n@JfD,2~@IzG,2w@JaW,O:}.media{margin-top:15px}J@JoU,1i:margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}J@Jsj,V:>.pull-right{padding-left:10px}U@Jrh,J:padding-right:10px}a@JsY,I@P5l,1:;I@JtW,F:}.media-middle{L@7SW,F:}.media-bottom{L@Juk,T:}.media-heading{margin-top:0;H@Kt~,t:}.media-list{padding-left:0;list-style:none}.list-group{J@Jw~,F:padding-left:0}G@LBW,1:{I@7Jl,E:display:block;I@JyW,J:margin-bottom:-1px;M@9R0,L@E0l,1:}T@LBW,O@LCG,4:4px;N@LOG,4:4px}H@LBW,R:last-child{margin-bottom:0;R@Lxk,4:4px;Q@M7~,5:4px}aG@LBW,D:{color:#555}aG@LBW,Q@Kgk,C:color:#333}aH@LBW,N@KpF,7::focus{L@Hkl,B:color:#555;J@Kil,6:5f5f5}H@KGl,19@K5j,L@HcG,V:;color:#777;cursor:not-allowed}H@KGl,Q@KA~,P@KHV,W@KBk,P@KHV,8:disabledO@KQF,M:heading{color:inherit}H@KGl,2B@KA~,B:color:#777}N@KGl,U@KGk,V@KEF,L:z-index:2;color:#fff;O@1nW,1:;K@DRW,1:}N@KGl,g@K8F,a@KMO,U@KEF,g@K8F,W@KLW,4p@KJF,E:color:inherit}N@KGl,I@Kgk,1i@KO~,E:color:#c7ddef}H@Kgl,M:success{color:#3c763d;J@NPG,7:ff0d8}aH@Kgl,N:success{color:#3c763d}aH@Kgl,6:succesR@KA0,F:color:inherit}aH@Kgl,j@KUC,E:color:#3c763d;J@NPG,7:0e9c6}aH@Kgl,1T@KVw,B:color:#fff;J@1nW,6:c763d;K@89j,1:}H@Kgl,J:info{color:#31708f;O@NPG,2:}aH@Kgl,K:info{color:#31708f}aH@Kgl,U@K_T,F:color:inherit}aH@Kgl,d@KaW,E:color:#31708f;I@NPG,8:c4e3f3}aH@Kgl,1K@Kc9,B:color:#fff;J@1nW,R:1708f;border-color:#31708f}H@Kgl,M:warning{color:#8a6d3b;J@Kil,7:cf8e3}aH@Kgl,N:warning{color:#8a6d3b}aH@Kgl,X@Kgd,F:color:inherit}aH@Kgl,j@Khj,E:color:#8a6d3b;O@Kil,2:}aH@Kgl,1T@KjT,B:color:#fff;I@NPG,7:8a6d3b;K@8MG,1:}H@Kgl,L:danger{color:#a94442;J@Kil,7:2dede}aH@Kgl,M:danger{color:#a94442}aH@Kgl,4:dangR@KJl,G:{color:inherit}aH@Kgl,h@Kp8,E:color:#a94442;J@HcG,7:bcccc}aH@Kgl,6:dangerQ@KcD,v@KrL,B:color:#fff;P@KsW,K@8dE,1:}P@Kgl,D:margin-top:0;H@Kt~,1:}H@Kgl,h:text{margin-bottom:0;line-height:1.3}.panel{J@Jw~,M@9R0,H@E0l,C:transparent;I@6sG,J@F6l,L@6~W,6:0.05);a@Kxl,e:}.panel-body{padding:15px}.panel-heading{I@JyW,I@25z,I@EnW,S@LCG,Q@LOG,1:}f@L00,1L:color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}1X@L2I,S:color:inherit}.panel-footer{I@JyW,J@Kil,6:5f5f5;L@EDl,5:#ddd;V@Lrk,T@M7~,1:}r@L6c,M:margin-bottom:0}.panelT@L8h,Z@LAl,H@LBV,1:{I@Eek,H:;border-radius:0}28@L9q,D:border-top:0;S@LCG,Q@LOG,1:}24@LDC,G:border-bottom:0;V@Lrk,T@M7~,1:}t@LGd,J:border-top-width:0}Q@LHt,J:border-top-width:0}1C@LIf,G:margin-bottom:0}1_@LKB,I@2dE,J:padding-right:15px}P@LOi,P@MgW,V@LQ0,1:{S@LCG,Q@LOG,1:}4d@LOi,Q@LOG,1:;R@LCG,1:}v@LOi,19@LY0,x@LUk,m@LjW,1_@LRl,T@LY0,m@LmG,15@LRl,X@LUk,R@M3V,m@Lp0,1_@LRl,G: th:first-child{Q@LOG,1:}v@LOi,d@MB~,U@LNF,X@LQV,S@MB~,19@LjW,h@LaF,6E@Ljj,R@LCG,1:}O@LyG,P@MgW,T@M6l,1:{V@Lrk,T@M7~,1:}s@LyG,P@MgW,V@M6l,2g@LuW,T@M7~,1:;U@Lxk,1:}Ah@LyG,T@M7~,1:}w@LyG,O@MGF,f@M1F,V@M30,R@LkF,g@M5V,Q@LkF,1B@M1F,a@MGF,X@M30,O@MGF,f@M1F,X@M30,2p@MGF,U@Lxk,1:}1z@MJc,L@EDl,5:#ddd}l@MMr,p@MMp,D:border-top:0}M@MZw,f@MOG,9:border:0}Z@MZw,_@LRl,G@MO0,99@MQV,E:border-left:0}AK@MZw,F:border-right:0}V@MZw,H@5GF,e@MiG,O@5FW,N@MZx,a@Mmh,4J@MmG,G:border-bottom:0}O@MZw,6W@MrG,G:border-bottom:0}O@Mwl,c:{border:0;margin-bottom:0}.panel-group{I@MzF,1:}J@N3z,H:{margin-bottom:0;H@Dp0,1:}J@N3z,N:+.panel{margin-top:5px}K@N3z,O:heading{border-bottom:0}K@N3z,P@N2E,13@N1k,L@EDl,5:#ddd}Q@N3z,E:{border-top:0}s@N3z,I@25z,Q:solid #ddd}.panel-default{H@Nq~,1:}U@N5y,B:color:#333;J@Kil,6:5f5f5;H@Nq~,1:}T@N5y,1:+H@LLG,B:panel-body{J@ICD,3:dd}T@N5y,M: .badge{color:#f5f5f5;K@1nW,2:3}M@N5y,Z@NZG,L@Dnl,J:ddd}.panel-primary{K@DRW,1:}M@NGD,J:heading{color:#fff;O@1nW,1:;K@DRW,1:}M@NGD,P@N2E,_:panel-body{border-top-color:#337ab7}M@NGD,T:heading .badge{color:#337ab7;L@AQl,1:}u@NGD,L@Dnl,M:337ab7}.panel-success{K@NJU,1:}U@NIG,E:color:#3c763d;J@NPG,6:ff0d8;K@NJU,1:}T@NIG,1:+H@LLG,B:panel-body{J@ICD,6:6e9c6}T@NIG,M: .badge{color:#dff0d8;J@1nW,6:c763d}M@NIG,Z@NZG,L@Dnl,J:d6e9c6}.panel-info{K@NPh,1:}Q@NRO,F:{color:#31708f;P@NPG,K@NPh,1:}Q@NRO,1:+H@LLG,B:panel-body{O@NQy,1:}Y@NRO,E:color:#d9edf7;J@1nW,6:1708f}r@NSe,L@Dnl,g:bce8f1}.panel-warning{border-color:#faebcc}T@NWE,F:{color:#8a6d3b;J@Kil,R:cf8e3;border-color:#faebcc}v@NWE,O@NXB,1:}T@NWE,M: .badge{color:#fcf8e3;I@NPG,7:8a6d3b}M@NWE,Z@NZG,M@Dnl,e:aebcc}.panel-danger{border-color:#ebccd1}S@NbW,F:{color:#a94442;J@Kil,R:2dede;border-color:#ebccd1}u@NbW,O@NcS,1:}S@NbW,M: .badge{color:#f2dede;O@KsW,1:}L@NbW,Z@NZG,L@Dnl,P:ebccd1}.embed-responsive{I@7Jl,m:display:block;height:0;padding:0;overflow:hidden}2B@Nh9,18:position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}Z@Nls,6:16by9{L@NlV,1:}d@Nls,P:padding-bottom:75%}.well{G@Nn0,D:padding:19px;J@Jw~,J@Kil,6:5f5f5;I@E0l,7:e3e3e3;I@6sG,V@F6l,L:1px rgba(0,0,0,0.05);e@8NW,K:5)}.well blockquote{I@Nq~,T@NrK,N:}.well-lg{padding:24px;H@NsG,M:}.well-sm{padding:9px;H@Ns~,1m:}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;O@NvR,1:}Q@Nvr,B:color:#000;L@Hkl,Q:cursor:pointer;opacity:.5;L@NvR,1A:50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;N@Yz,1:}92@NzZ,Q:content:" ";display:table}4Q@O87,1M:clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{M@FhC,C:}.pull-left{L@FgT,7:}.hide{N@PD0,7:}.show{O@P7l,p:}.invisible{visibility:hidden}.text-hide{font:0/0 a;I@OHE,H:text-shadow:none;S@GWl,I:;border:0}.hidden{N@PD0,1:;S@OJ8,t:}.affix{position:fixed}@-ms-viewport{width:device-width}l@OKd,N@PD0,1:}3t@OLq,N@PD0,1:}I@QHW,J:767px){.visible-xs{O@P7l,I:}table.visible-xs{D@OSJ,F:}tr.visible-xs{S@Oil,1:}S@OSr,T@P5l,2:}}I@QHW,P:767px){.visible-xs-block{O@P7l,2:}}I@QHW,Q:767px){.visible-xs-inline{P@P9i,2:}}I@QHW,7:767px){P@OWy,K@FEG,D: !important}}k@Ocl,C:.visible-sm{O@P7l,j:}table.visible-sm{display:table}tr.visible-sm{S@Oil,T:}th.visible-sm,td.visible-sm{T@P5l,2:}}k@Ocl,I:.visible-sm-block{O@P7l,2:}}k@Ocl,J:.visible-sm-inline{P@P9i,2:}}k@Ocl,P@OfC,K@FEG,D: !important}}l@OgG,C:.visible-md{O@P7l,j:}table.visible-md{display:table}tr.visible-md{S@Oil,T:}th.visible-md,td.visible-md{T@P5l,2:}}l@OgG,I:.visible-md-block{O@P7l,2:}}l@OgG,I@OoV,1:{P@P9i,2:}}l@OgG,P@OoV,K@FEG,D: !important}}I@OgG,K:1200px){.visible-lg{O@P7l,1:}H@Oql,S:display:table}tr.visible-lg{S@Oil,1:}S@OsG,T@P5l,2:}}I@OgG,8:1200px){H@OOk,1:{O@P7l,2:}}I@OgG,R:1200px){.visible-lg-inline{P@P9i,2:}}I@OgG,8:1200px){P@OwQ,K@FEG,D: !important}}I@QHW,I:767px){.hidden-xs{N@PD0,2:}}k@Ocl,B:.hidden-sm{N@PD0,2:}}l@OgG,B:.hidden-md{N@PD0,2:}}I@OgG,J:1200px){.hidden-lg{N@PD0,H:}}.visible-print{N@PD0,T:}@media print{.visible-print{O@P7l,Z:}table.visible-print{display:table}H@P4G,S@Oil,1:}Y@P59,T@P5l,N:}}.visible-print-block{N@PD0,Z:}@media print{.visible-print-block{O@P7l,2:}}M@P8F,N@PD0,E:}@media print{M@P8F,P@P9i,2:}}L@P8F,7:-block{N@PD0,E:}@media print{L@P8F,7:-block{K@FEG,d: !important}}@media print{.hidden-print{N@PD0,1:}1Sr@PDS,2hOHxq;
--- a/skins/bootstrap/css.txt
+++ b/skins/bootstrap/css.txt
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
--- a/skins/bootstrap/css.txt
+++ b/skins/bootstrap/css.txt
@@ -0,0 +1,11 @@
1 /*!
2 * Bootstrap v3.3.2 (http://getbootstrap.com)
3 * Copyright 2011-2015 Twitter, Inc.
4 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 */
6
7 /*!
8 * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=fe63ebfc82d223781373)
9 * Config saved to config.json and https://gist.github.com/fe63ebfc82d223781373
10 *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure, Bootstrap v3.3.2 (http:/*!
11 * Bootstrablock}S@6f,L@7RW,N@H~f,1:}M@7w,M:display:none;height:0}I@8k,F:display:none}a{S@GWl,d:}a:active,a:hover{outline:0}abbr[title]{O@25z,2f:}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;I@7Jl,N@H~f,1e:}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{S@Vz,V@WT,M@W~,j:;height:0}pre{overflow:auto}code,kbd,pre,samp{X@JN,E:font-size:1em}b@KB,1A:color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{J@ME,1:}1A@M_,J@Yz,M:button;cursor:pointer}b@OV,F:cursor:default}m@PP,P:border:0;padding:0}input{I@Qj,1:}M@7WW,1:,J@CKW,1:{J@WT,F:border-box;-mozN@6fW,M@Sl,A:padding:0}1W@TL,C:height:auto}L@75~,T@VU,S@Vz,V@WT,M@W~,1:}K@75~,H@YV,z@Xy,N@Yz,A:}fieldset{I@E0l,K:c0c0c0;margin:0 2px;T@_G,1I:}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{G@CPW,f:collapse;border-spacing:0}td,th{padding:0}1L@cQ,D:@media print{J@e0,Y@eO,M@e~,N@EIW,1F: !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{G@Hkl,O:underline}a[href]:after{R@i8,l:}abbr[title]:after{content:" (" attr(title) ")"}l@j_,Q:content:""}pre,blockquote{I@E0l,4:999;N@mk,e:}thead{display:table-header-group}tr,img{N@mk,10:}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{M@oh,t:}select{background:#fff !important}.navbar{display:none}W@qM,W@qw,8:}.label{I@E0l,B:000}.table{G@CPW,K:collapse !important}K@t0,L@AQl,C: !important}b@u0,L@E0l,F: !important}}*{J@WT,F:border-box;-mozN@6fW,L@Sl,I:}*:before,*:after{J@WT,F:border-box;-mozN@6fW,L@Sl,L:}html{font-size:10px;e@yo,6:}body{t@zc,F:font-size:14px;N@DV~,B:color:#333;L@AQl,1:}T@10p,b:font-family:inherit;font-size:inherit;J@120,H:}a{color:#337ab7;K@Hkl,V:}a:hover,a:focus{color:#23527c;G@Hkl,I:underline}a:focus{K@14E,f@6mE,J@9JU,L:}figure{margin:0}img{L@7SW,1:}l@16S,r:display:block;max-width:100%;height:auto}.img-rounded{H@NsG,S:}.img-thumbnail{padding:4px;N@DV~,M@9R0,L@E0l,1:;I@6sG,J@Itk,K@1C0,Y@1BG,V@1Aj,L@7RW,1C:max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;J@Jw~,9:border:0;L@EDl,1B:#eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;G@ImW,M@CNw,9:border:0}o@1HO,1B:position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}f@1Jf,12:font-family:inherit;font-weight:500;line-height:1.1;color:inherit}3l@1L_,J@AxF,P:line-height:1;color:#777}L@1QB,G:margin-top:20px;I@8hV,1:}1t@1RB,o:font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;I@8hV,1:}1t@1UM,2f:font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{J@Jw~,V:font-size:16px;font-weight:300;C@795,4:1.4}P@1_l,x:.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{J@Kil,2O:cf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{I@DC~,H:}.text-lowercase{O@1f9,H:}.text-uppercase{O@26z,1V:}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}L@1h~,1b:color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}I@1kE,1d:color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}K@1mS,a:color:#843534}.bg-primary{color:#fff;O@1nW,K:}a.bg-primary:hover{I@NPG,J:286090}.bg-success{J@NPG,P:ff0d8}a.bg-success:hover{I@NPG,G:c1e2b3}.bg-info{O@NPG,H:}a.bg-info:hover{J@KsW,I:fd9ee}.bg-warning{J@Kil,P:cf8e3}a.bg-warning:hover{J@Kil,H:7ecb5}.bg-danger{J@Kil,6:2dede}I@1tW,J@HcG,J:4b9b9}.page-header{J@1uW,J:margin:40px 0 20px;I@25z,U:solid #eee}ul,ol{margin-top:0;I@8hV,1:}O@1wP,2B:margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{L@7RW,H@1zk,Y:padding-right:5px}dl{margin-top:0;I@MzF,7:}dt,dd{M@DV~,b:}dt{font-weight:bold}dd{margin-left:0}P@1_l,I@21k,o:float:left;width:160px;clear:left;text-align:right;G@ImW,N:text-overflow:ellipsis;I@DC~,b:}.dl-horizontal dd{margin-left:180px}}b@256,C:cursor:help;T@25z,R:}.initialism{font-size:90%;O@26z,j:}blockquote{padding:10px 20px;margin:0 0 20px;H@28F,R:border-left:5px solid #eee}1A@290,G:margin-bottom:0}H@2CW,_@2Al,S:display:block;font-size:80%;N@DV~,B:color:#777}1A@2CW,L@2Di,1:}J@2Jy,M@2LW,Z:{padding-right:15px;padding-left:0;S@2FQ,V:border-left:0;text-align:right}3G@2GT,B:content:''}3A@2Jy,U:content:'\00A0 \2014'}address{J@Jw~,I:font-style:normal;M@DV~,J:}code,kbd,pre,samp{u@2P6,n:}code{padding:2px 4px;font-size:90%;color:#c7254e;J@Kil,6:9f2f4;H@Dp0,j:}kbd{padding:2px 4px;font-size:90%;color:#fff;K@1nW,2:3;H@Ns~,1:;R@F6l,N@2UV,1:;J@8NW,N@2UV,o:}kbd kbd{padding:0;font-size:100%;font-weight:bold;O@EIW,1F:box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;N@DV~,L@2YC,W:word-wrap:break-word;color:#333;J@Kil,6:5f5f5;I@E0l,4:ccc;H@Dp0,19:}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;S@GWl,X:;border-radius:0}.pre-scrollable{H@2bk,10:overflow-y:scroll}.container{margin-right:auto;margin-left:auto;I@2dE,J:padding-right:15px}P@1_l,O:.container{width:750px}}O@OgG,P:{.container{width:970px}}I@OgG,X:1200px){.container{width:1170px}}G@O90,_:{margin-right:auto;margin-left:auto;I@2dE,y:padding-right:15px}.row{margin-left:-15px;margin-right:-15px}8R@2jD,I@7Jl,F:min-height:1px;I@2dE,J:padding-right:15px}26@2sx,h:float:left}.col-xs-12{width:100%}.col-xs-11{I@3R0,C:}.col-xs-10{I@2wU,V:}.col-xs-9{width:75%}.col-xs-8{I@3Sl,x:}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{I@3UV,x:}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{I@3WE,38:}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{I@33G,2d:}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{H@4nG,31:}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{H@3iG,d:}.col-xs-push-6{left:50%}.col-xs-push-5{H@3BW,G:}.col-xs-push-4{H@3tk,d:}.col-xs-push-3{left:25%}.col-xs-push-2{H@3vG,G:}.col-xs-push-1{G@3MW,Q:}.col-xs-push-0{left:auto}I@3EW,H:margin-left:100%}G@3EW,2:1{O@3FT,1:}G@3EW,2:0{O@3GD,o:}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{O@3qT,P:}.col-xs-offset-7{margin-H@3iG,v:}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-H@3BW,I:}.col-xs-offset-4{O@3td,1:}H@3Kl,X:margin-left:25%}.col-xs-offset-2{C@8xy,D:16.66666667%}G@3EW,1:{N@3vz,W:}.col-xs-offset-0{margin-left:0}P@1_l,26@3No,h:float:left}.col-sm-12{width:100%}.col-sm-11{I@3R0,C:}.col-sm-10{I@2wU,V:}.col-sm-9{width:75%}.col-sm-8{I@3Sl,x:}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{I@3UV,x:}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{I@3WE,38:}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{I@33G,2d:}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{H@4nG,1N:}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}G@3g0,1Q:left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{H@3iG,d:}.col-sm-push-6{left:50%}.col-sm-push-5{H@3BW,G:}.col-sm-push-4{H@3tk,d:}.col-sm-push-3{left:25%}.col-sm-push-2{H@3vG,G:}.col-sm-push-1{G@3MW,y:}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}I@3nk,O@3FT,J:}.col-sm-offset-10{O@3GD,o:}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{O@3qT,P:}.col-sm-offset-7{margin-H@3iG,v:}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-H@3BW,I:}.col-sm-offset-4{O@3td,o:}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{C@8xy,U:16.66666667%}.col-sm-offset-1{N@3vz,X:}.col-sm-offset-0{margin-left:0}}O@OgG,1:{26@3xY,h:float:left}.col-md-12{width:100%}.col-md-11{I@3R0,C:}.col-md-10{I@2wU,V:}.col-md-9{width:75%}.col-md-8{I@3Sl,x:}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{I@3UV,x:}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{I@3WE,38:}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{I@33G,2d:}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{H@4nG,31:}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{H@3iG,d:}.col-md-push-6{left:50%}.col-md-push-5{H@3BW,G:}.col-md-push-4{H@3tk,d:}.col-md-push-3{left:25%}.col-md-push-2{H@3vG,G:}.col-md-push-1{G@3MW,Q:}.col-md-push-0{left:auto}I@4Ml,H:margin-left:100%}G@4Ml,2:1{O@3FT,1:}G@4Ml,2:0{O@3GD,o:}.col-md-offset-9{margin-left:75%}.col-md-offset-8{O@3qT,P:}.col-md-offset-7{margin-H@3iG,1:}H@4RW,d:margin-left:50%}.col-md-offset-5{margin-H@3BW,I:}.col-md-offset-4{O@3td,o:}.col-md-offset-3{margin-left:25%}.col-md-offset-2{C@8xy,D:16.66666667%}G@4Ml,1:{N@3vz,X:}.col-md-offset-0{margin-left:0}}I@OgG,8:1200px){26@4XI,h:float:left}.col-lg-12{width:100%}.col-lg-11{I@3R0,C:}.col-lg-10{I@2wU,V:}.col-lg-9{width:75%}.col-lg-8{I@3Sl,x:}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{I@3UV,x:}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{I@3WE,38:}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{I@33G,2d:}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{H@4nG,31:}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{H@3iG,d:}.col-lg-push-6{left:50%}.col-lg-push-5{H@3BW,G:}.col-lg-push-4{H@3tk,d:}.col-lg-push-3{left:25%}.col-lg-push-2{H@3vG,G:}.col-lg-push-1{G@3MW,Q:}.col-lg-push-0{left:auto}I@4wW,H:margin-left:100%}G@4wW,2:1{O@3FT,1:}G@4wW,2:0{O@3GD,o:}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{O@3qT,P:}.col-lg-offset-7{margin-H@3iG,1:}H@50G,d:margin-left:50%}.col-lg-offset-5{margin-H@3BW,I:}.col-lg-offset-4{O@3td,o:}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{C@8xy,D:16.66666667%}G@4wW,1:{N@3vz,c:}.col-lg-offset-0{margin-left:0}}table{S@GWl,1w:}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;I@MzF,1:}I@5nl,I@63G,1:hJ@5oV,v@59l,C@5Ai,N@DV~,I@JtW,1:;L@EDl,5:#ddd}I@5nl,1:{L@Juk,1:;S@5Cs,1:}a@5FG,3F@5Dw,18:border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{L@AQl,1:}R@5KE,K@5Jk,I@6HV,K@5LF,K@5Jk,15@5KW,S:padding:5px}.table-bordered{L@E0l,1:}R@MQG,R@5OG,1:hI@5OG,1V@5Nf,L@E0l,1:}R@MQG,I@5OG,B:head>tr>td{N@5QV,1:}e@5Qu,J@Kil,6:9f9f9}S@5S0,J@Kil,6:5f5f5}P@5Sv,l:position:static;float:none;display:table-column}l@5UE,R:position:static;float:none;I@P5l,1:}H@5nl,4c@5W8,J@Kil,6:5f5f5}N@5jl,1:dZ@5bB,21@5b8,J@HcG,6:8e8e8}H@5nl,1:dH@5g0,4X@5eA,J@NPG,6:ff0d8}N@5jl,2f@5jW,J@NPG,6:0e9c6}H@5nl,6:d.infoK@63G,M@5oR,6:d.infoI@59l,6:h.infoI@63G,2k@5oP,O@NPG,1:}N@5jl,2R@5ry,I@NPG,7:c4e3f3}H@5nl,1:dH@5xF,4X@5vP,J@Kil,6:cf8e3}N@5jl,2f@5~k,O@Kil,1:}H@5nl,4c@638,J@Kil,6:2dede}N@5jl,1:dZ@69B,21@698,J@HcG,6:bcccc}H@M_l,k:{overflow-x:auto;min-height:0.01%}@media screenG@O~W,7:767px){H@M_l,C:{width:100%;J@6Dl,I:overflow-y:hidden;h@6EV,L@E0l,1:}O@M_l,H:{margin-bottom:0}3U@6GW,I@DC~,1:}X@M_l,A:{border:0}j@M_l,4j@6M0,E:border-left:0}v@M_l,N@LJ0,K@Mh0,1:hk@6UV,N@Mdk,N@LJ0,I@MnG,G@Mi0,N@LJ0,Y@Mh0,N@LJ0,K@5NV,S:d:last-child{border-right:0}f@6S0,n@6YQ,K@Mtz,1:hg@6R~,B::last-childS@6Il,V@MxF,1j:d{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;J@Jw~,F:font-size:21px;J@120,L:;color:#333;border:0;I@25z,K:solid #e5e5e5}label{L@7RW,F:max-width:100%;H@Kt~,I:;font-weight:bold}L@75~,J@WT,F:border-box;-mozN@6fW,L@Sl,1:}g@6gl,F:margin:4px 0 0;I@6hl,I@Qj,Y:}input[type="file"]{display:block}K@6j0,P:display:block;width:100%}G@ClG,Q:,select[size]{height:auto}1G@6k_,K@14E,f@6mE,J@9JU,q:}output{display:block;padding-top:7px;font-size:14px;N@DV~,1U:color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;N@DV~,B:color:#555;M@9R0,L@A10,1:;I@E0l,4:ccc;I@6sG,V@F6l,M:1px rgba(0,0,0,0.075);i@8Ml,J@Itk,13@6uW,3:-o-H@IL~,q@6vv,H@IL~,p@6vv,1:}K@8OS,V:border-color:#66afe9;outline:0;V@F6l,r@6~b,1:;b@8NW,c@6~q,1:}G@72G,a:moz-placeholder{color:#999;opacity:1}_@71S,B:color:#999}e@72G,B:color:#999}1H@739,J@9OT,L@HcG,i:;opacity:1}textarea.form-control{height:auto}L@75~,N@Yz,1:}q@76m,1N@77e,H:line-height:34px}4I@79S,H:line-height:30px}P@79S,2:lgQ@79s,3T@7E~,U:line-height:46px}}.form-group{I@6Dl,I:}.radio,.checkbox{I@7Jl,U:display:block;margin-top:10px;I@8hV,1:}T@7Kz,G@Nn0,Y:padding-left:20px;margin-bottom:0;J@AxF,F:cursor:pointer}26@7N0,I:position:absolute;I@7PU,I:margin-top:4px \9}Y@7Q7,G:margin-top:-5px}V@7Qz,L@7RW,Y:padding-left:20px;margin-bottom:0;M@7SW,J@AxF,F:cursor:pointer}z@7TW,U:margin-top:0;margin-left:10px}J@CKW,2v@7VN,J:cursor:not-allowed}1r@7Ye,J:cursor:not-allowed}1n@7_s,J:cursor:not-allowed}L@8ly,o:padding-top:7px;padding-bottom:7px;margin-bottom:0}K@8ly,d@7dd,q:padding-left:0;padding-right:0}.input-sm{height:30px;H@B7V,V:font-size:12px;line-height:1.5;H@Ns~,1:}G@7gW,T:height:30px;line-height:30px}h@7hL,C:height:auto}S@7lU,D:{height:30px;H@B7V,V:font-size:12px;line-height:1.5;H@Ns~,1:}Z@7kE,T:height:30px;line-height:30px}1I@7lM,C:height:auto}S@7lU,K:-static{height:30px;H@B7V,q:font-size:12px;line-height:1.5}.input-lg{height:46px;I@CxG,F@Efv,M@7tV,H@NsG,j:}select.input-lg{height:46px;line-height:46px}h@7rC,C:height:auto}S@7vS,D:{height:46px;I@CxG,F@Efv,M@7tV,H@NsG,1:}I@7kE,j:lg .form-control{height:46px;line-height:46px}1I@7vK,C:height:auto}S@7vS,K:-static{height:46px;I@CxG,F@Efv,L@7tV,F:}.has-feedback{H@7Jl,1:}R@8yU,1:{K@7zl,1:}N@82E,1n:position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;J@81j,1:}X@824,d:width:46px;height:46px;line-height:46px}X@83O,d:width:30px;height:30px;line-height:30px}4H@84h,E:color:#3c763d}R@89G,L@89j,V@F6l,M:1px rgba(0,0,0,0.075);h@8NW,1:}Q@89G,S::focus{border-color:#2b542c;V@F6l,V@8Qf,7:67b168;h@8NW,H:,0 0 6px #67b168}W@8El,E:color:#3c763d;L@89j,J@NPG,6:ff0d8}Q@89G,O:-feedback{color:#3c763d}4H@8HE,E:color:#8a6d3b}Q@8OF,1:{L@8MG,V@F6l,M:1px rgba(0,0,0,0.075);h@8NW,1:}X@8OF,L:border-color:#66512c;V@F6l,b@8Pf,h@8NW,T:,0 0 6px #c0a16b}.has-warningJ@8oW,F:{color:#8a6d3b;L@8MG,J@Kil,6:cf8e3}Q@8OF,O:-feedback{color:#8a6d3b}3y@8Tl,E:color:#a94442}P@8Y0,L@8dE,V@F6l,M:1px rgba(0,0,0,0.075);h@8NW,1:}O@8Y0,7::focus{L@8_y,V@F6l,W@8Qf,6:e8483;h@8NW,H:,0 0 6px #ce8483}U@8cS,E:color:#a94442;L@8dE,J@Kil,6:2dede}O@8Y0,O:-feedback{color:#a94442}J@8fk,1:~N@82E,9:top:25px}o@8fk,k:top:0}.help-block{display:block;margin-top:5px;J@8hV,E:color:#737373}P@1_l,J@8ll,6:group{L@7RW,G:margin-bottom:0;L@7SW,1:}Q@8ll,1:{L@7RW,B:width:auto;L@7SW,1:}Y@8ll,K@FEG,1:}P@8pV,M:{display:inline-table;L@7SW,1:}R@8pV,H@8RW,S@8pU,t@8pF,B:width:auto}P@8pV,Q:>.form-control{width:100%}S@8rR,G:margin-bottom:0;L@7SW,1:}g@8si,L@7RW,T:margin-top:0;margin-bottom:0;L@7SW,1:}J@8si,_@8vD,F:padding-left:0}J@8si,L@CKV,j@8wo,I@7Jl,E:margin-left:0}n@8yH,7:top:0}}n@910,1:,N@910,f@8~U,i:margin-top:0;margin-bottom:0;padding-top:7px}o@910,G:min-height:27px}I@910,l:form-group{margin-left:-15px;margin-right:-15px}P@1_l,I@910,10:control-label{text-align:right;margin-bottom:0;padding-top:7px}}I@910,_@8yV,B:right:15px}P@1_l,I@910,T@978,N@97f,2:}}P@1_l,I@910,T@98r,M:padding-top:6px}}.btn{L@7RW,G:margin-bottom:0;J@AxF,I:text-align:center;M@7SW,U@9Ba,Q@9Be,F:cursor:pointer;L@A10,1:;H@E0l,C:transparent;I@DC~,X:;padding:6px 12px;font-size:14px;N@DV~,I@6sG,P@9FP,4:-mozI@9FW,L@9GE,H:user-select:none}1U@9Gu,K@14E,f@6mE,J@9JU,1:}X@9Jp,7@C~,4:333;K@Hkl,1:}O@9Ky,A:outline:0;L@A10,1:;R@F6l,Q@9MP,J@8NW,P@9N9,1:}q@9Na,J@9OT,J@81j,1:;8@71G,4:.65;L@NvR,4:65);O@EIW,d:box-shadow:none}.btn-default{color:#333;M@9R0,I:border-color:#ccc}24@9Ri,B:color:#333;J@HcG,6:6e6e6;K@9UU,1:}1B@9Sb,L@A10,1:}8j@9WR,M@9R0,m:border-color:#ccc}.btn-default .badge{color:#fff;K@1nW,Q:3}.btn-primary{color:#fff;O@1nW,1:;K@9gl,1:}V@9oE,1a@9hb,B:color:#fff;I@NPG,S:286090;border-color:#204d74}1B@9i0,L@A10,1:}L@9q0,N@9tT,P@AoW,7e@9mv,O@1nW,1:;K@9gl,Z:}.btn-primary .badge{color:#337ab7;L@AQl,P:}.btn-success{color:#fff;I@NPG,S:5cb85c;border-color:#4cae4c}24@9xf,B:color:#fff;I@NPG,S:449d44;border-color:#398439}X@A8G,Y@AjG,8:success{L@A10,1:}8j@A1O,I@NPG,S:5cb85c;border-color:#4cae4c}K@AAx,E:color:#5cb85c;L@AQl,M:}.btn-info{color:#fff;I@NPG,S:5bc0de;border-color:#46b8da}1n@ADA,B:color:#fff;J@1nW,R:1b0d5;border-color:#269abc}12@AG0,L@A10,1:}7t@AHT,I@NPG,w:5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;L@AQl,P:}.btn-warning{color:#fff;J@Kil,R:0ad4e;border-color:#eea236}V@AZW,1a@ASt,B:color:#fff;J@HcG,R:c971f;border-color:#d58512}X@Ac~,Y@AjG,8:warning{L@A10,1:}8j@AX7,J@Kil,y:0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;L@AQl,O:}.btn-danger{color:#fff;K@NPG,Q:534f;border-color:#d43f3a}1z@Ahw,B:color:#fff;I@NPG,S:c9302c;border-color:#ac2925}18@Aky,L@A10,1:}8S@AmW,K@NPG,w:534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;L@AQl,P:}.btn-link{color:#337ab7;J@AxF,G:border-radius:0}1T@Axs,S@GWl,1:;O@EIW,G:box-shadow:none}w@A~_,P:border-color:transparent}V@A~j,F:{color:#23527c;G@Hkl,A:underline;S@GWl,1:}K@Gxz,U@AJE,18@B3V,B:color:#777;K@Hkl,1:}R@B5F,I@CxG,F@Efv,M@7tV,H@NsG,S:}.btn-sm,.btn-group-sm>.btn{H@B7V,V:font-size:12px;line-height:1.5;H@Ns~,1:}R@B8h,k:padding:1px 5px;font-size:12px;line-height:1.5;H@Ns~,1A:}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}1S@BBh,R:width:100%}.fade{opacity:0;J@Itk,N:opacity .15s linear;-o-U@BEy,1:;U@BEy,1O:}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;I@EKG,G:}tr.collapse.in{H@Oil,J:}tbody.collapse.in{H@Oil,J:-group}.collapsing{I@7Jl,9:height:0;G@ImW,I@Itk,T@BLU,2:-od@BJx,c@BJy,I@Itk,14:-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;I@Itk,M@BNk,3:-o-V@BOj,1:;V@BOj,1:}V@BPG,I@7Jl,L@7RW,L@7SW,1:}e@BQs,I@7Jl,B:float:left}3O@BS5,A:z-index:2}1h@BVh,x:margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar G@BPG,L@BYj,B:float:left}14@BZJ,G:margin-left:5px}19@B_h,G:border-radius:0}S@BbA,E:margin-left:0}R@BbA,H@CBG,N@BaU,T@Bc~,O@LCG,2:0}1R@Bdw,Q@M7~,2:0;N@LOG,2:0}L@BjF,C:{float:left}M@BjF,H@C6G,N@BhW,G:border-radius:0}p@BjF,1J@Bj0,T@Bc~,O@LCG,2:0}M@BjF,S@BeB,I@CDk,Q@M7~,2:0;N@LOG,D:0}.btn-group G@D1W,e@Bnj,A:outline:0}X@Bob,Z:padding-left:8px;padding-right:8px}_@Bpn,I:padding-left:12px;I@Bqj,1:}W@BtE,1:{R@F6l,Q@9MP,J@8NW,P@9N9,1:}f@BtE,O@EIW,u:box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{N@BvP,K@5QV,2:0}N@BwB,N:border-width:0 5px 5px}O@BTG,V@C0G,V@C0G,u:>.btn{display:block;float:none;width:100%;max-width:100%}O@BTG,N:-group>.btn{float:none}O@BTG,U@C0k,M@BWG,K@CAl,l@C0k,U:margin-top:-1px;margin-left:0}P@BTG,H@C6G,H@CBG,H:{border-radius:0}Q@BTG,S@C3l,O@LCG,4:4px;T@Bc~,Q@M7~,2:0}P@BTG,S@BeB,1:{Q@M7~,4:4px;O@LCG,2:0;N@LOG,2:0}O@BTG,O@D9w,N@BhW,G:border-radius:0}O@BTG,a@CAz,P@Bj0,13@CAl,T@Bc~,Q@M7~,2:0}O@BTG,q@CDC,O@LCG,2:0;N@LOG,2:0}K@CIG,i:{display:table;width:100%;table-layout:fixed;O@CPW,1:}P@CIG,1:,V@CIG,C:{float:none;I@P5l,A:;width:1%}a@CIG,B:width:100%}X@CIG,O:dropdown-menu{left:auto}e@CLl,2s@CKh,I:position:absolute;M@CNw,J@81j,E:}.input-group{I@7Jl,8@OnC,6:table;O@CPW,1:}S@CPw,f:float:none;padding-left:0;padding-right:0}Q@Czj,1:{I@7Jl,l:z-index:2;float:left;width:100%;margin-bottom:0}U@CYi,T@CZz,6:addon,a@CZz,D:{height:46px;I@CxG,F@Efv,M@7tV,H@NsG,1:}J@CgV,2:lgL@CkE,T@CZz,n@CXE,T:height:46px;line-height:46px}L@Chl,41@CYv,C:height:auto}H@ClW,1M@CcT,C:height:30px;H@B7V,V:font-size:12px;line-height:1.5;H@Ns~,1:}N@CgV,J@CkG,T@ClW,P@CXE,P@Cli,T:height:30px;line-height:30px}4M@Chl,C:height:auto}I@8RV,H@D1l,1:,Q@Czj,1:{I@P5l,1:}I@8RV,2M@Co0,G:border-radius:0}I@8RV,H@D1l,A:{width:1%;I@DC~,1:;L@7SW,1:}J@8RV,W:padding:6px 12px;font-size:14px;J@AxF,g:line-height:1;color:#555;text-align:center;L@HcG,1:;I@E0l,4:ccc;H@Dp0,1:}I@8RV,A:.input-sm{H@B7V,F:font-size:12px;H@Ns~,1:}I@8RV,A:.input-lg{I@CxG,F:font-size:18px;H@NsG,1:}I@8RV,L@CKV,I@8RV,1: M@7WW,E:{margin-top:0}58@Czj,T@Bc~,O@LCG,2:0}I@8RV,S::first-child{border-right:0}R@Czj,2:laS@C~C,2:laM@C~C,J@D1z,X@D1l,2h@D7i,Q@M7~,2:0;N@LOG,2:0}I@8RV,Q::last-child{border-left:0}G@Cll,1:{I@7Jl,C:font-size:0;I@DC~,1:}M@Cll,H@7Jl,1:}L@Cll,N:+.btn{margin-left:-1px}L@Cll,6::hoverH@D1l,e@DFU,A:z-index:2}G@Cll,4::firV@D6~,3:firJ@D7W,J:{margin-right:-1px}G@Cll,s@D6x,1E:{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{I@7Jl,O:display:block}.nav>li>a{I@7Jl,E:display:block;H@JyW,1:}W@DMB,L@Hkl,L@HcG,1:}J@DNU,B:color:#777}I@DNU,7::hover,I@DNU,I::focus{color:#777;L@Hkl,S@GWl,K:;cursor:not-allowed}o@DQH,L@HcG,1:;K@DRW,g:}.nav .nav-divider{height:1px;margin:9px 0;G@ImW,J@HcG,i:5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{I@25z,1M:solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;N@DV~,H@E0l,C:transparent;H@Dp0,U: 4px 0 0}.nav-tabs>li>a:hover{R@DXi,1:}L@DYy,u@DYW,B:color:#555;M@9R0,L@E0l,1:;K@Dnl,R:transparent;cursor:default}O@DaG,R:width:100%;border-bottom:0}N@DaG,F:>li{float:none}N@DaG,O:>li>a{text-align:center;H@Kt~,1:}N@DaG,Q@DvU,J:top:auto;left:auto}P@1_l,N@DaG,4:>li{I@P5l,A:;width:1%}N@DaG,N:>li>a{margin-bottom:0}}N@DaG,L:>li>a{margin-right:0;H@Dp0,1:}N@DaG,1R@DmG,L@E0l,1:}P@1_l,N@DaG,6:>li>a{I@25z,B:solid #ddd;H@Dp0,9: 4px 0 0}N@DaG,1R@DmG,O@Dnl,g:}}.nav-pills>li{float:left}.nav-pills>li>a{H@Dp0,Y:}.nav-pills>li+li{margin-left:2px}M@Dqj,w@DqG,B:color:#fff;O@1nW,1b:}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}I@Del,B:float:none}K@DuG,I:text-align:center;H@Kt~,1:}d@DvG,J:top:auto;left:auto}P@1_l,I@Del,I@P5l,A:;width:1%}K@DuG,H:margin-bottom:0}}K@DyS,t:border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;H@Dp0,1:}T@E09,V@E08,f@E40,L@E0l,1:}P@1_l,P:.nav-tabs-justified>li>a{I@25z,B:solid #ddd;H@Dp0,9: 4px 0 0}T@E09,V@E08,f@E40,O@Dnl,2:}}N@E5E,V:display:none;visibility:hidden}L@E6C,E:display:block;I@EKG,1:}P@E7A,G:margin-top:-1px;O@LCG,2:0;N@LOG,A:0}.navbar{I@7Jl,G:min-height:50px;J@Jw~,H@E0l,C:transparent}P@1_l,8:.navbar{H@Dp0,2:}}P@1_l,R:.navbar-header{float:left}}H@EY0,J@ECk,J:padding-right:15px;I@2dE,X@EDl,r@F6l,1:;N@8NW,N@F8V,1:;W@EG0,1:}G@EY0,K:.in{overflow-y:auto}P@1_l,H@EY0,O:width:auto;border-top:0;O@EIW,G:box-shadow:none}G@EY0,A:.collapse{O@P7l,1:;U@EKG,N:height:auto !important;H@ELF,R@ELa,1:}G@EY0,4:.in{I@EMW,1:}1i@EMu,W:padding-left:0;padding-right:0}}g@EMu,U@EQ0,H:max-height:340px}x@EQp,g@EMu,U@EQ0,I:max-height:200px}}1t@EWP,a:margin-right:-15px;margin-left:-15px}P@1_l,1t@EWP,U:margin-right:0;margin-left:0}}J@EYz,Y:z-index:1000;border-width:0 0 1px}P@1_l,J@EYz,H:border-radius:0}}c@Ea5,g:position:fixed;right:0;left:0;z-index:1030}P@1_l,c@Ea5,z:border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}K@EO0,Q:{bottom:0;margin-bottom:0;K@Eek,h:}.navbar-brand{float:left;padding:15px 15px;F@Efv,T:line-height:20px;height:50px}d@Egj,K@Hkl,1:}I@Ehl,E:display:block}P@1_l,18@Eim,Y:margin-left:-15px}}.navbar-toggle{I@7Jl,1G:float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;S@GWl,1:;L@A10,1:;H@E0l,C:transparent;H@Dp0,1:}L@FxB,A:outline:0}P@Eoi,r:display:block;width:22px;height:2px;border-radius:1px}O@Eoi,Q:+.icon-bar{margin-top:4px}P@1_l,x:.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}H@GPF,H:padding-top:10px;K@EtG,H:line-height:20px}I@QHW,7:767px){W@GmG,p:{position:static;float:none;width:auto;margin-top:0;S@GWl,A:;border:0;O@EIW,G:box-shadow:none}X@GmG,4:li>aX@F0G,h: .dropdown-header{padding:5px 15px 5px 25px}X@GmG,M:li>a{line-height:20px}X@GmG,J@FoW,O@Gg0,C:>li>a:focus{L@A10,2:}}P@1_l,v:.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}H@GPF,H:padding-top:15px;G@EtG,s:5px}}.navbar-form{margin-left:-15px;margin-right:-15px;I@JyW,X@EDl,I@25z,I@EnW,1L@F6l,N@8NW,r@F8V,X:margin-top:8px;margin-bottom:8px}P@1_l,O@FSV,1:{L@7RW,G:margin-bottom:0;L@7SW,1:}J@FSV,8:control{L@7RW,B:width:auto;L@7SW,1:}J@FSV,F:control-static{K@FEG,1:}P@FG0,M:{display:inline-table;L@7SW,1:}20@FG0,B:width:auto}P@FG0,Q:>.form-control{width:100%}S@FJK,G:margin-bottom:0;L@7SW,1:}g@FKb,L@7RW,T:margin-top:0;margin-bottom:0;L@7SW,1:}s@FMo,F:padding-left:0}1M@FO4,I@7Jl,E:margin-left:0}n@FQA,7:top:0}}I@QHW,7:767px){O@FSV,1:{H@Kt~,1:}_@FSV,H:margin-bottom:0}}P@1_l,1C:.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;H@ELF,O@EIW,H:box-shadow:none}}U@FWi,D:margin-top:0;O@LCG,2:0;N@LOG,2:0}T@EO0,b:nav>li>.dropdown-menu{margin-bottom:0;O@LCG,4:4px;N@LOG,4:4px;T@Bc~,Q@M7~,k:0}.navbar-btn{margin-top:8px;margin-bottom:8px}J@FbF,G:margin-top:10px;I@8hV,1:}J@FcD,10:margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;I@6Dl,1:}P@1_l,x:.navbar-text{float:left;margin-left:15px;margin-right:15px}}P@1_l,D:.navbar-left{L@FgT,F:}.navbar-right{N@FhC,1F:margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{J@Kil,6:8f8f8;K@F~0,1:}O@FzW,H:brand{color:#777}O@FzW,K@GMk,G@Fql,Q:brand:focus{color:#5e5e5e;S@GWl,1:}P@FvW,F:ext{color:#777}O@FzW,K:nav>li>a{color:#777}O@FzW,r@FoS,B:color:#333;S@GWl,1:}O@FzW,1b@FqQ,B:color:#555;J@HcG,6:7e7e7}O@FzW,1h@Ft4,B:color:#ccc;S@GWl,1:}V@FvW,H@Nq~,1:}U@FvW,O@GIk,K@FxC,J@NPG,3:dd}U@FvW,B: .icon-bar{I@NPG,4:888}O@FzW,H@EPk,G@Fql,5:form{K@F~0,1:}O@FzW,1W@F~k,J@HcG,H:7e7e7;color:#555}I@QHW,7:767px){O@FzW,O@Gg0,H:>li>a{color:#777}O@FzW,O@Gg0,c@FoV,R@Gil,H:focus{color:#333;S@GWl,1:}O@FzW,O@Gg0,b@FqT,V@GlW,O@GIk,l@G8W,B:color:#555;J@HcG,6:7e7e7}O@FzW,O@Gg0,d@Ft7,N@GlW,P@GVW,J@Fql,N@GlW,H@FuV,B:color:#ccc;S@GWl,2:}}O@FzW,G:link{color:#777}O@FzW,B:link:hover{8@KRR,3:33}H@FzW,K:btn-link{color:#777}H@FzW,N@GxV,I@GIU,6:focus{8@KRR,3:33}H@FzW,J@Gx~,Q@AJE,O@GFW,1_@GIk,R:color:#ccc}.navbar-inverse{I@NPG,4:222;K@GLF,1:}O@Gm0,K:brand{color:#9d9d9d}O@Gm0,l@GMk,B:color:#fff;S@GWl,1:}O@Gm0,J:text{color:#9d9d9d}R@Gm0,K:>li>a{color:#9d9d9d}R@Gm0,K@FoV,J@Gfl,N:>li>a:focus{color:#fff;S@GWl,1:}R@Gm0,J@FqT,J@Gfl,h@Gml,H@G8~,B:color:#fff;O@GU0,1:}R@Gm0,1e@GUr,B:color:#444;S@GWl,1:}O@Gm0,7:toggle{G@DRW,2:3}O@Gm0,L@Fwj,G@Gfl,D:toggle:focus{K@1nW,2:3}O@Gm0,H:toggle .icon-bar{L@AQl,1:}O@Gm0,H@EPk,G@Gfl,5:form{K@Gak,1:}R@Gm0,6:>.openW@GV0,4:open_@Gqi,F:>.open>a:focus{O@GU0,C:;color:#fff}I@QHW,7:767px){n@Gm0,G:dropdown-header{K@GLF,1:}l@Gm0,A: .divider{O@GU0,1:}m@Gm0,J:li>a{color:#9d9d9d}m@Gm0,J@FoW,d@Gfl,N:>li>a:focus{color:#fff;S@GWl,1:}v@Gm0,x@Gn0,t@Gql,Q:active>a:focus{color:#fff;O@GU0,1:}n@Gm0,2H@Gpd,B:color:#444;S@GWl,2:}}O@Gm0,J:link{color:#9d9d9d}O@Gm0,M:link:hover{color:#fff}H@Gm0,N:btn-link{color:#9d9d9d}H@Gm0,d@GxV,I::focus{color:#fff}H@Gm0,J@Gx~,Q@AJE,G@GaG,1h@GxV,d:color:#444}.breadcrumb{padding:8px 15px;J@Jw~,G:list-style:none;J@Kil,6:5f5f5;H@Dp0,G:}.breadcrumb>li{K@FEG,1:}P@H10,f:content:"/\00a0";padding:0 5px;color:#ccc}K@H2E,N:color:#777}.pagination{L@7RW,T:padding-left:0;margin:20px 0;H@Dp0,V:}.pagination>li{display:inline}a@H4o,I@7Jl,S:float:left;padding:6px 12px;N@DV~,L@Hkl,E:color:#337ab7;M@9R0,L@E0l,I:;margin-left:-1px}y@H8Q,E:margin-left:0;Q@M7~,4:4px;N@LOG,4:4px}w@HAe,R@Lxk,4:4px;O@LCG,4:4px}1Y@HCc,E:color:#23527c;L@HcG,1:;H@Nq~,1:}K@HHG,2H@HFU,L:z-index:2;color:#fff;O@1nW,1:;K@DRW,G:;cursor:default}M@HKk,4:spanN@HKj,N@HDD,1e@HKQ,B:color:#777;M@9R0,I@Nq~,J:cursor:not-allowed}H@HQk,3:>a,H@HQk,6:>span{I@CxG,F:font-size:18px}I@HQk,m@HOy,Q@M7~,4:6px;N@LOG,4:6px}11@HQk,R@Lxk,4:6px;O@LCG,4:6px}g@HSo,H@B7V,F:font-size:12px}13@HU6,T@M7~,1:;Q@LOG,1:}11@HWA,V@Lrk,R@LCG,1W:}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}R@H_0,L@7RW,H:padding:5px 14px;M@9R0,L@E0l,K:;border-radius:15px}_@HbH,L@Hkl,L@HcG,1:}X@Hcd,C:float:right}e@HdQ,B:float:left}I@He~,K@Hez,q@Heu,B:color:#777;M@9R0,e:cursor:not-allowed}.label{display:inline;N@Hh9,1A:font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;I@DC~,1:;O@H~f,J@Hji,d:}a.label:hover,a.label:focus{color:#fff;L@Hkl,q:cursor:pointer}.label:empty{display:none}.btn .label{I@7Jl,O:top:-1px}.label-default{L@I0l,1:}L@Hnh,X@Hnb,I@NPG,M:5e5e5e}.label-primary{O@1nW,1:}L@Hpi,X@Hpc,I@NPG,M:286090}.label-success{I@NPG,7:5cb85c}L@Hrj,X@Hrd,I@NPG,J:449d44}.label-info{I@NPG,I:5bc0de}.label-infoK@HpW,H@Htl,J@1nW,L:1b0d5}.label-warning{J@Kil,6:0ad4e}r@HvC,J@HcG,K:c971f}.label-danger{K@NPG,5:534f}p@HxC,I@NPG,E:c9302c}.badge{L@7RW,1O:min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;O@H~f,I@DC~,J:;text-align:center;M@I0l,u:border-radius:10px}.badge:empty{display:none}.btn .badge{I@7Jl,j:top:-1px}.btn-xs .badge{top:0;padding:1px 5px}S@I3P,B:color:#fff;L@Hkl,F:cursor:pointer}N@KGl,_@I56,E:color:#337ab7;L@AQl,1:}G@LBW,K:>.badge{float:right}G@LBW,1I:>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{I@I8j,X:margin-bottom:30px;color:inherit;L@HcG,1:}T@IHE,R:color:inherit}.jumbotron p{J@6Dl,i:font-size:21px;font-weight:200}.jumbotron>hr{O@ICD,1:}n@ICd,H@NsG,b:}.jumbotron .container{max-width:100%}_@IER,Q:.jumbotron{padding:48px 0}n@ICd,I@IGU,J:padding-right:60px}T@IHE,q:font-size:63px}}.thumbnail{display:block;padding:4px;J@Jw~,N@DV~,M@9R0,L@E0l,1:;I@6sG,J@Itk,N@IKy,3:-o-X@IL~,1:;X@IL~,1:}W@16h,Z:margin-left:auto;margin-right:auto}s@INj,K@DRW,1:}K@IO~,g:padding:9px;color:#333}.alert{padding:15px;J@Jw~,H@E0l,C:transparent;H@Dp0,27:}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}b@ITo,J:padding-right:35px}p@IUm,I@7Jl,n:top:-2px;right:-21px;color:inherit}.alert-success{J@NPG,6:ff0d8;K@NJU,F:;color:#3c763d}I@IXz,P:border-top-color:#c9e2b3}R@IYj,Q:color:#2b542c}.alert-info{P@NPG,K@NPh,s:;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}O@IaS,T:color:#245269}.alert-warning{J@Kil,1K:cf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}R@IdD,S:color:#66512c}.alert-danger{J@Kil,e:2dede;border-color:#ebccd1;color:#a94442}H@IfG,P:border-top-color:#e4b9c0}Q@If~,E:color:#843534}d@Igh,5:from{Q@IlC,4:}to{K@IlC,9:0 0}}@-o-V@IkW,5:from{Q@IlC,4:}to{K@IlC,5:0 0}}W@IkV,5:from{Q@IlC,4:}to{K@IlC,F:0 0}}.progress{G@ImW,C:height:20px;J@Jw~,J@Kil,6:5f5f5;I@6sG,V@F6l,K:2px rgba(0,0,0,0.1);N@8NW,1~:2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;O@1nW,1:;R@F6l,K@2UV,4:15);J@8NW,K@2UV,4:15);Y@Itk,T@IuK,P@IuN,1:}r@IvG,I@IzG,2n@JfD,2~@IzG,2w@JaW,1:;Y@J4H,P@J4P,1:}p@J5I,v@J69,2:-oo@J6G,m@J7z,N:}.progress-bar-success{I@NPG,7:5cb85c}V@IvG,9:-success{I@IzG,2n@JfD,2~@IzG,2w@JaW,K:}.progress-bar-info{I@NPG,7:5bc0de}V@IvG,6:-info{I@IzG,2n@JfD,2~@IzG,2w@JaW,1:}M@JUz,J@Kil,6:0ad4e}V@IvG,9:-warning{I@IzG,2n@JfD,2~@IzG,2w@JaW,1:}L@JdU,K@NPG,5:534f}V@IvG,8:-danger{I@IzG,2n@JfD,2~@IzG,2w@JaW,O:}.media{margin-top:15px}J@JoU,1i:margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}J@Jsj,V:>.pull-right{padding-left:10px}U@Jrh,J:padding-right:10px}a@JsY,I@P5l,1:;I@JtW,F:}.media-middle{L@7SW,F:}.media-bottom{L@Juk,T:}.media-heading{margin-top:0;H@Kt~,t:}.media-list{padding-left:0;list-style:none}.list-group{J@Jw~,F:padding-left:0}G@LBW,1:{I@7Jl,E:display:block;I@JyW,J:margin-bottom:-1px;M@9R0,L@E0l,1:}T@LBW,O@LCG,4:4px;N@LOG,4:4px}H@LBW,R:last-child{margin-bottom:0;R@Lxk,4:4px;Q@M7~,5:4px}aG@LBW,D:{color:#555}aG@LBW,Q@Kgk,C:color:#333}aH@LBW,N@KpF,7::focus{L@Hkl,B:color:#555;J@Kil,6:5f5f5}H@KGl,19@K5j,L@HcG,V:;color:#777;cursor:not-allowed}H@KGl,Q@KA~,P@KHV,W@KBk,P@KHV,8:disabledO@KQF,M:heading{color:inherit}H@KGl,2B@KA~,B:color:#777}N@KGl,U@KGk,V@KEF,L:z-index:2;color:#fff;O@1nW,1:;K@DRW,1:}N@KGl,g@K8F,a@KMO,U@KEF,g@K8F,W@KLW,4p@KJF,E:color:inherit}N@KGl,I@Kgk,1i@KO~,E:color:#c7ddef}H@Kgl,M:success{color:#3c763d;J@NPG,7:ff0d8}aH@Kgl,N:success{color:#3c763d}aH@Kgl,6:succesR@KA0,F:color:inherit}aH@Kgl,j@KUC,E:color:#3c763d;J@NPG,7:0e9c6}aH@Kgl,1T@KVw,B:color:#fff;J@1nW,6:c763d;K@89j,1:}H@Kgl,J:info{color:#31708f;O@NPG,2:}aH@Kgl,K:info{color:#31708f}aH@Kgl,U@K_T,F:color:inherit}aH@Kgl,d@KaW,E:color:#31708f;I@NPG,8:c4e3f3}aH@Kgl,1K@Kc9,B:color:#fff;J@1nW,R:1708f;border-color:#31708f}H@Kgl,M:warning{color:#8a6d3b;J@Kil,7:cf8e3}aH@Kgl,N:warning{color:#8a6d3b}aH@Kgl,X@Kgd,F:color:inherit}aH@Kgl,j@Khj,E:color:#8a6d3b;O@Kil,2:}aH@Kgl,1T@KjT,B:color:#fff;I@NPG,7:8a6d3b;K@8MG,1:}H@Kgl,L:danger{color:#a94442;J@Kil,7:2dede}aH@Kgl,M:danger{color:#a94442}aH@Kgl,4:dangR@KJl,G:{color:inherit}aH@Kgl,h@Kp8,E:color:#a94442;J@HcG,7:bcccc}aH@Kgl,6:dangerQ@KcD,v@KrL,B:color:#fff;P@KsW,K@8dE,1:}P@Kgl,D:margin-top:0;H@Kt~,1:}H@Kgl,h:text{margin-bottom:0;line-height:1.3}.panel{J@Jw~,M@9R0,H@E0l,C:transparent;I@6sG,J@F6l,L@6~W,6:0.05);a@Kxl,e:}.panel-body{padding:15px}.panel-heading{I@JyW,I@25z,I@EnW,S@LCG,Q@LOG,1:}f@L00,1L:color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}1X@L2I,S:color:inherit}.panel-footer{I@JyW,J@Kil,6:5f5f5;L@EDl,5:#ddd;V@Lrk,T@M7~,1:}r@L6c,M:margin-bottom:0}.panelT@L8h,Z@LAl,H@LBV,1:{I@Eek,H:;border-radius:0}28@L9q,D:border-top:0;S@LCG,Q@LOG,1:}24@LDC,G:border-bottom:0;V@Lrk,T@M7~,1:}t@LGd,J:border-top-width:0}Q@LHt,J:border-top-width:0}1C@LIf,G:margin-bottom:0}1_@LKB,I@2dE,J:padding-right:15px}P@LOi,P@MgW,V@LQ0,1:{S@LCG,Q@LOG,1:}4d@LOi,Q@LOG,1:;R@LCG,1:}v@LOi,19@LY0,x@LUk,m@LjW,1_@LRl,T@LY0,m@LmG,15@LRl,X@LUk,R@M3V,m@Lp0,1_@LRl,G: th:first-child{Q@LOG,1:}v@LOi,d@MB~,U@LNF,X@LQV,S@MB~,19@LjW,h@LaF,6E@Ljj,R@LCG,1:}O@LyG,P@MgW,T@M6l,1:{V@Lrk,T@M7~,1:}s@LyG,P@MgW,V@M6l,2g@LuW,T@M7~,1:;U@Lxk,1:}Ah@LyG,T@M7~,1:}w@LyG,O@MGF,f@M1F,V@M30,R@LkF,g@M5V,Q@LkF,1B@M1F,a@MGF,X@M30,O@MGF,f@M1F,X@M30,2p@MGF,U@Lxk,1:}1z@MJc,L@EDl,5:#ddd}l@MMr,p@MMp,D:border-top:0}M@MZw,f@MOG,9:border:0}Z@MZw,_@LRl,G@MO0,99@MQV,E:border-left:0}AK@MZw,F:border-right:0}V@MZw,H@5GF,e@MiG,O@5FW,N@MZx,a@Mmh,4J@MmG,G:border-bottom:0}O@MZw,6W@MrG,G:border-bottom:0}O@Mwl,c:{border:0;margin-bottom:0}.panel-group{I@MzF,1:}J@N3z,H:{margin-bottom:0;H@Dp0,1:}J@N3z,N:+.panel{margin-top:5px}K@N3z,O:heading{border-bottom:0}K@N3z,P@N2E,13@N1k,L@EDl,5:#ddd}Q@N3z,E:{border-top:0}s@N3z,I@25z,Q:solid #ddd}.panel-default{H@Nq~,1:}U@N5y,B:color:#333;J@Kil,6:5f5f5;H@Nq~,1:}T@N5y,1:+H@LLG,B:panel-body{J@ICD,3:dd}T@N5y,M: .badge{color:#f5f5f5;K@1nW,2:3}M@N5y,Z@NZG,L@Dnl,J:ddd}.panel-primary{K@DRW,1:}M@NGD,J:heading{color:#fff;O@1nW,1:;K@DRW,1:}M@NGD,P@N2E,_:panel-body{border-top-color:#337ab7}M@NGD,T:heading .badge{color:#337ab7;L@AQl,1:}u@NGD,L@Dnl,M:337ab7}.panel-success{K@NJU,1:}U@NIG,E:color:#3c763d;J@NPG,6:ff0d8;K@NJU,1:}T@NIG,1:+H@LLG,B:panel-body{J@ICD,6:6e9c6}T@NIG,M: .badge{color:#dff0d8;J@1nW,6:c763d}M@NIG,Z@NZG,L@Dnl,J:d6e9c6}.panel-info{K@NPh,1:}Q@NRO,F:{color:#31708f;P@NPG,K@NPh,1:}Q@NRO,1:+H@LLG,B:panel-body{O@NQy,1:}Y@NRO,E:color:#d9edf7;J@1nW,6:1708f}r@NSe,L@Dnl,g:bce8f1}.panel-warning{border-color:#faebcc}T@NWE,F:{color:#8a6d3b;J@Kil,R:cf8e3;border-color:#faebcc}v@NWE,O@NXB,1:}T@NWE,M: .badge{color:#fcf8e3;I@NPG,7:8a6d3b}M@NWE,Z@NZG,M@Dnl,e:aebcc}.panel-danger{border-color:#ebccd1}S@NbW,F:{color:#a94442;J@Kil,R:2dede;border-color:#ebccd1}u@NbW,O@NcS,1:}S@NbW,M: .badge{color:#f2dede;O@KsW,1:}L@NbW,Z@NZG,L@Dnl,P:ebccd1}.embed-responsive{I@7Jl,m:display:block;height:0;padding:0;overflow:hidden}2B@Nh9,18:position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}Z@Nls,6:16by9{L@NlV,1:}d@Nls,P:padding-bottom:75%}.well{G@Nn0,D:padding:19px;J@Jw~,J@Kil,6:5f5f5;I@E0l,7:e3e3e3;I@6sG,V@F6l,L:1px rgba(0,0,0,0.05);e@8NW,K:5)}.well blockquote{I@Nq~,T@NrK,N:}.well-lg{padding:24px;H@NsG,M:}.well-sm{padding:9px;H@Ns~,1m:}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;O@NvR,1:}Q@Nvr,B:color:#000;L@Hkl,Q:cursor:pointer;opacity:.5;L@NvR,1A:50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;N@Yz,1:}92@NzZ,Q:content:" ";display:table}4Q@O87,1M:clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{M@FhC,C:}.pull-left{L@FgT,7:}.hide{N@PD0,7:}.show{O@P7l,p:}.invisible{visibility:hidden}.text-hide{font:0/0 a;I@OHE,H:text-shadow:none;S@GWl,I:;border:0}.hidden{N@PD0,1:;S@OJ8,t:}.affix{position:fixed}@-ms-viewport{width:device-width}l@OKd,N@PD0,1:}3t@OLq,N@PD0,1:}I@QHW,J:767px){.visible-xs{O@P7l,I:}table.visible-xs{D@OSJ,F:}tr.visible-xs{S@Oil,1:}S@OSr,T@P5l,2:}}I@QHW,P:767px){.visible-xs-block{O@P7l,2:}}I@QHW,Q:767px){.visible-xs-inline{P@P9i,2:}}I@QHW,7:767px){P@OWy,K@FEG,D: !important}}k@Ocl,C:.visible-sm{O@P7l,j:}table.visible-sm{display:table}tr.visible-sm{S@Oil,T:}th.visible-sm,td.visible-sm{T@P5l,2:}}k@Ocl,I:.visible-sm-block{O@P7l,2:}}k@Ocl,J:.visible-sm-inline{P@P9i,2:}}k@Ocl,P@OfC,K@FEG,D: !important}}l@OgG,C:.visible-md{O@P7l,j:}table.visible-md{display:table}tr.visible-md{S@Oil,T:}th.visible-md,td.visible-md{T@P5l,2:}}l@OgG,I:.visible-md-block{O@P7l,2:}}l@OgG,I@OoV,1:{P@P9i,2:}}l@OgG,P@OoV,K@FEG,D: !important}}I@OgG,K:1200px){.visible-lg{O@P7l,1:}H@Oql,S:display:table}tr.visible-lg{S@Oil,1:}S@OsG,T@P5l,2:}}I@OgG,8:1200px){H@OOk,1:{O@P7l,2:}}I@OgG,R:1200px){.visible-lg-inline{P@P9i,2:}}I@OgG,8:1200px){P@OwQ,K@FEG,D: !important}}I@QHW,I:767px){.hidden-xs{N@PD0,2:}}k@Ocl,B:.hidden-sm{N@PD0,2:}}l@OgG,B:.hidden-md{N@PD0,2:}}I@OgG,J:1200px){.hidden-lg{N@PD0,H:}}.visible-print{N@PD0,T:}@media print{.visible-print{O@P7l,Z:}table.visible-print{display:table}H@P4G,S@Oil,1:}Y@P59,T@P5l,N:}}.visible-print-block{N@PD0,Z:}@media print{.visible-print-block{O@P7l,2:}}M@P8F,N@PD0,E:}@media print{M@P8F,P@P9i,2:}}L@P8F,7:-block{N@PD0,E:}@media print{L@P8F,7:-block{K@FEG,d: !important}}@media print{.hidden-print{N@PD0,1:}1Sr@PDS,2hOHxq;
--- a/skins/bootstrap/details.txt
+++ b/skins/bootstrap/details.txt
@@ -0,0 +1,3 @@
1
+timeline-arrowheads: 1
2
+t1
3
+timeline-color-graph-lines: 1
--- a/skins/bootstrap/details.txt
+++ b/skins/bootstrap/details.txt
@@ -0,0 +1,3 @@
 
 
 
--- a/skins/bootstrap/details.txt
+++ b/skins/bootstrap/details.txt
@@ -0,0 +1,3 @@
1 timeline-arrowheads: 1
2 t1
3 timeline-color-graph-lines: 1
--- a/skins/bootstrap/footer.txt
+++ b/skins/bootstrap/footer.txt
@@ -0,0 +1,37 @@
1
+<th1>
2
+ if {! $is_index && ! $is_home} {
3
+ html "</div>"
4
+ }
5
+</th1>
6
+</div>
7
+<div id="push"></div>
8
+</div>
9
+<footer id="footer">
10
+ <p>&#169; Copyright $<project_name>. All right reserved. Fossil $release_version &#183; <a href="$home/timeline.rss">RSS</a></p>
11
+</footer>var tabl>
12
+ if {! $is_index && ! $is_home} {
13
+ html "</div>"
14
+ }
15
+</th1>
16
+</div>
17
+<div id="push"></div>
18
+</div>
19
+<footer id="footer">
20
+ <p>&#169; Copyright $<project_name>. All right reserved. Fossil $release_version &#183; <a href="$home/timeline.rss">RSS</a></p>
21
+</footer>var tables = document.que (var i = 0; i < tables.length; i++) {
22
+ if (tables[i].id !== "timelineTable")
23
+};
24
+var submenus = document.quefor (var i = 0; i < submenus.length; i++) {
25
+ submenus[i].classList.add('btn-group');
26
+ var labels = submenus[i].querySelvar j = 0; j < labels.length; j++) {
27
+ labels[j].classList.remove('label');
28
+ labels[j].classList.add('btn');
29
+ labels[j].classList.add('btn-default');
30
+ labels[j].classList.add('btn-sm');
31
+ }
32
+};
33
+//Handle the collapsible navbar
34
+var collapse = document.querySelector('[data-toggle="collapse"]');
35
+collapse.onclick = function(){
36
+ var <th1>
37
+ if {! $is_index && </body></html>
--- a/skins/bootstrap/footer.txt
+++ b/skins/bootstrap/footer.txt
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/skins/bootstrap/footer.txt
+++ b/skins/bootstrap/footer.txt
@@ -0,0 +1,37 @@
1 <th1>
2 if {! $is_index && ! $is_home} {
3 html "</div>"
4 }
5 </th1>
6 </div>
7 <div id="push"></div>
8 </div>
9 <footer id="footer">
10 <p>&#169; Copyright $<project_name>. All right reserved. Fossil $release_version &#183; <a href="$home/timeline.rss">RSS</a></p>
11 </footer>var tabl>
12 if {! $is_index && ! $is_home} {
13 html "</div>"
14 }
15 </th1>
16 </div>
17 <div id="push"></div>
18 </div>
19 <footer id="footer">
20 <p>&#169; Copyright $<project_name>. All right reserved. Fossil $release_version &#183; <a href="$home/timeline.rss">RSS</a></p>
21 </footer>var tables = document.que (var i = 0; i < tables.length; i++) {
22 if (tables[i].id !== "timelineTable")
23 };
24 var submenus = document.quefor (var i = 0; i < submenus.length; i++) {
25 submenus[i].classList.add('btn-group');
26 var labels = submenus[i].querySelvar j = 0; j < labels.length; j++) {
27 labels[j].classList.remove('label');
28 labels[j].classList.add('btn');
29 labels[j].classList.add('btn-default');
30 labels[j].classList.add('btn-sm');
31 }
32 };
33 //Handle the collapsible navbar
34 var collapse = document.querySelector('[data-toggle="collapse"]');
35 collapse.onclick = function(){
36 var <th1>
37 if {! $is_index && </body></html>
--- a/skins/bootstrap/header.txt
+++ b/skins/bootstrap/header.txt
@@ -0,0 +1,73 @@
1
+<html lang="en">
2
+<head>
3
+ <meta charset="utf-8">
4
+ <base href="$baseurl/$current_page" />
5
+ <title>$<project_name>: $<title></title>
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <f' 'unsafe-inline'"/>
8
+ <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="$home/timeline.rss" />
9
+ <link rel="stylesheet" href="$home/style.css?defaultheet" href="$stylesh <script nonce="$<nonce>">
10
+ function gebi(x){
11
+ if(/^#/.test(x)) x = x.substr(1);
12
+ var e = document.getElementById(x);
13
+ if(!e) throw new Error("Expecting element with ID "+x);
14
+ else return e;
15
+ }
16
+ </script>
17
+ </head>
18
+ <body data-spy="scr>
19
+ <div id="wrap">
20
+ <div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
21
+ <div class="container">
22
+ <div class="navbar-header">
23
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
24
+ <span class="sr-only">Toggle navigation</span>
25
+ <span class="icon-bar"></span>
26
+ <span class="icon-bar"></span>
27
+ <span class="icon-bar"></span>
28
+ </button>
29
+ <th1>html "<a class='navbar-brand' href='$home$index_page'>$project_name</a>"</th1>
30
+ </div>
31
+ <div class="collapse navbar-collapse">
32
+ <p class="navbar-text pull-right"><th1>
33
+ if {[info exists login]} {
34
+ puts "Logged in as $login"
35
+ html " &middot; <a href='$home/login'>Logout</a>"
36
+ } else {
37
+ puts "Not logged in"
38
+ html " &middot; <a href='$home/login'>Login</a>"
39
+ }
40
+ </th1></p>
41
+ <ul class="nav navbar-nav">
42
+ <th1>
43
+ >
44
+set once 1
45
+set sitemap 0
46
+set is_index [expr [string compare [string range $curr set is_home [expr [string compare [string range $current_page 0 [expr [string length $index_piv class="n html "<li</span>'active'ollapse" data-\ puts "Not } else {
47
+
48
+<head>
49
+ <meta charset="u<html lang="en">
50
+<head>
51
+ \ puts "Not }
52
+ div class= ifn>'active'><a href='$ puts "Not } else {
53
+
54
+<head>
55
+ <meta charset="ut<html lang="en">
56
+<head puts "Not }
57
+ } elseif {[hascap a]} {
58
+ div class= if {[string compare [stringsetup"] == 0} {
59
+ html "<li</span>'active'><a href='$home/s puts "Not } else {
60
+
61
+<head>
62
+ <meta charset="ut<html lang="en">
63
+<head>
64
+ <m puts "Not }
65
+ ogin'>Login</a>"
66
+ </th1>
67
+ome/login' </ulixed-top" "wrap">
68
+ <div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
69
+ <div class="container">
70
+ <div class="navbar-header">
71
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
72
+ <span class="sr-only">Toggle navigation</span>
73
+ $title
--- a/skins/bootstrap/header.txt
+++ b/skins/bootstrap/header.txt
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/skins/bootstrap/header.txt
+++ b/skins/bootstrap/header.txt
@@ -0,0 +1,73 @@
1 <html lang="en">
2 <head>
3 <meta charset="utf-8">
4 <base href="$baseurl/$current_page" />
5 <title>$<project_name>: $<title></title>
6 <meta name="viewport" content="width=device-width, initial-scale=1.0">
7 <f' 'unsafe-inline'"/>
8 <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="$home/timeline.rss" />
9 <link rel="stylesheet" href="$home/style.css?defaultheet" href="$stylesh <script nonce="$<nonce>">
10 function gebi(x){
11 if(/^#/.test(x)) x = x.substr(1);
12 var e = document.getElementById(x);
13 if(!e) throw new Error("Expecting element with ID "+x);
14 else return e;
15 }
16 </script>
17 </head>
18 <body data-spy="scr>
19 <div id="wrap">
20 <div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
21 <div class="container">
22 <div class="navbar-header">
23 <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
24 <span class="sr-only">Toggle navigation</span>
25 <span class="icon-bar"></span>
26 <span class="icon-bar"></span>
27 <span class="icon-bar"></span>
28 </button>
29 <th1>html "<a class='navbar-brand' href='$home$index_page'>$project_name</a>"</th1>
30 </div>
31 <div class="collapse navbar-collapse">
32 <p class="navbar-text pull-right"><th1>
33 if {[info exists login]} {
34 puts "Logged in as $login"
35 html " &middot; <a href='$home/login'>Logout</a>"
36 } else {
37 puts "Not logged in"
38 html " &middot; <a href='$home/login'>Login</a>"
39 }
40 </th1></p>
41 <ul class="nav navbar-nav">
42 <th1>
43 >
44 set once 1
45 set sitemap 0
46 set is_index [expr [string compare [string range $curr set is_home [expr [string compare [string range $current_page 0 [expr [string length $index_piv class="n html "<li</span>'active'ollapse" data-\ puts "Not } else {
47
48 <head>
49 <meta charset="u<html lang="en">
50 <head>
51 \ puts "Not }
52 div class= ifn>'active'><a href='$ puts "Not } else {
53
54 <head>
55 <meta charset="ut<html lang="en">
56 <head puts "Not }
57 } elseif {[hascap a]} {
58 div class= if {[string compare [stringsetup"] == 0} {
59 html "<li</span>'active'><a href='$home/s puts "Not } else {
60
61 <head>
62 <meta charset="ut<html lang="en">
63 <head>
64 <m puts "Not }
65 ogin'>Login</a>"
66 </th1>
67 ome/login' </ulixed-top" "wrap">
68 <div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
69 <div class="container">
70 <div class="navbar-header">
71 <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
72 <span class="sr-only">Toggle navigation</span>
73 $title
+3 -1
--- src/cgi.c
+++ src/cgi.c
@@ -382,11 +382,13 @@
382382
fprintf(g.httpOut, "Content-Length: %d\r\n", total_size);
383383
}else{
384384
total_size = 0;
385385
}
386386
fprintf(g.httpOut, "\r\n");
387
- if( total_size>0 && iReplyStatus != 304 ){
387
+ if( total_size>0 && iReplyStatus != 304
388
+ && fossil_strcmp(P("REQUEST_METHOD"),"HEAD")!=0
389
+ ){
388390
int i, size;
389391
for(i=0; i<2; i++){
390392
size = blob_size(&cgiContent[i]);
391393
if( size>0 ){
392394
fwrite(blob_buffer(&cgiContent[i]), 1, size, g.httpOut);
393395
--- src/cgi.c
+++ src/cgi.c
@@ -382,11 +382,13 @@
382 fprintf(g.httpOut, "Content-Length: %d\r\n", total_size);
383 }else{
384 total_size = 0;
385 }
386 fprintf(g.httpOut, "\r\n");
387 if( total_size>0 && iReplyStatus != 304 ){
 
 
388 int i, size;
389 for(i=0; i<2; i++){
390 size = blob_size(&cgiContent[i]);
391 if( size>0 ){
392 fwrite(blob_buffer(&cgiContent[i]), 1, size, g.httpOut);
393
--- src/cgi.c
+++ src/cgi.c
@@ -382,11 +382,13 @@
382 fprintf(g.httpOut, "Content-Length: %d\r\n", total_size);
383 }else{
384 total_size = 0;
385 }
386 fprintf(g.httpOut, "\r\n");
387 if( total_size>0 && iReplyStatus != 304
388 && fossil_strcmp(P("REQUEST_METHOD"),"HEAD")!=0
389 ){
390 int i, size;
391 for(i=0; i<2; i++){
392 size = blob_size(&cgiContent[i]);
393 if( size>0 ){
394 fwrite(blob_buffer(&cgiContent[i]), 1, size, g.httpOut);
395
+3 -2
--- src/finfo.c
+++ src/finfo.c
@@ -310,10 +310,11 @@
310310
int brBg = P("brbg")!=0;
311311
int uBg = P("ubg")!=0;
312312
int fDebug = atoi(PD("debug","0"));
313313
int fShowId = P("showid")!=0;
314314
Stmt qparent;
315
+ int iTableId = timeline_tableid();
315316
316317
login_check_credentials();
317318
if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
318319
style_header("File History");
319320
login_anonymous_available();
@@ -415,11 +416,11 @@
415416
if( fShowId ) blob_appendf(&title, " (%d)", fnid);
416417
}
417418
@ <h2>%b(&title)</h2>
418419
blob_reset(&title);
419420
pGraph = graph_init();
420
- @ <table id="timelineTable" class="timelineTable">
421
+ @ <table id="timelineTable%d(iTableId)" class="timelineTable">
421422
if( baseCheckin ){
422423
db_prepare(&qparent,
423424
"SELECT DISTINCT pid FROM mlink"
424425
" WHERE fid=:fid AND mid=:mid AND pid>0 AND fnid=:fnid"
425426
" AND pmid IN (SELECT rid FROM ancestor)"
@@ -558,11 +559,11 @@
558559
}else{
559560
@ <tr class="timelineBottom"><td></td><td></td><td></td></tr>
560561
}
561562
}
562563
@ </table>
563
- timeline_output_graph_javascript(pGraph, 0, 1);
564
+ timeline_output_graph_javascript(pGraph, 0, iTableId, 1);
564565
style_footer();
565566
}
566567
567568
/*
568569
** WEBPAGE: mlink
569570
--- src/finfo.c
+++ src/finfo.c
@@ -310,10 +310,11 @@
310 int brBg = P("brbg")!=0;
311 int uBg = P("ubg")!=0;
312 int fDebug = atoi(PD("debug","0"));
313 int fShowId = P("showid")!=0;
314 Stmt qparent;
 
315
316 login_check_credentials();
317 if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
318 style_header("File History");
319 login_anonymous_available();
@@ -415,11 +416,11 @@
415 if( fShowId ) blob_appendf(&title, " (%d)", fnid);
416 }
417 @ <h2>%b(&title)</h2>
418 blob_reset(&title);
419 pGraph = graph_init();
420 @ <table id="timelineTable" class="timelineTable">
421 if( baseCheckin ){
422 db_prepare(&qparent,
423 "SELECT DISTINCT pid FROM mlink"
424 " WHERE fid=:fid AND mid=:mid AND pid>0 AND fnid=:fnid"
425 " AND pmid IN (SELECT rid FROM ancestor)"
@@ -558,11 +559,11 @@
558 }else{
559 @ <tr class="timelineBottom"><td></td><td></td><td></td></tr>
560 }
561 }
562 @ </table>
563 timeline_output_graph_javascript(pGraph, 0, 1);
564 style_footer();
565 }
566
567 /*
568 ** WEBPAGE: mlink
569
--- src/finfo.c
+++ src/finfo.c
@@ -310,10 +310,11 @@
310 int brBg = P("brbg")!=0;
311 int uBg = P("ubg")!=0;
312 int fDebug = atoi(PD("debug","0"));
313 int fShowId = P("showid")!=0;
314 Stmt qparent;
315 int iTableId = timeline_tableid();
316
317 login_check_credentials();
318 if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
319 style_header("File History");
320 login_anonymous_available();
@@ -415,11 +416,11 @@
416 if( fShowId ) blob_appendf(&title, " (%d)", fnid);
417 }
418 @ <h2>%b(&title)</h2>
419 blob_reset(&title);
420 pGraph = graph_init();
421 @ <table id="timelineTable%d(iTableId)" class="timelineTable">
422 if( baseCheckin ){
423 db_prepare(&qparent,
424 "SELECT DISTINCT pid FROM mlink"
425 " WHERE fid=:fid AND mid=:mid AND pid>0 AND fnid=:fnid"
426 " AND pmid IN (SELECT rid FROM ancestor)"
@@ -558,11 +559,11 @@
559 }else{
560 @ <tr class="timelineBottom"><td></td><td></td><td></td></tr>
561 }
562 }
563 @ </table>
564 timeline_output_graph_javascript(pGraph, 0, iTableId, 1);
565 style_footer();
566 }
567
568 /*
569 ** WEBPAGE: mlink
570
+2 -1
--- src/graph.c
+++ src/graph.c
@@ -184,10 +184,11 @@
184184
const char *zUuid, /* hash name of the object being graphed */
185185
int isLeaf /* True if this row is a leaf */
186186
){
187187
GraphRow *pRow;
188188
int nByte;
189
+ static int nRow = 0;
189190
190191
if( p->nErr ) return 0;
191192
nByte = sizeof(GraphRow);
192193
nByte += sizeof(pRow->aParent[0])*nParent;
193194
pRow = (GraphRow*)safeMalloc( nByte );
@@ -207,11 +208,11 @@
207208
}else{
208209
p->pLast->pNext = pRow;
209210
}
210211
p->pLast = pRow;
211212
p->nRow++;
212
- pRow->idx = pRow->idxTop = p->nRow;
213
+ pRow->idx = pRow->idxTop = ++nRow;
213214
return pRow->idx;
214215
}
215216
216217
/*
217218
** Return the index of a rail currently not in use for any row between
218219
--- src/graph.c
+++ src/graph.c
@@ -184,10 +184,11 @@
184 const char *zUuid, /* hash name of the object being graphed */
185 int isLeaf /* True if this row is a leaf */
186 ){
187 GraphRow *pRow;
188 int nByte;
 
189
190 if( p->nErr ) return 0;
191 nByte = sizeof(GraphRow);
192 nByte += sizeof(pRow->aParent[0])*nParent;
193 pRow = (GraphRow*)safeMalloc( nByte );
@@ -207,11 +208,11 @@
207 }else{
208 p->pLast->pNext = pRow;
209 }
210 p->pLast = pRow;
211 p->nRow++;
212 pRow->idx = pRow->idxTop = p->nRow;
213 return pRow->idx;
214 }
215
216 /*
217 ** Return the index of a rail currently not in use for any row between
218
--- src/graph.c
+++ src/graph.c
@@ -184,10 +184,11 @@
184 const char *zUuid, /* hash name of the object being graphed */
185 int isLeaf /* True if this row is a leaf */
186 ){
187 GraphRow *pRow;
188 int nByte;
189 static int nRow = 0;
190
191 if( p->nErr ) return 0;
192 nByte = sizeof(GraphRow);
193 nByte += sizeof(pRow->aParent[0])*nParent;
194 pRow = (GraphRow*)safeMalloc( nByte );
@@ -207,11 +208,11 @@
208 }else{
209 p->pLast->pNext = pRow;
210 }
211 p->pLast = pRow;
212 p->nRow++;
213 pRow->idx = pRow->idxTop = ++nRow;
214 return pRow->idx;
215 }
216
217 /*
218 ** Return the index of a rail currently not in use for any row between
219
+66
--- src/info.c
+++ src/info.c
@@ -134,10 +134,11 @@
134134
" FROM config"
135135
" WHERE name GLOB 'ckout:*' ORDER BY mtime DESC");
136136
while( db_step(&s)==SQLITE_ROW ){
137137
const char *zName;
138138
const char *zCkout = db_column_text(&s, 0);
139
+ if( !vfile_top_of_checkout(zCkout) ) continue;
139140
if( g.localOpen ){
140141
if( fossil_strcmp(zCkout, g.zLocalRoot)==0 ) continue;
141142
zName = "alt-root:";
142143
}else{
143144
zName = "check-out:";
@@ -315,10 +316,11 @@
315316
Stmt q;
316317
blob_zero(&sql);
317318
blob_append(&sql, timeline_query_for_www(), -1);
318319
db_multi_exec(
319320
"CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);"
321
+ "DELETE FROM ok;"
320322
"INSERT INTO ok VALUES(%d);"
321323
"INSERT OR IGNORE INTO ok SELECT pid FROM plink WHERE cid=%d;",
322324
rid, rid
323325
);
324326
if( !parentsOnly ){
@@ -329,10 +331,73 @@
329331
blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC");
330332
db_prepare(&q, "%s", blob_sql_text(&sql));
331333
www_print_timeline(&q, TIMELINE_DISJOINT|TIMELINE_GRAPH, 0, 0, rid, 0);
332334
db_finalize(&q);
333335
}
336
+
337
+/*
338
+** Show a graph all wiki, tickets, and check-ins that refer to object zUuid.
339
+**
340
+** If zLabel is not NULL and the graph is not empty, then output zLabel as
341
+** a prefix to the graph.
342
+*/
343
+void render_backlink_graph(const char *zUuid, const char *zLabel){
344
+ Blob sql;
345
+ Stmt q;
346
+ char *zGlob;
347
+ zGlob = mprintf("%.5s*", zUuid);
348
+ db_multi_exec(
349
+ "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);"
350
+ "DELETE FROM ok;"
351
+ "INSERT OR IGNORE INTO ok"
352
+ " SELECT srcid FROM backlink"
353
+ " WHERE target GLOB %Q"
354
+ " AND %Q GLOB (target || '*');",
355
+ zGlob, zUuid
356
+ );
357
+ if( !db_exists("SELECT 1 FROM ok") ) return;
358
+ if( zLabel ) cgi_printf("%s", zLabel);
359
+ blob_zero(&sql);
360
+ blob_append(&sql, timeline_query_for_www(), -1);
361
+ blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC");
362
+ db_prepare(&q, "%s", blob_sql_text(&sql));
363
+ www_print_timeline(&q, TIMELINE_DISJOINT|TIMELINE_GRAPH, 0, 0, 0, 0);
364
+ db_finalize(&q);
365
+}
366
+
367
+/*
368
+** WEBPAGE: test-backlinks
369
+**
370
+** Show a timeline of all check-ins and other events that have entries
371
+** in the backlink table. This is used for testing the rendering
372
+** of the "References" section of the /info page.
373
+*/
374
+void backlink_timeline_page(void){
375
+ Blob sql;
376
+ Stmt q;
377
+
378
+ login_check_credentials();
379
+ if( !g.perm.Read || !g.perm.RdTkt || !g.perm.RdWiki ){
380
+ login_needed(g.anon.Read && g.anon.RdTkt && g.anon.RdWiki);
381
+ return;
382
+ }
383
+ style_header("Backlink Timeline (Internal Testing Use)");
384
+ db_multi_exec(
385
+ "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);"
386
+ "DELETE FROM ok;"
387
+ "INSERT OR IGNORE INTO ok"
388
+ " SELECT blob.rid FROM backlink, blob"
389
+ " WHERE blob.uuid BETWEEN backlink.target AND (backlink.target||'x')"
390
+ );
391
+ blob_zero(&sql);
392
+ blob_append(&sql, timeline_query_for_www(), -1);
393
+ blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC");
394
+ db_prepare(&q, "%s", blob_sql_text(&sql));
395
+ www_print_timeline(&q, TIMELINE_DISJOINT|TIMELINE_GRAPH, 0, 0, 0, 0);
396
+ db_finalize(&q);
397
+ style_footer();
398
+}
334399
335400
336401
/*
337402
** Append the difference between artifacts to the output
338403
*/
@@ -706,10 +771,11 @@
706771
}else{
707772
style_header("Check-in Information");
708773
login_anonymous_available();
709774
}
710775
db_finalize(&q1);
776
+ render_backlink_graph(zUuid, "<div class=\"section\">References</div>\n");
711777
showTags(rid);
712778
@ <div class="section">Context</div>
713779
render_checkin_context(rid, 0);
714780
@ <div class="section">Changes</div>
715781
@ <div class="sectionmenu">
716782
--- src/info.c
+++ src/info.c
@@ -134,10 +134,11 @@
134 " FROM config"
135 " WHERE name GLOB 'ckout:*' ORDER BY mtime DESC");
136 while( db_step(&s)==SQLITE_ROW ){
137 const char *zName;
138 const char *zCkout = db_column_text(&s, 0);
 
139 if( g.localOpen ){
140 if( fossil_strcmp(zCkout, g.zLocalRoot)==0 ) continue;
141 zName = "alt-root:";
142 }else{
143 zName = "check-out:";
@@ -315,10 +316,11 @@
315 Stmt q;
316 blob_zero(&sql);
317 blob_append(&sql, timeline_query_for_www(), -1);
318 db_multi_exec(
319 "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);"
 
320 "INSERT INTO ok VALUES(%d);"
321 "INSERT OR IGNORE INTO ok SELECT pid FROM plink WHERE cid=%d;",
322 rid, rid
323 );
324 if( !parentsOnly ){
@@ -329,10 +331,73 @@
329 blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC");
330 db_prepare(&q, "%s", blob_sql_text(&sql));
331 www_print_timeline(&q, TIMELINE_DISJOINT|TIMELINE_GRAPH, 0, 0, rid, 0);
332 db_finalize(&q);
333 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
334
335
336 /*
337 ** Append the difference between artifacts to the output
338 */
@@ -706,10 +771,11 @@
706 }else{
707 style_header("Check-in Information");
708 login_anonymous_available();
709 }
710 db_finalize(&q1);
 
711 showTags(rid);
712 @ <div class="section">Context</div>
713 render_checkin_context(rid, 0);
714 @ <div class="section">Changes</div>
715 @ <div class="sectionmenu">
716
--- src/info.c
+++ src/info.c
@@ -134,10 +134,11 @@
134 " FROM config"
135 " WHERE name GLOB 'ckout:*' ORDER BY mtime DESC");
136 while( db_step(&s)==SQLITE_ROW ){
137 const char *zName;
138 const char *zCkout = db_column_text(&s, 0);
139 if( !vfile_top_of_checkout(zCkout) ) continue;
140 if( g.localOpen ){
141 if( fossil_strcmp(zCkout, g.zLocalRoot)==0 ) continue;
142 zName = "alt-root:";
143 }else{
144 zName = "check-out:";
@@ -315,10 +316,11 @@
316 Stmt q;
317 blob_zero(&sql);
318 blob_append(&sql, timeline_query_for_www(), -1);
319 db_multi_exec(
320 "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);"
321 "DELETE FROM ok;"
322 "INSERT INTO ok VALUES(%d);"
323 "INSERT OR IGNORE INTO ok SELECT pid FROM plink WHERE cid=%d;",
324 rid, rid
325 );
326 if( !parentsOnly ){
@@ -329,10 +331,73 @@
331 blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC");
332 db_prepare(&q, "%s", blob_sql_text(&sql));
333 www_print_timeline(&q, TIMELINE_DISJOINT|TIMELINE_GRAPH, 0, 0, rid, 0);
334 db_finalize(&q);
335 }
336
337 /*
338 ** Show a graph all wiki, tickets, and check-ins that refer to object zUuid.
339 **
340 ** If zLabel is not NULL and the graph is not empty, then output zLabel as
341 ** a prefix to the graph.
342 */
343 void render_backlink_graph(const char *zUuid, const char *zLabel){
344 Blob sql;
345 Stmt q;
346 char *zGlob;
347 zGlob = mprintf("%.5s*", zUuid);
348 db_multi_exec(
349 "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);"
350 "DELETE FROM ok;"
351 "INSERT OR IGNORE INTO ok"
352 " SELECT srcid FROM backlink"
353 " WHERE target GLOB %Q"
354 " AND %Q GLOB (target || '*');",
355 zGlob, zUuid
356 );
357 if( !db_exists("SELECT 1 FROM ok") ) return;
358 if( zLabel ) cgi_printf("%s", zLabel);
359 blob_zero(&sql);
360 blob_append(&sql, timeline_query_for_www(), -1);
361 blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC");
362 db_prepare(&q, "%s", blob_sql_text(&sql));
363 www_print_timeline(&q, TIMELINE_DISJOINT|TIMELINE_GRAPH, 0, 0, 0, 0);
364 db_finalize(&q);
365 }
366
367 /*
368 ** WEBPAGE: test-backlinks
369 **
370 ** Show a timeline of all check-ins and other events that have entries
371 ** in the backlink table. This is used for testing the rendering
372 ** of the "References" section of the /info page.
373 */
374 void backlink_timeline_page(void){
375 Blob sql;
376 Stmt q;
377
378 login_check_credentials();
379 if( !g.perm.Read || !g.perm.RdTkt || !g.perm.RdWiki ){
380 login_needed(g.anon.Read && g.anon.RdTkt && g.anon.RdWiki);
381 return;
382 }
383 style_header("Backlink Timeline (Internal Testing Use)");
384 db_multi_exec(
385 "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);"
386 "DELETE FROM ok;"
387 "INSERT OR IGNORE INTO ok"
388 " SELECT blob.rid FROM backlink, blob"
389 " WHERE blob.uuid BETWEEN backlink.target AND (backlink.target||'x')"
390 );
391 blob_zero(&sql);
392 blob_append(&sql, timeline_query_for_www(), -1);
393 blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC");
394 db_prepare(&q, "%s", blob_sql_text(&sql));
395 www_print_timeline(&q, TIMELINE_DISJOINT|TIMELINE_GRAPH, 0, 0, 0, 0);
396 db_finalize(&q);
397 style_footer();
398 }
399
400
401 /*
402 ** Append the difference between artifacts to the output
403 */
@@ -706,10 +771,11 @@
771 }else{
772 style_header("Check-in Information");
773 login_anonymous_available();
774 }
775 db_finalize(&q1);
776 render_backlink_graph(zUuid, "<div class=\"section\">References</div>\n");
777 showTags(rid);
778 @ <div class="section">Context</div>
779 render_checkin_context(rid, 0);
780 @ <div class="section">Changes</div>
781 @ <div class="sectionmenu">
782
--- src/main.mk
+++ src/main.mk
@@ -156,10 +156,14 @@
156156
$(SRCDIR)/../skins/blitz_no_logo/css.txt \
157157
$(SRCDIR)/../skins/blitz_no_logo/details.txt \
158158
$(SRCDIR)/../skins/blitz_no_logo/footer.txt \
159159
$(SRCDIR)/../skins/blitz_no_logo/header.txt \
160160
$(SRCDIR)/../skins/blitz_no_logo/ticket.txt \
161
+ $(SRCDIR)/../skins/bootstrap/css.txt \
162
+ $(SRCDIR)/../skins/bootstrap/details.txt \
163
+ $(SRCDIR)/../skins/bootstrap/footer.txt \
164
+ $(SRCDIR)/../skins/bootstrap/header.txt \
161165
$(SRCDIR)/../skins/default/css.txt \
162166
$(SRCDIR)/../skins/default/details.txt \
163167
$(SRCDIR)/../skins/default/footer.txt \
164168
$(SRCDIR)/../skins/default/header.txt \
165169
$(SRCDIR)/../skins/eagle/css.txt \
166170
--- src/main.mk
+++ src/main.mk
@@ -156,10 +156,14 @@
156 $(SRCDIR)/../skins/blitz_no_logo/css.txt \
157 $(SRCDIR)/../skins/blitz_no_logo/details.txt \
158 $(SRCDIR)/../skins/blitz_no_logo/footer.txt \
159 $(SRCDIR)/../skins/blitz_no_logo/header.txt \
160 $(SRCDIR)/../skins/blitz_no_logo/ticket.txt \
 
 
 
 
161 $(SRCDIR)/../skins/default/css.txt \
162 $(SRCDIR)/../skins/default/details.txt \
163 $(SRCDIR)/../skins/default/footer.txt \
164 $(SRCDIR)/../skins/default/header.txt \
165 $(SRCDIR)/../skins/eagle/css.txt \
166
--- src/main.mk
+++ src/main.mk
@@ -156,10 +156,14 @@
156 $(SRCDIR)/../skins/blitz_no_logo/css.txt \
157 $(SRCDIR)/../skins/blitz_no_logo/details.txt \
158 $(SRCDIR)/../skins/blitz_no_logo/footer.txt \
159 $(SRCDIR)/../skins/blitz_no_logo/header.txt \
160 $(SRCDIR)/../skins/blitz_no_logo/ticket.txt \
161 $(SRCDIR)/../skins/bootstrap/css.txt \
162 $(SRCDIR)/../skins/bootstrap/details.txt \
163 $(SRCDIR)/../skins/bootstrap/footer.txt \
164 $(SRCDIR)/../skins/bootstrap/header.txt \
165 $(SRCDIR)/../skins/default/css.txt \
166 $(SRCDIR)/../skins/default/details.txt \
167 $(SRCDIR)/../skins/default/footer.txt \
168 $(SRCDIR)/../skins/default/header.txt \
169 $(SRCDIR)/../skins/eagle/css.txt \
170
+73 -27
--- src/setup.c
+++ src/setup.c
@@ -1106,18 +1106,20 @@
11061106
11071107
style_header("Access Control Settings");
11081108
db_begin_transaction();
11091109
@ <form action="%s(g.zTop)/setup_access" method="post"><div>
11101110
login_insert_csrf_secret();
1111
+ @ <input type="submit" name="submit" value="Apply Changes" /></p>
11111112
@ <hr />
11121113
onoff_attribute("Redirect to HTTPS on the Login page",
11131114
"redirect-to-https", "redirhttps", 0, 0);
11141115
@ <p>When selected, force the use of HTTPS for the Login page.
11151116
@ <p>Details: When enabled, this option causes the $secureurl TH1
11161117
@ variable is set to an "https:" variant of $baseurl. Otherwise,
11171118
@ $secureurl is just an alias for $baseurl. Also when enabled, the
11181119
@ Login page redirects to https if accessed via http.
1120
+ @ (Property: "redirhttps")
11191121
@ <hr />
11201122
onoff_attribute("Require password for local access",
11211123
"localauth", "localauth", 0, 0);
11221124
@ <p>When enabled, the password sign-in is always required for
11231125
@ web access. When disabled, unrestricted web access from 127.0.0.1
@@ -1138,67 +1140,74 @@
11381140
@ <a href="%R/help/server">fossil http</a> commands
11391141
@ without the "--localauth" option.
11401142
@ <li> The server is started from CGI without the "localauth" keyword
11411143
@ in the CGI script.
11421144
@ </ol>
1145
+ @ (Property: "localauth")
11431146
@
11441147
@ <hr />
11451148
onoff_attribute("Enable /test_env",
11461149
"test_env_enable", "test_env_enable", 0, 0);
11471150
@ <p>When enabled, the %h(g.zBaseURL)/test_env URL is available to all
11481151
@ users. When disabled (the default) only users Admin and Setup can visit
11491152
@ the /test_env page.
1153
+ @ (Property: "test_env_enable")
11501154
@ </p>
11511155
@
11521156
@ <hr />
11531157
onoff_attribute("Allow REMOTE_USER authentication",
11541158
"remote_user_ok", "remote_user_ok", 0, 0);
11551159
@ <p>When enabled, if the REMOTE_USER environment variable is set to the
11561160
@ login name of a valid user and no other login credentials are available,
11571161
@ then the REMOTE_USER is accepted as an authenticated user.
1162
+ @ (Property: "remote_user_ok")
11581163
@ </p>
11591164
@
11601165
@ <hr />
11611166
onoff_attribute("Allow HTTP_AUTHENTICATION authentication",
11621167
"http_authentication_ok", "http_authentication_ok", 0, 0);
11631168
@ <p>When enabled, allow the use of the HTTP_AUTHENTICATION environment
11641169
@ variable or the "Authentication:" HTTP header to find the username and
11651170
@ password. This is another way of supporting Basic Authenitication.
1171
+ @ (Property: "http_authentication_ok")
11661172
@ </p>
11671173
@
11681174
@ <hr />
11691175
entry_attribute("IP address terms used in login cookie", 3,
11701176
"ip-prefix-terms", "ipt", "2", 0);
11711177
@ <p>The number of octets of of the IP address used in the login cookie.
11721178
@ Set to zero to omit the IP address from the login cookie. A value of
11731179
@ 2 is recommended.
1180
+ @ (Property: "ip-prefix-terms")
11741181
@ </p>
11751182
@
11761183
@ <hr />
11771184
entry_attribute("Login expiration time", 6, "cookie-expire", "cex",
11781185
"8766", 0);
11791186
@ <p>The number of hours for which a login is valid. This must be a
11801187
@ positive number. The default is 8766 hours which is approximately equal
1181
- @ to a year.</p>
1188
+ @ to a year.
1189
+ @ (Property: "cookie-expire")</p>
11821190
11831191
@ <hr />
11841192
entry_attribute("Download packet limit", 10, "max-download", "mxdwn",
11851193
"5000000", 0);
11861194
@ <p>Fossil tries to limit out-bound sync, clone, and pull packets
11871195
@ to this many bytes, uncompressed. If the client requires more data
11881196
@ than this, then the client will issue multiple HTTP requests.
11891197
@ Values below 1 million are not recommended. 5 million is a
1190
- @ reasonable number.</p>
1198
+ @ reasonable number. (Property: "max-download")</p>
11911199
11921200
@ <hr />
11931201
entry_attribute("Download time limit", 11, "max-download-time", "mxdwnt",
11941202
"30", 0);
11951203
11961204
@ <p>Fossil tries to spend less than this many seconds gathering
11971205
@ the out-bound data of sync, clone, and pull packets.
11981206
@ If the client request takes longer, a partial reply is given similar
1199
- @ to the download packet limit. 30s is a reasonable default.</p>
1207
+ @ to the download packet limit. 30s is a reasonable default.
1208
+ @ (Property: "max-download-time")</p>
12001209
12011210
@ <hr />
12021211
entry_attribute("Server Load Average Limit", 11, "max-loadavg", "mxldavg",
12031212
"0.0", 0);
12041213
@ <p>Some expensive operations (such as computing tarballs, zip archives,
@@ -1205,11 +1214,12 @@
12051214
@ or annotation/blame pages) are prohibited if the load average on the host
12061215
@ computer is too large. Set the threshold for disallowing expensive
12071216
@ computations here. Set this to 0.0 to disable the load average limit.
12081217
@ This limit is only enforced on Unix servers. On Linux systems,
12091218
@ access to the /proc virtual filesystem is required, which means this limit
1210
- @ might not work inside a chroot() jail.</p>
1219
+ @ might not work inside a chroot() jail.
1220
+ @ (Property: "max-loadavg")</p>
12111221
12121222
@ <hr />
12131223
onoff_attribute(
12141224
"Enable hyperlinks for \"nobody\" based on User-Agent and Javascript",
12151225
"auto-hyperlink", "autohyperlink", 1, 0);
@@ -1219,41 +1229,42 @@
12191229
@ being and not a robot or spider and (2) the user agent is able to
12201230
@ run Javascript in order to set the href= attribute of hyperlinks. Bots
12211231
@ and spiders can forge a User-Agent string that makes them seem to be a
12221232
@ normal browser and they can run javascript just like browsers. But most
12231233
@ bots do not go to that much trouble so this is normally an effective
1224
- @ defense.</p>
1234
+ @ defense.<p>
12251235
@
12261236
@ <p>You do not normally want a bot to walk your entire repository because
12271237
@ if it does, your server will end up computing diffs and annotations for
12281238
@ every historical version of every file and creating ZIPs and tarballs of
12291239
@ every historical check-in, which can use a lot of CPU and bandwidth
12301240
@ even for relatively small projects.</p>
12311241
@
12321242
@ <p>Additional parameters that control this behavior:</p>
12331243
@ <blockquote>
1234
- onoff_attribute("Enable hyperlinks for humans (as deduced from the UserAgent "
1235
- " HTTP header string)",
1236
- "auto-hyperlink-ishuman", "ahis", 0, 0);
1244
+ onoff_attribute("Enable hyperlinks for humans as deduced from the UserAgent "
1245
+ "string", "auto-hyperlink-ishuman", "ahis", 0, 0);
12371246
@ <br />
12381247
onoff_attribute("Require mouse movement before enabling hyperlinks",
12391248
"auto-hyperlink-mouseover", "ahmo", 0, 0);
12401249
@ <br />
1241
- entry_attribute("Delay before enabling hyperlinks (milliseconds)", 5,
1250
+ entry_attribute("Delay in milliseconds before enabling hyperlinks", 5,
12421251
"auto-hyperlink-delay", "ah-delay", "10", 0);
12431252
@ </blockquote>
12441253
@ <p>Hyperlinks for user "nobody" are normally enabled as soon as the page
12451254
@ finishes loading. But the first check-box below can be set to require mouse
12461255
@ movement before enabling the links. One can also set a delay prior to enabling
12471256
@ links by enter a positive number of milliseconds in the entry box above.</p>
1257
+ @ (Properties: "auto-hyperlink", "auto-hyperlink-ishuman",
1258
+ @ "auto-hyperlink-mouseover", and "auto-hyperlink-delay")</p>
12481259
12491260
@ <hr />
12501261
onoff_attribute("Require a CAPTCHA if not logged in",
12511262
"require-captcha", "reqcapt", 1, 0);
12521263
@ <p>Require a CAPTCHA for edit operations (appending, creating, or
12531264
@ editing wiki or tickets or adding attachments to wiki or tickets)
1254
- @ for users who are not logged in.</p>
1265
+ @ for users who are not logged in. (Property: "require-captcha")</p>
12551266
12561267
@ <hr />
12571268
entry_attribute("Public pages", 30, "public-pages",
12581269
"pubpage", "", 0);
12591270
@ <p>A comma-separated list of glob patterns for pages that are accessible
@@ -1260,10 +1271,11 @@
12601271
@ without needing a login and using the privileges given by the
12611272
@ "Default privileges" setting below. Example use case: Set this field
12621273
@ to "/doc/trunk/www/*" to give anonymous users read-only permission to the
12631274
@ latest version of the embedded documentation in the www/ folder without
12641275
@ allowing them to see the rest of the source code.
1276
+ @ (Property: "public-pages")
12651277
@ </p>
12661278
12671279
@ <hr />
12681280
onoff_attribute("Allow users to register themselves",
12691281
"self-register", "selfregister", 0, 0);
@@ -1270,29 +1282,30 @@
12701282
@ <p>Allow users to register themselves through the HTTP UI.
12711283
@ The registration form always requires filling in a CAPTCHA
12721284
@ (<em>auto-captcha</em> setting is ignored). Still, bear in mind that anyone
12731285
@ can register under any user name. This option is useful for public projects
12741286
@ where you do not want everyone in any ticket discussion to be named
1275
- @ "Anonymous".</p>
1287
+ @ "Anonymous". (Property: "self-register")</p>
12761288
12771289
@ <hr />
12781290
entry_attribute("Default privileges", 10, "default-perms",
12791291
"defaultperms", "u", 0);
12801292
@ <p>Permissions given to users that... <ul><li>register themselves using
12811293
@ the self-registration procedure (if enabled), or <li>access "public"
12821294
@ pages identified by the public-pages glob pattern above, or <li>
12831295
@ are users newly created by the administrator.</ul>
1296
+ @ (Property: "default-perms")
12841297
@ </p>
12851298
12861299
@ <hr />
12871300
onoff_attribute("Show javascript button to fill in CAPTCHA",
12881301
"auto-captcha", "autocaptcha", 0, 0);
12891302
@ <p>When enabled, a button appears on the login screen for user
12901303
@ "anonymous" that will automatically fill in the CAPTCHA password.
12911304
@ This is less secure than forcing the user to do it manually, but is
12921305
@ probably secure enough and it is certainly more convenient for
1293
- @ anonymous users.</p>
1306
+ @ anonymous users. (Property: "auto-captcha")</p>
12941307
12951308
@ <hr />
12961309
@ <p><input type="submit" name="submit" value="Apply Changes" /></p>
12971310
@ </div></form>
12981311
db_end_transaction(0);
@@ -1440,28 +1453,31 @@
14401453
style_header("Timeline Display Preferences");
14411454
db_begin_transaction();
14421455
@ <form action="%s(g.zTop)/setup_timeline" method="post"><div>
14431456
login_insert_csrf_secret();
14441457
1458
+ @ <p><input type="submit" name="submit" value="Apply Changes" /></p>
14451459
@ <hr />
14461460
onoff_attribute("Allow block-markup in timeline",
14471461
"timeline-block-markup", "tbm", 0, 0);
14481462
@ <p>In timeline displays, check-in comments can be displayed with or
1449
- @ without block markup (paragraphs, tables, etc.)</p>
1463
+ @ without block markup such as paragraphs, tables, etc.
1464
+ @ (Property: "timeline-block-markup")</p>
14501465
14511466
@ <hr />
14521467
onoff_attribute("Plaintext comments on timelines",
14531468
"timeline-plaintext", "tpt", 0, 0);
14541469
@ <p>In timeline displays, check-in comments are displayed literally,
1455
- @ without any wiki or HTML interpretation. (Note: Use CSS to change
1456
- @ display formatting features such as fonts and line-wrapping behavior.)</p>
1470
+ @ without any wiki or HTML interpretation. Use CSS to change
1471
+ @ display formatting features such as fonts and line-wrapping behavior.
1472
+ @ (Property: "timeline-plaintext")</p>
14571473
14581474
@ <hr />
14591475
onoff_attribute("Truncate comment at first blank line",
14601476
"timeline-truncate-at-blank", "ttb", 0, 0);
14611477
@ <p>In timeline displays, check-in comments are displayed only through
1462
- @ the first blank line.</p>
1478
+ @ the first blank line. (Property: "timeline-truncate-at-blank")</p>
14631479
14641480
@ <hr />
14651481
onoff_attribute("Use Universal Coordinated Time (UTC)",
14661482
"timeline-utc", "utc", 1, 0);
14671483
@ <p>Show times as UTC (also sometimes called Greenwich Mean Time (GMT) or
@@ -1478,32 +1494,35 @@
14781494
sqlite3_snprintf(sizeof(zTmDiff), zTmDiff, "%.1f", -tmDiff);
14791495
@ %s(zTmDiff) hours behind UTC.</p>
14801496
}else{
14811497
@ %s(zTmDiff) hours ahead of UTC.</p>
14821498
}
1483
-
1499
+ @ <p>(Property: "timeline-utc")
14841500
@ <hr />
14851501
multiple_choice_attribute("Per-Item Time Format", "timeline-date-format",
14861502
"tdf", "0", count(azTimeFormats)/2, azTimeFormats);
14871503
@ <p>If the "HH:MM" or "HH:MM:SS" format is selected, then the date is shown
14881504
@ in a separate box (using CSS class "timelineDate") whenever the date changes.
14891505
@ With the "YYYY-MM-DD&nbsp;HH:MM" and "YYMMDD ..." formats, the complete date
1490
- @ and time is shown on every timeline entry (using the CSS class "timelineTime").</p>
1506
+ @ and time is shown on every timeline entry using the CSS class "timelineTime".
1507
+ @ (Preperty: "timeline-date-format")</p>
14911508
14921509
@ <hr />
14931510
onoff_attribute("Show version differences by default",
14941511
"show-version-diffs", "vdiff", 0, 0);
14951512
@ <p>The version-information pages linked from the timeline can either
14961513
@ show complete diffs of all file changes, or can just list the names of
14971514
@ the files that have changed. Users can get to either page by
1498
- @ clicking. This setting selects the default.</p>
1515
+ @ clicking. This setting selects the default.
1516
+ @ (Property: "show-version-diffs")</p>
14991517
15001518
@ <hr />
15011519
entry_attribute("Max timeline comment length", 6,
15021520
"timeline-max-comment", "tmc", "0", 0);
15031521
@ <p>The maximum length of a comment to be displayed in a timeline.
1504
- @ "0" there is no length limit.</p>
1522
+ @ "0" there is no length limit.
1523
+ @ (Property: "timeline-max-comment")</p>
15051524
15061525
@ <hr />
15071526
@ <p><input type="submit" name="submit" value="Apply Changes" /></p>
15081527
@ </div></form>
15091528
db_end_transaction(0);
@@ -1609,33 +1628,38 @@
16091628
16101629
style_header("WWW Configuration");
16111630
db_begin_transaction();
16121631
@ <form action="%s(g.zTop)/setup_config" method="post"><div>
16131632
login_insert_csrf_secret();
1633
+ @ <input type="submit" name="submit" value="Apply Changes" /></p>
16141634
@ <hr />
16151635
entry_attribute("Project Name", 60, "project-name", "pn", "", 0);
1616
- @ <p>Give your project a name so visitors know what this site is about.
1636
+ @ <p>A brief project name so visitors know what this site is about.
16171637
@ The project name will also be used as the RSS feed title.
1638
+ @ (Property: "project-name")
16181639
@ </p>
16191640
@ <hr />
16201641
textarea_attribute("Project Description", 3, 80,
16211642
"project-description", "pd", "", 0);
16221643
@ <p>Describe your project. This will be used in page headers for search
1623
- @ engines as well as a short RSS description.</p>
1644
+ @ engines as well as a short RSS description.
1645
+ @ (Property: "project-description")</p>
16241646
@ <hr />
16251647
entry_attribute("Tarball and ZIP-archive Prefix", 20, "short-project-name", "spn", "", 0);
16261648
@ <p>This is used as a prefix on the names of generated tarballs and ZIP archive.
16271649
@ For best results, keep this prefix brief and avoid special characters such
16281650
@ as "/" and "\".
16291651
@ If no tarball prefix is specified, then the full Project Name above is used.
1652
+ @ (Property: "short-project-name")
16301653
@ </p>
16311654
@ <hr />
16321655
onoff_attribute("Enable WYSIWYG Wiki Editing",
16331656
"wysiwyg-wiki", "wysiwyg-wiki", 0, 0);
16341657
@ <p>Enable what-you-see-is-what-you-get (WYSIWYG) editing of wiki pages.
16351658
@ The WYSIWYG editor generates HTML instead of markup, which makes
1636
- @ subsequent manual editing more difficult.</p>
1659
+ @ subsequent manual editing more difficult.
1660
+ @ (Property: "wysiwyg-wiki")</p>
16371661
@ <hr />
16381662
entry_attribute("Index Page", 60, "index-page", "idxpg", "/home", 0);
16391663
@ <p>Enter the pathname of the page to display when the "Home" menu
16401664
@ option is selected and when no pathname is
16411665
@ specified in the URL. For example, if you visit the url:</p>
@@ -1653,10 +1677,11 @@
16531677
@
16541678
@ <p>Note: To avoid a redirect loop or other problems, this entry must
16551679
@ begin with "/" and it must specify a valid page. For example,
16561680
@ "<b>/home</b>" will work but "<b>home</b>" will not, since it omits the
16571681
@ leading "/".</p>
1682
+ @ <p>(Property: "index-page")
16581683
@ <hr />
16591684
onoff_attribute("Use HTML as wiki markup language",
16601685
"wiki-use-html", "wiki-use-html", 0, 0);
16611686
@ <p>Use HTML as the wiki markup language. Wiki links will still be parsed
16621687
@ but all other wiki formatting will be ignored. This option is helpful
@@ -1667,10 +1692,11 @@
16671692
@ No sanitization is done. This means that it is very possible for malicious
16681693
@ users to inject dangerous HTML, CSS and JavaScript code into your wiki.</p>
16691694
@ <p>This should <strong>only</strong> be enabled when wiki editing is limited
16701695
@ to trusted users. It should <strong>not</strong> be used on a publically
16711696
@ editable wiki.</p>
1697
+ @ (Property: "wiki-use-html")
16721698
@ <hr />
16731699
@ <p><input type="submit" name="submit" value="Apply Changes" /></p>
16741700
@ </div></form>
16751701
db_end_transaction(0);
16761702
style_footer();
@@ -1699,11 +1725,11 @@
16991725
@ by a ticket moderator - a user with the "q" or Mod-Tkt privilege.
17001726
@ Ticket changes enter the system and are shown locally, but are not
17011727
@ synced until they are approved. The moderator has the option to
17021728
@ delete the change rather than approve it. Ticket changes made by
17031729
@ a user who has the Mod-Tkt privilege are never subject to
1704
- @ moderation.
1730
+ @ moderation. (Property: "modreq-tkt")
17051731
@
17061732
@ <hr />
17071733
onoff_attribute("Moderate wiki changes",
17081734
"modreq-wiki", "modreq-wiki", 0, 0);
17091735
@ <p>When enabled, any change to wiki is subject to the approval
@@ -1710,11 +1736,11 @@
17101736
@ by a wiki moderator - a user with the "l" or Mod-Wiki privilege.
17111737
@ Wiki changes enter the system and are shown locally, but are not
17121738
@ synced until they are approved. The moderator has the option to
17131739
@ delete the change rather than approve it. Wiki changes made by
17141740
@ a user who has the Mod-Wiki privilege are never subject to
1715
- @ moderation.
1741
+ @ moderation. (Property: "modreq-wiki")
17161742
@ </p>
17171743
17181744
@ <hr />
17191745
@ <p><input type="submit" name="submit" value="Apply Changes" /></p>
17201746
@ </div></form>
@@ -1763,10 +1789,12 @@
17631789
@ <b>Ad-Unit Notes:</b><ul>
17641790
@ <li>Leave both Ad-Units blank to disable all advertising.
17651791
@ <li>The "Banner Ad-Unit" is used for wide pages.
17661792
@ <li>The "Right-Column Ad-Unit" is used on pages with tall, narrow content.
17671793
@ <li>If the "Right-Column Ad-Unit" is blank, the "Banner Ad-Unit" is used on all pages.
1794
+ @ <li>Properties: "adunit", "adunit-right", "adunit-omit-if-admin", and
1795
+ @ "adunit-omit-if-user".
17681796
@ <li>Suggested <a href="setup_skinedit?w=0">CSS</a> changes:
17691797
@ <blockquote><pre>
17701798
@ div.adunit_banner {
17711799
@ margin: auto;
17721800
@ width: 100%%;
@@ -1888,10 +1916,11 @@
18881916
@ Logo Image file:
18891917
@ <input type="file" name="logoim" size="60" accept="image/*" />
18901918
@ <p align="center">
18911919
@ <input type="submit" name="setlogo" value="Change Logo" />
18921920
@ <input type="submit" name="clrlogo" value="Revert To Default" /></p>
1921
+ @ <p>(Properties: "logo-image" and "logo-mimetype")
18931922
@ </div></form>
18941923
@ <hr />
18951924
@
18961925
@ <p>The current background image has a MIME-Type of <b>%h(zBgMime)</b>
18971926
@ and looks like this:</p>
@@ -1911,10 +1940,11 @@
19111940
@ <input type="file" name="bgim" size="60" accept="image/*" />
19121941
@ <p align="center">
19131942
@ <input type="submit" name="setbg" value="Change Background" />
19141943
@ <input type="submit" name="clrbg" value="Revert To Default" /></p>
19151944
@ </div></form>
1945
+ @ <p>(Properties: "background-image" and "background-mimetype")
19161946
@ <hr />
19171947
@
19181948
@ <p><span class="note">Note:</span> Your browser has probably cached these
19191949
@ images, so you may need to press the Reload button before changes will
19201950
@ take effect. </p>
@@ -1965,10 +1995,11 @@
19651995
style_header("Raw SQL Commands");
19661996
@ <p><b>Caution:</b> There are no restrictions on the SQL that can be
19671997
@ run by this page. You can do serious and irrepairable damage to the
19681998
@ repository. Proceed with extreme caution.</p>
19691999
@
2000
+#if 0
19702001
@ <p>Only the first statement in the entry box will be run.
19712002
@ Any subsequent statements will be silently ignored.</p>
19722003
@
19732004
@ <p>Database names:<ul><li>repository
19742005
if( g.zConfigDbName ){
@@ -1976,22 +2007,37 @@
19762007
}
19772008
if( g.localOpen ){
19782009
@ <li>localdb
19792010
}
19802011
@ </ul></p>
2012
+#endif
2013
+
2014
+ if( P("configtab") ){
2015
+ /* If the user presses the "CONFIG Table Query" button, populate the
2016
+ ** query text with a pre-packaged query against the CONFIG table */
2017
+ zQ = "SELECT\n"
2018
+ " CASE WHEN length(name)<50 THEN name ELSE printf('%.50s...',name) END AS name,\n"
2019
+ " CASE WHEN typeof(value)<>'blob' AND length(value)<80 THEN value\n"
2020
+ " ELSE '...' END AS value,\n"
2021
+ " datetime(mtime, 'unixepoch') AS mtime\n"
2022
+ "FROM config\n"
2023
+ "-- ORDER BY mtime DESC; -- optional";
2024
+ go = 1;
2025
+ }
19812026
@
19822027
@ <form method="post" action="%s(g.zTop)/admin_sql">
19832028
login_insert_csrf_secret();
19842029
@ SQL:<br />
1985
- @ <textarea name="q" rows="5" cols="80">%h(zQ)</textarea><br />
2030
+ @ <textarea name="q" rows="8" cols="80">%h(zQ)</textarea><br />
19862031
@ <input type="submit" name="go" value="Run SQL">
19872032
@ <input type="submit" name="schema" value="Show Schema">
19882033
@ <input type="submit" name="tablelist" value="List Tables">
2034
+ @ <input type="submit" name="configtab" value="CONFIG Table Query">
19892035
@ </form>
19902036
if( P("schema") ){
19912037
zQ = sqlite3_mprintf(
1992
- "SELECT sql FROM repository.sqlite_master WHERE sql IS NOT NULL");
2038
+ "SELECT sql FROM repository.sqlite_master WHERE sql IS NOT NULL ORDER BY name");
19932039
go = 1;
19942040
}else if( P("tablelist") ){
19952041
zQ = sqlite3_mprintf(
19962042
"SELECT name FROM repository.sqlite_master WHERE type='table'"
19972043
" ORDER BY name");
19982044
--- src/setup.c
+++ src/setup.c
@@ -1106,18 +1106,20 @@
1106
1107 style_header("Access Control Settings");
1108 db_begin_transaction();
1109 @ <form action="%s(g.zTop)/setup_access" method="post"><div>
1110 login_insert_csrf_secret();
 
1111 @ <hr />
1112 onoff_attribute("Redirect to HTTPS on the Login page",
1113 "redirect-to-https", "redirhttps", 0, 0);
1114 @ <p>When selected, force the use of HTTPS for the Login page.
1115 @ <p>Details: When enabled, this option causes the $secureurl TH1
1116 @ variable is set to an "https:" variant of $baseurl. Otherwise,
1117 @ $secureurl is just an alias for $baseurl. Also when enabled, the
1118 @ Login page redirects to https if accessed via http.
 
1119 @ <hr />
1120 onoff_attribute("Require password for local access",
1121 "localauth", "localauth", 0, 0);
1122 @ <p>When enabled, the password sign-in is always required for
1123 @ web access. When disabled, unrestricted web access from 127.0.0.1
@@ -1138,67 +1140,74 @@
1138 @ <a href="%R/help/server">fossil http</a> commands
1139 @ without the "--localauth" option.
1140 @ <li> The server is started from CGI without the "localauth" keyword
1141 @ in the CGI script.
1142 @ </ol>
 
1143 @
1144 @ <hr />
1145 onoff_attribute("Enable /test_env",
1146 "test_env_enable", "test_env_enable", 0, 0);
1147 @ <p>When enabled, the %h(g.zBaseURL)/test_env URL is available to all
1148 @ users. When disabled (the default) only users Admin and Setup can visit
1149 @ the /test_env page.
 
1150 @ </p>
1151 @
1152 @ <hr />
1153 onoff_attribute("Allow REMOTE_USER authentication",
1154 "remote_user_ok", "remote_user_ok", 0, 0);
1155 @ <p>When enabled, if the REMOTE_USER environment variable is set to the
1156 @ login name of a valid user and no other login credentials are available,
1157 @ then the REMOTE_USER is accepted as an authenticated user.
 
1158 @ </p>
1159 @
1160 @ <hr />
1161 onoff_attribute("Allow HTTP_AUTHENTICATION authentication",
1162 "http_authentication_ok", "http_authentication_ok", 0, 0);
1163 @ <p>When enabled, allow the use of the HTTP_AUTHENTICATION environment
1164 @ variable or the "Authentication:" HTTP header to find the username and
1165 @ password. This is another way of supporting Basic Authenitication.
 
1166 @ </p>
1167 @
1168 @ <hr />
1169 entry_attribute("IP address terms used in login cookie", 3,
1170 "ip-prefix-terms", "ipt", "2", 0);
1171 @ <p>The number of octets of of the IP address used in the login cookie.
1172 @ Set to zero to omit the IP address from the login cookie. A value of
1173 @ 2 is recommended.
 
1174 @ </p>
1175 @
1176 @ <hr />
1177 entry_attribute("Login expiration time", 6, "cookie-expire", "cex",
1178 "8766", 0);
1179 @ <p>The number of hours for which a login is valid. This must be a
1180 @ positive number. The default is 8766 hours which is approximately equal
1181 @ to a year.</p>
 
1182
1183 @ <hr />
1184 entry_attribute("Download packet limit", 10, "max-download", "mxdwn",
1185 "5000000", 0);
1186 @ <p>Fossil tries to limit out-bound sync, clone, and pull packets
1187 @ to this many bytes, uncompressed. If the client requires more data
1188 @ than this, then the client will issue multiple HTTP requests.
1189 @ Values below 1 million are not recommended. 5 million is a
1190 @ reasonable number.</p>
1191
1192 @ <hr />
1193 entry_attribute("Download time limit", 11, "max-download-time", "mxdwnt",
1194 "30", 0);
1195
1196 @ <p>Fossil tries to spend less than this many seconds gathering
1197 @ the out-bound data of sync, clone, and pull packets.
1198 @ If the client request takes longer, a partial reply is given similar
1199 @ to the download packet limit. 30s is a reasonable default.</p>
 
1200
1201 @ <hr />
1202 entry_attribute("Server Load Average Limit", 11, "max-loadavg", "mxldavg",
1203 "0.0", 0);
1204 @ <p>Some expensive operations (such as computing tarballs, zip archives,
@@ -1205,11 +1214,12 @@
1205 @ or annotation/blame pages) are prohibited if the load average on the host
1206 @ computer is too large. Set the threshold for disallowing expensive
1207 @ computations here. Set this to 0.0 to disable the load average limit.
1208 @ This limit is only enforced on Unix servers. On Linux systems,
1209 @ access to the /proc virtual filesystem is required, which means this limit
1210 @ might not work inside a chroot() jail.</p>
 
1211
1212 @ <hr />
1213 onoff_attribute(
1214 "Enable hyperlinks for \"nobody\" based on User-Agent and Javascript",
1215 "auto-hyperlink", "autohyperlink", 1, 0);
@@ -1219,41 +1229,42 @@
1219 @ being and not a robot or spider and (2) the user agent is able to
1220 @ run Javascript in order to set the href= attribute of hyperlinks. Bots
1221 @ and spiders can forge a User-Agent string that makes them seem to be a
1222 @ normal browser and they can run javascript just like browsers. But most
1223 @ bots do not go to that much trouble so this is normally an effective
1224 @ defense.</p>
1225 @
1226 @ <p>You do not normally want a bot to walk your entire repository because
1227 @ if it does, your server will end up computing diffs and annotations for
1228 @ every historical version of every file and creating ZIPs and tarballs of
1229 @ every historical check-in, which can use a lot of CPU and bandwidth
1230 @ even for relatively small projects.</p>
1231 @
1232 @ <p>Additional parameters that control this behavior:</p>
1233 @ <blockquote>
1234 onoff_attribute("Enable hyperlinks for humans (as deduced from the UserAgent "
1235 " HTTP header string)",
1236 "auto-hyperlink-ishuman", "ahis", 0, 0);
1237 @ <br />
1238 onoff_attribute("Require mouse movement before enabling hyperlinks",
1239 "auto-hyperlink-mouseover", "ahmo", 0, 0);
1240 @ <br />
1241 entry_attribute("Delay before enabling hyperlinks (milliseconds)", 5,
1242 "auto-hyperlink-delay", "ah-delay", "10", 0);
1243 @ </blockquote>
1244 @ <p>Hyperlinks for user "nobody" are normally enabled as soon as the page
1245 @ finishes loading. But the first check-box below can be set to require mouse
1246 @ movement before enabling the links. One can also set a delay prior to enabling
1247 @ links by enter a positive number of milliseconds in the entry box above.</p>
 
 
1248
1249 @ <hr />
1250 onoff_attribute("Require a CAPTCHA if not logged in",
1251 "require-captcha", "reqcapt", 1, 0);
1252 @ <p>Require a CAPTCHA for edit operations (appending, creating, or
1253 @ editing wiki or tickets or adding attachments to wiki or tickets)
1254 @ for users who are not logged in.</p>
1255
1256 @ <hr />
1257 entry_attribute("Public pages", 30, "public-pages",
1258 "pubpage", "", 0);
1259 @ <p>A comma-separated list of glob patterns for pages that are accessible
@@ -1260,10 +1271,11 @@
1260 @ without needing a login and using the privileges given by the
1261 @ "Default privileges" setting below. Example use case: Set this field
1262 @ to "/doc/trunk/www/*" to give anonymous users read-only permission to the
1263 @ latest version of the embedded documentation in the www/ folder without
1264 @ allowing them to see the rest of the source code.
 
1265 @ </p>
1266
1267 @ <hr />
1268 onoff_attribute("Allow users to register themselves",
1269 "self-register", "selfregister", 0, 0);
@@ -1270,29 +1282,30 @@
1270 @ <p>Allow users to register themselves through the HTTP UI.
1271 @ The registration form always requires filling in a CAPTCHA
1272 @ (<em>auto-captcha</em> setting is ignored). Still, bear in mind that anyone
1273 @ can register under any user name. This option is useful for public projects
1274 @ where you do not want everyone in any ticket discussion to be named
1275 @ "Anonymous".</p>
1276
1277 @ <hr />
1278 entry_attribute("Default privileges", 10, "default-perms",
1279 "defaultperms", "u", 0);
1280 @ <p>Permissions given to users that... <ul><li>register themselves using
1281 @ the self-registration procedure (if enabled), or <li>access "public"
1282 @ pages identified by the public-pages glob pattern above, or <li>
1283 @ are users newly created by the administrator.</ul>
 
1284 @ </p>
1285
1286 @ <hr />
1287 onoff_attribute("Show javascript button to fill in CAPTCHA",
1288 "auto-captcha", "autocaptcha", 0, 0);
1289 @ <p>When enabled, a button appears on the login screen for user
1290 @ "anonymous" that will automatically fill in the CAPTCHA password.
1291 @ This is less secure than forcing the user to do it manually, but is
1292 @ probably secure enough and it is certainly more convenient for
1293 @ anonymous users.</p>
1294
1295 @ <hr />
1296 @ <p><input type="submit" name="submit" value="Apply Changes" /></p>
1297 @ </div></form>
1298 db_end_transaction(0);
@@ -1440,28 +1453,31 @@
1440 style_header("Timeline Display Preferences");
1441 db_begin_transaction();
1442 @ <form action="%s(g.zTop)/setup_timeline" method="post"><div>
1443 login_insert_csrf_secret();
1444
 
1445 @ <hr />
1446 onoff_attribute("Allow block-markup in timeline",
1447 "timeline-block-markup", "tbm", 0, 0);
1448 @ <p>In timeline displays, check-in comments can be displayed with or
1449 @ without block markup (paragraphs, tables, etc.)</p>
 
1450
1451 @ <hr />
1452 onoff_attribute("Plaintext comments on timelines",
1453 "timeline-plaintext", "tpt", 0, 0);
1454 @ <p>In timeline displays, check-in comments are displayed literally,
1455 @ without any wiki or HTML interpretation. (Note: Use CSS to change
1456 @ display formatting features such as fonts and line-wrapping behavior.)</p>
 
1457
1458 @ <hr />
1459 onoff_attribute("Truncate comment at first blank line",
1460 "timeline-truncate-at-blank", "ttb", 0, 0);
1461 @ <p>In timeline displays, check-in comments are displayed only through
1462 @ the first blank line.</p>
1463
1464 @ <hr />
1465 onoff_attribute("Use Universal Coordinated Time (UTC)",
1466 "timeline-utc", "utc", 1, 0);
1467 @ <p>Show times as UTC (also sometimes called Greenwich Mean Time (GMT) or
@@ -1478,32 +1494,35 @@
1478 sqlite3_snprintf(sizeof(zTmDiff), zTmDiff, "%.1f", -tmDiff);
1479 @ %s(zTmDiff) hours behind UTC.</p>
1480 }else{
1481 @ %s(zTmDiff) hours ahead of UTC.</p>
1482 }
1483
1484 @ <hr />
1485 multiple_choice_attribute("Per-Item Time Format", "timeline-date-format",
1486 "tdf", "0", count(azTimeFormats)/2, azTimeFormats);
1487 @ <p>If the "HH:MM" or "HH:MM:SS" format is selected, then the date is shown
1488 @ in a separate box (using CSS class "timelineDate") whenever the date changes.
1489 @ With the "YYYY-MM-DD&nbsp;HH:MM" and "YYMMDD ..." formats, the complete date
1490 @ and time is shown on every timeline entry (using the CSS class "timelineTime").</p>
 
1491
1492 @ <hr />
1493 onoff_attribute("Show version differences by default",
1494 "show-version-diffs", "vdiff", 0, 0);
1495 @ <p>The version-information pages linked from the timeline can either
1496 @ show complete diffs of all file changes, or can just list the names of
1497 @ the files that have changed. Users can get to either page by
1498 @ clicking. This setting selects the default.</p>
 
1499
1500 @ <hr />
1501 entry_attribute("Max timeline comment length", 6,
1502 "timeline-max-comment", "tmc", "0", 0);
1503 @ <p>The maximum length of a comment to be displayed in a timeline.
1504 @ "0" there is no length limit.</p>
 
1505
1506 @ <hr />
1507 @ <p><input type="submit" name="submit" value="Apply Changes" /></p>
1508 @ </div></form>
1509 db_end_transaction(0);
@@ -1609,33 +1628,38 @@
1609
1610 style_header("WWW Configuration");
1611 db_begin_transaction();
1612 @ <form action="%s(g.zTop)/setup_config" method="post"><div>
1613 login_insert_csrf_secret();
 
1614 @ <hr />
1615 entry_attribute("Project Name", 60, "project-name", "pn", "", 0);
1616 @ <p>Give your project a name so visitors know what this site is about.
1617 @ The project name will also be used as the RSS feed title.
 
1618 @ </p>
1619 @ <hr />
1620 textarea_attribute("Project Description", 3, 80,
1621 "project-description", "pd", "", 0);
1622 @ <p>Describe your project. This will be used in page headers for search
1623 @ engines as well as a short RSS description.</p>
 
1624 @ <hr />
1625 entry_attribute("Tarball and ZIP-archive Prefix", 20, "short-project-name", "spn", "", 0);
1626 @ <p>This is used as a prefix on the names of generated tarballs and ZIP archive.
1627 @ For best results, keep this prefix brief and avoid special characters such
1628 @ as "/" and "\".
1629 @ If no tarball prefix is specified, then the full Project Name above is used.
 
1630 @ </p>
1631 @ <hr />
1632 onoff_attribute("Enable WYSIWYG Wiki Editing",
1633 "wysiwyg-wiki", "wysiwyg-wiki", 0, 0);
1634 @ <p>Enable what-you-see-is-what-you-get (WYSIWYG) editing of wiki pages.
1635 @ The WYSIWYG editor generates HTML instead of markup, which makes
1636 @ subsequent manual editing more difficult.</p>
 
1637 @ <hr />
1638 entry_attribute("Index Page", 60, "index-page", "idxpg", "/home", 0);
1639 @ <p>Enter the pathname of the page to display when the "Home" menu
1640 @ option is selected and when no pathname is
1641 @ specified in the URL. For example, if you visit the url:</p>
@@ -1653,10 +1677,11 @@
1653 @
1654 @ <p>Note: To avoid a redirect loop or other problems, this entry must
1655 @ begin with "/" and it must specify a valid page. For example,
1656 @ "<b>/home</b>" will work but "<b>home</b>" will not, since it omits the
1657 @ leading "/".</p>
 
1658 @ <hr />
1659 onoff_attribute("Use HTML as wiki markup language",
1660 "wiki-use-html", "wiki-use-html", 0, 0);
1661 @ <p>Use HTML as the wiki markup language. Wiki links will still be parsed
1662 @ but all other wiki formatting will be ignored. This option is helpful
@@ -1667,10 +1692,11 @@
1667 @ No sanitization is done. This means that it is very possible for malicious
1668 @ users to inject dangerous HTML, CSS and JavaScript code into your wiki.</p>
1669 @ <p>This should <strong>only</strong> be enabled when wiki editing is limited
1670 @ to trusted users. It should <strong>not</strong> be used on a publically
1671 @ editable wiki.</p>
 
1672 @ <hr />
1673 @ <p><input type="submit" name="submit" value="Apply Changes" /></p>
1674 @ </div></form>
1675 db_end_transaction(0);
1676 style_footer();
@@ -1699,11 +1725,11 @@
1699 @ by a ticket moderator - a user with the "q" or Mod-Tkt privilege.
1700 @ Ticket changes enter the system and are shown locally, but are not
1701 @ synced until they are approved. The moderator has the option to
1702 @ delete the change rather than approve it. Ticket changes made by
1703 @ a user who has the Mod-Tkt privilege are never subject to
1704 @ moderation.
1705 @
1706 @ <hr />
1707 onoff_attribute("Moderate wiki changes",
1708 "modreq-wiki", "modreq-wiki", 0, 0);
1709 @ <p>When enabled, any change to wiki is subject to the approval
@@ -1710,11 +1736,11 @@
1710 @ by a wiki moderator - a user with the "l" or Mod-Wiki privilege.
1711 @ Wiki changes enter the system and are shown locally, but are not
1712 @ synced until they are approved. The moderator has the option to
1713 @ delete the change rather than approve it. Wiki changes made by
1714 @ a user who has the Mod-Wiki privilege are never subject to
1715 @ moderation.
1716 @ </p>
1717
1718 @ <hr />
1719 @ <p><input type="submit" name="submit" value="Apply Changes" /></p>
1720 @ </div></form>
@@ -1763,10 +1789,12 @@
1763 @ <b>Ad-Unit Notes:</b><ul>
1764 @ <li>Leave both Ad-Units blank to disable all advertising.
1765 @ <li>The "Banner Ad-Unit" is used for wide pages.
1766 @ <li>The "Right-Column Ad-Unit" is used on pages with tall, narrow content.
1767 @ <li>If the "Right-Column Ad-Unit" is blank, the "Banner Ad-Unit" is used on all pages.
 
 
1768 @ <li>Suggested <a href="setup_skinedit?w=0">CSS</a> changes:
1769 @ <blockquote><pre>
1770 @ div.adunit_banner {
1771 @ margin: auto;
1772 @ width: 100%%;
@@ -1888,10 +1916,11 @@
1888 @ Logo Image file:
1889 @ <input type="file" name="logoim" size="60" accept="image/*" />
1890 @ <p align="center">
1891 @ <input type="submit" name="setlogo" value="Change Logo" />
1892 @ <input type="submit" name="clrlogo" value="Revert To Default" /></p>
 
1893 @ </div></form>
1894 @ <hr />
1895 @
1896 @ <p>The current background image has a MIME-Type of <b>%h(zBgMime)</b>
1897 @ and looks like this:</p>
@@ -1911,10 +1940,11 @@
1911 @ <input type="file" name="bgim" size="60" accept="image/*" />
1912 @ <p align="center">
1913 @ <input type="submit" name="setbg" value="Change Background" />
1914 @ <input type="submit" name="clrbg" value="Revert To Default" /></p>
1915 @ </div></form>
 
1916 @ <hr />
1917 @
1918 @ <p><span class="note">Note:</span> Your browser has probably cached these
1919 @ images, so you may need to press the Reload button before changes will
1920 @ take effect. </p>
@@ -1965,10 +1995,11 @@
1965 style_header("Raw SQL Commands");
1966 @ <p><b>Caution:</b> There are no restrictions on the SQL that can be
1967 @ run by this page. You can do serious and irrepairable damage to the
1968 @ repository. Proceed with extreme caution.</p>
1969 @
 
1970 @ <p>Only the first statement in the entry box will be run.
1971 @ Any subsequent statements will be silently ignored.</p>
1972 @
1973 @ <p>Database names:<ul><li>repository
1974 if( g.zConfigDbName ){
@@ -1976,22 +2007,37 @@
1976 }
1977 if( g.localOpen ){
1978 @ <li>localdb
1979 }
1980 @ </ul></p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1981 @
1982 @ <form method="post" action="%s(g.zTop)/admin_sql">
1983 login_insert_csrf_secret();
1984 @ SQL:<br />
1985 @ <textarea name="q" rows="5" cols="80">%h(zQ)</textarea><br />
1986 @ <input type="submit" name="go" value="Run SQL">
1987 @ <input type="submit" name="schema" value="Show Schema">
1988 @ <input type="submit" name="tablelist" value="List Tables">
 
1989 @ </form>
1990 if( P("schema") ){
1991 zQ = sqlite3_mprintf(
1992 "SELECT sql FROM repository.sqlite_master WHERE sql IS NOT NULL");
1993 go = 1;
1994 }else if( P("tablelist") ){
1995 zQ = sqlite3_mprintf(
1996 "SELECT name FROM repository.sqlite_master WHERE type='table'"
1997 " ORDER BY name");
1998
--- src/setup.c
+++ src/setup.c
@@ -1106,18 +1106,20 @@
1106
1107 style_header("Access Control Settings");
1108 db_begin_transaction();
1109 @ <form action="%s(g.zTop)/setup_access" method="post"><div>
1110 login_insert_csrf_secret();
1111 @ <input type="submit" name="submit" value="Apply Changes" /></p>
1112 @ <hr />
1113 onoff_attribute("Redirect to HTTPS on the Login page",
1114 "redirect-to-https", "redirhttps", 0, 0);
1115 @ <p>When selected, force the use of HTTPS for the Login page.
1116 @ <p>Details: When enabled, this option causes the $secureurl TH1
1117 @ variable is set to an "https:" variant of $baseurl. Otherwise,
1118 @ $secureurl is just an alias for $baseurl. Also when enabled, the
1119 @ Login page redirects to https if accessed via http.
1120 @ (Property: "redirhttps")
1121 @ <hr />
1122 onoff_attribute("Require password for local access",
1123 "localauth", "localauth", 0, 0);
1124 @ <p>When enabled, the password sign-in is always required for
1125 @ web access. When disabled, unrestricted web access from 127.0.0.1
@@ -1138,67 +1140,74 @@
1140 @ <a href="%R/help/server">fossil http</a> commands
1141 @ without the "--localauth" option.
1142 @ <li> The server is started from CGI without the "localauth" keyword
1143 @ in the CGI script.
1144 @ </ol>
1145 @ (Property: "localauth")
1146 @
1147 @ <hr />
1148 onoff_attribute("Enable /test_env",
1149 "test_env_enable", "test_env_enable", 0, 0);
1150 @ <p>When enabled, the %h(g.zBaseURL)/test_env URL is available to all
1151 @ users. When disabled (the default) only users Admin and Setup can visit
1152 @ the /test_env page.
1153 @ (Property: "test_env_enable")
1154 @ </p>
1155 @
1156 @ <hr />
1157 onoff_attribute("Allow REMOTE_USER authentication",
1158 "remote_user_ok", "remote_user_ok", 0, 0);
1159 @ <p>When enabled, if the REMOTE_USER environment variable is set to the
1160 @ login name of a valid user and no other login credentials are available,
1161 @ then the REMOTE_USER is accepted as an authenticated user.
1162 @ (Property: "remote_user_ok")
1163 @ </p>
1164 @
1165 @ <hr />
1166 onoff_attribute("Allow HTTP_AUTHENTICATION authentication",
1167 "http_authentication_ok", "http_authentication_ok", 0, 0);
1168 @ <p>When enabled, allow the use of the HTTP_AUTHENTICATION environment
1169 @ variable or the "Authentication:" HTTP header to find the username and
1170 @ password. This is another way of supporting Basic Authenitication.
1171 @ (Property: "http_authentication_ok")
1172 @ </p>
1173 @
1174 @ <hr />
1175 entry_attribute("IP address terms used in login cookie", 3,
1176 "ip-prefix-terms", "ipt", "2", 0);
1177 @ <p>The number of octets of of the IP address used in the login cookie.
1178 @ Set to zero to omit the IP address from the login cookie. A value of
1179 @ 2 is recommended.
1180 @ (Property: "ip-prefix-terms")
1181 @ </p>
1182 @
1183 @ <hr />
1184 entry_attribute("Login expiration time", 6, "cookie-expire", "cex",
1185 "8766", 0);
1186 @ <p>The number of hours for which a login is valid. This must be a
1187 @ positive number. The default is 8766 hours which is approximately equal
1188 @ to a year.
1189 @ (Property: "cookie-expire")</p>
1190
1191 @ <hr />
1192 entry_attribute("Download packet limit", 10, "max-download", "mxdwn",
1193 "5000000", 0);
1194 @ <p>Fossil tries to limit out-bound sync, clone, and pull packets
1195 @ to this many bytes, uncompressed. If the client requires more data
1196 @ than this, then the client will issue multiple HTTP requests.
1197 @ Values below 1 million are not recommended. 5 million is a
1198 @ reasonable number. (Property: "max-download")</p>
1199
1200 @ <hr />
1201 entry_attribute("Download time limit", 11, "max-download-time", "mxdwnt",
1202 "30", 0);
1203
1204 @ <p>Fossil tries to spend less than this many seconds gathering
1205 @ the out-bound data of sync, clone, and pull packets.
1206 @ If the client request takes longer, a partial reply is given similar
1207 @ to the download packet limit. 30s is a reasonable default.
1208 @ (Property: "max-download-time")</p>
1209
1210 @ <hr />
1211 entry_attribute("Server Load Average Limit", 11, "max-loadavg", "mxldavg",
1212 "0.0", 0);
1213 @ <p>Some expensive operations (such as computing tarballs, zip archives,
@@ -1205,11 +1214,12 @@
1214 @ or annotation/blame pages) are prohibited if the load average on the host
1215 @ computer is too large. Set the threshold for disallowing expensive
1216 @ computations here. Set this to 0.0 to disable the load average limit.
1217 @ This limit is only enforced on Unix servers. On Linux systems,
1218 @ access to the /proc virtual filesystem is required, which means this limit
1219 @ might not work inside a chroot() jail.
1220 @ (Property: "max-loadavg")</p>
1221
1222 @ <hr />
1223 onoff_attribute(
1224 "Enable hyperlinks for \"nobody\" based on User-Agent and Javascript",
1225 "auto-hyperlink", "autohyperlink", 1, 0);
@@ -1219,41 +1229,42 @@
1229 @ being and not a robot or spider and (2) the user agent is able to
1230 @ run Javascript in order to set the href= attribute of hyperlinks. Bots
1231 @ and spiders can forge a User-Agent string that makes them seem to be a
1232 @ normal browser and they can run javascript just like browsers. But most
1233 @ bots do not go to that much trouble so this is normally an effective
1234 @ defense.<p>
1235 @
1236 @ <p>You do not normally want a bot to walk your entire repository because
1237 @ if it does, your server will end up computing diffs and annotations for
1238 @ every historical version of every file and creating ZIPs and tarballs of
1239 @ every historical check-in, which can use a lot of CPU and bandwidth
1240 @ even for relatively small projects.</p>
1241 @
1242 @ <p>Additional parameters that control this behavior:</p>
1243 @ <blockquote>
1244 onoff_attribute("Enable hyperlinks for humans as deduced from the UserAgent "
1245 "string", "auto-hyperlink-ishuman", "ahis", 0, 0);
 
1246 @ <br />
1247 onoff_attribute("Require mouse movement before enabling hyperlinks",
1248 "auto-hyperlink-mouseover", "ahmo", 0, 0);
1249 @ <br />
1250 entry_attribute("Delay in milliseconds before enabling hyperlinks", 5,
1251 "auto-hyperlink-delay", "ah-delay", "10", 0);
1252 @ </blockquote>
1253 @ <p>Hyperlinks for user "nobody" are normally enabled as soon as the page
1254 @ finishes loading. But the first check-box below can be set to require mouse
1255 @ movement before enabling the links. One can also set a delay prior to enabling
1256 @ links by enter a positive number of milliseconds in the entry box above.</p>
1257 @ (Properties: "auto-hyperlink", "auto-hyperlink-ishuman",
1258 @ "auto-hyperlink-mouseover", and "auto-hyperlink-delay")</p>
1259
1260 @ <hr />
1261 onoff_attribute("Require a CAPTCHA if not logged in",
1262 "require-captcha", "reqcapt", 1, 0);
1263 @ <p>Require a CAPTCHA for edit operations (appending, creating, or
1264 @ editing wiki or tickets or adding attachments to wiki or tickets)
1265 @ for users who are not logged in. (Property: "require-captcha")</p>
1266
1267 @ <hr />
1268 entry_attribute("Public pages", 30, "public-pages",
1269 "pubpage", "", 0);
1270 @ <p>A comma-separated list of glob patterns for pages that are accessible
@@ -1260,10 +1271,11 @@
1271 @ without needing a login and using the privileges given by the
1272 @ "Default privileges" setting below. Example use case: Set this field
1273 @ to "/doc/trunk/www/*" to give anonymous users read-only permission to the
1274 @ latest version of the embedded documentation in the www/ folder without
1275 @ allowing them to see the rest of the source code.
1276 @ (Property: "public-pages")
1277 @ </p>
1278
1279 @ <hr />
1280 onoff_attribute("Allow users to register themselves",
1281 "self-register", "selfregister", 0, 0);
@@ -1270,29 +1282,30 @@
1282 @ <p>Allow users to register themselves through the HTTP UI.
1283 @ The registration form always requires filling in a CAPTCHA
1284 @ (<em>auto-captcha</em> setting is ignored). Still, bear in mind that anyone
1285 @ can register under any user name. This option is useful for public projects
1286 @ where you do not want everyone in any ticket discussion to be named
1287 @ "Anonymous". (Property: "self-register")</p>
1288
1289 @ <hr />
1290 entry_attribute("Default privileges", 10, "default-perms",
1291 "defaultperms", "u", 0);
1292 @ <p>Permissions given to users that... <ul><li>register themselves using
1293 @ the self-registration procedure (if enabled), or <li>access "public"
1294 @ pages identified by the public-pages glob pattern above, or <li>
1295 @ are users newly created by the administrator.</ul>
1296 @ (Property: "default-perms")
1297 @ </p>
1298
1299 @ <hr />
1300 onoff_attribute("Show javascript button to fill in CAPTCHA",
1301 "auto-captcha", "autocaptcha", 0, 0);
1302 @ <p>When enabled, a button appears on the login screen for user
1303 @ "anonymous" that will automatically fill in the CAPTCHA password.
1304 @ This is less secure than forcing the user to do it manually, but is
1305 @ probably secure enough and it is certainly more convenient for
1306 @ anonymous users. (Property: "auto-captcha")</p>
1307
1308 @ <hr />
1309 @ <p><input type="submit" name="submit" value="Apply Changes" /></p>
1310 @ </div></form>
1311 db_end_transaction(0);
@@ -1440,28 +1453,31 @@
1453 style_header("Timeline Display Preferences");
1454 db_begin_transaction();
1455 @ <form action="%s(g.zTop)/setup_timeline" method="post"><div>
1456 login_insert_csrf_secret();
1457
1458 @ <p><input type="submit" name="submit" value="Apply Changes" /></p>
1459 @ <hr />
1460 onoff_attribute("Allow block-markup in timeline",
1461 "timeline-block-markup", "tbm", 0, 0);
1462 @ <p>In timeline displays, check-in comments can be displayed with or
1463 @ without block markup such as paragraphs, tables, etc.
1464 @ (Property: "timeline-block-markup")</p>
1465
1466 @ <hr />
1467 onoff_attribute("Plaintext comments on timelines",
1468 "timeline-plaintext", "tpt", 0, 0);
1469 @ <p>In timeline displays, check-in comments are displayed literally,
1470 @ without any wiki or HTML interpretation. Use CSS to change
1471 @ display formatting features such as fonts and line-wrapping behavior.
1472 @ (Property: "timeline-plaintext")</p>
1473
1474 @ <hr />
1475 onoff_attribute("Truncate comment at first blank line",
1476 "timeline-truncate-at-blank", "ttb", 0, 0);
1477 @ <p>In timeline displays, check-in comments are displayed only through
1478 @ the first blank line. (Property: "timeline-truncate-at-blank")</p>
1479
1480 @ <hr />
1481 onoff_attribute("Use Universal Coordinated Time (UTC)",
1482 "timeline-utc", "utc", 1, 0);
1483 @ <p>Show times as UTC (also sometimes called Greenwich Mean Time (GMT) or
@@ -1478,32 +1494,35 @@
1494 sqlite3_snprintf(sizeof(zTmDiff), zTmDiff, "%.1f", -tmDiff);
1495 @ %s(zTmDiff) hours behind UTC.</p>
1496 }else{
1497 @ %s(zTmDiff) hours ahead of UTC.</p>
1498 }
1499 @ <p>(Property: "timeline-utc")
1500 @ <hr />
1501 multiple_choice_attribute("Per-Item Time Format", "timeline-date-format",
1502 "tdf", "0", count(azTimeFormats)/2, azTimeFormats);
1503 @ <p>If the "HH:MM" or "HH:MM:SS" format is selected, then the date is shown
1504 @ in a separate box (using CSS class "timelineDate") whenever the date changes.
1505 @ With the "YYYY-MM-DD&nbsp;HH:MM" and "YYMMDD ..." formats, the complete date
1506 @ and time is shown on every timeline entry using the CSS class "timelineTime".
1507 @ (Preperty: "timeline-date-format")</p>
1508
1509 @ <hr />
1510 onoff_attribute("Show version differences by default",
1511 "show-version-diffs", "vdiff", 0, 0);
1512 @ <p>The version-information pages linked from the timeline can either
1513 @ show complete diffs of all file changes, or can just list the names of
1514 @ the files that have changed. Users can get to either page by
1515 @ clicking. This setting selects the default.
1516 @ (Property: "show-version-diffs")</p>
1517
1518 @ <hr />
1519 entry_attribute("Max timeline comment length", 6,
1520 "timeline-max-comment", "tmc", "0", 0);
1521 @ <p>The maximum length of a comment to be displayed in a timeline.
1522 @ "0" there is no length limit.
1523 @ (Property: "timeline-max-comment")</p>
1524
1525 @ <hr />
1526 @ <p><input type="submit" name="submit" value="Apply Changes" /></p>
1527 @ </div></form>
1528 db_end_transaction(0);
@@ -1609,33 +1628,38 @@
1628
1629 style_header("WWW Configuration");
1630 db_begin_transaction();
1631 @ <form action="%s(g.zTop)/setup_config" method="post"><div>
1632 login_insert_csrf_secret();
1633 @ <input type="submit" name="submit" value="Apply Changes" /></p>
1634 @ <hr />
1635 entry_attribute("Project Name", 60, "project-name", "pn", "", 0);
1636 @ <p>A brief project name so visitors know what this site is about.
1637 @ The project name will also be used as the RSS feed title.
1638 @ (Property: "project-name")
1639 @ </p>
1640 @ <hr />
1641 textarea_attribute("Project Description", 3, 80,
1642 "project-description", "pd", "", 0);
1643 @ <p>Describe your project. This will be used in page headers for search
1644 @ engines as well as a short RSS description.
1645 @ (Property: "project-description")</p>
1646 @ <hr />
1647 entry_attribute("Tarball and ZIP-archive Prefix", 20, "short-project-name", "spn", "", 0);
1648 @ <p>This is used as a prefix on the names of generated tarballs and ZIP archive.
1649 @ For best results, keep this prefix brief and avoid special characters such
1650 @ as "/" and "\".
1651 @ If no tarball prefix is specified, then the full Project Name above is used.
1652 @ (Property: "short-project-name")
1653 @ </p>
1654 @ <hr />
1655 onoff_attribute("Enable WYSIWYG Wiki Editing",
1656 "wysiwyg-wiki", "wysiwyg-wiki", 0, 0);
1657 @ <p>Enable what-you-see-is-what-you-get (WYSIWYG) editing of wiki pages.
1658 @ The WYSIWYG editor generates HTML instead of markup, which makes
1659 @ subsequent manual editing more difficult.
1660 @ (Property: "wysiwyg-wiki")</p>
1661 @ <hr />
1662 entry_attribute("Index Page", 60, "index-page", "idxpg", "/home", 0);
1663 @ <p>Enter the pathname of the page to display when the "Home" menu
1664 @ option is selected and when no pathname is
1665 @ specified in the URL. For example, if you visit the url:</p>
@@ -1653,10 +1677,11 @@
1677 @
1678 @ <p>Note: To avoid a redirect loop or other problems, this entry must
1679 @ begin with "/" and it must specify a valid page. For example,
1680 @ "<b>/home</b>" will work but "<b>home</b>" will not, since it omits the
1681 @ leading "/".</p>
1682 @ <p>(Property: "index-page")
1683 @ <hr />
1684 onoff_attribute("Use HTML as wiki markup language",
1685 "wiki-use-html", "wiki-use-html", 0, 0);
1686 @ <p>Use HTML as the wiki markup language. Wiki links will still be parsed
1687 @ but all other wiki formatting will be ignored. This option is helpful
@@ -1667,10 +1692,11 @@
1692 @ No sanitization is done. This means that it is very possible for malicious
1693 @ users to inject dangerous HTML, CSS and JavaScript code into your wiki.</p>
1694 @ <p>This should <strong>only</strong> be enabled when wiki editing is limited
1695 @ to trusted users. It should <strong>not</strong> be used on a publically
1696 @ editable wiki.</p>
1697 @ (Property: "wiki-use-html")
1698 @ <hr />
1699 @ <p><input type="submit" name="submit" value="Apply Changes" /></p>
1700 @ </div></form>
1701 db_end_transaction(0);
1702 style_footer();
@@ -1699,11 +1725,11 @@
1725 @ by a ticket moderator - a user with the "q" or Mod-Tkt privilege.
1726 @ Ticket changes enter the system and are shown locally, but are not
1727 @ synced until they are approved. The moderator has the option to
1728 @ delete the change rather than approve it. Ticket changes made by
1729 @ a user who has the Mod-Tkt privilege are never subject to
1730 @ moderation. (Property: "modreq-tkt")
1731 @
1732 @ <hr />
1733 onoff_attribute("Moderate wiki changes",
1734 "modreq-wiki", "modreq-wiki", 0, 0);
1735 @ <p>When enabled, any change to wiki is subject to the approval
@@ -1710,11 +1736,11 @@
1736 @ by a wiki moderator - a user with the "l" or Mod-Wiki privilege.
1737 @ Wiki changes enter the system and are shown locally, but are not
1738 @ synced until they are approved. The moderator has the option to
1739 @ delete the change rather than approve it. Wiki changes made by
1740 @ a user who has the Mod-Wiki privilege are never subject to
1741 @ moderation. (Property: "modreq-wiki")
1742 @ </p>
1743
1744 @ <hr />
1745 @ <p><input type="submit" name="submit" value="Apply Changes" /></p>
1746 @ </div></form>
@@ -1763,10 +1789,12 @@
1789 @ <b>Ad-Unit Notes:</b><ul>
1790 @ <li>Leave both Ad-Units blank to disable all advertising.
1791 @ <li>The "Banner Ad-Unit" is used for wide pages.
1792 @ <li>The "Right-Column Ad-Unit" is used on pages with tall, narrow content.
1793 @ <li>If the "Right-Column Ad-Unit" is blank, the "Banner Ad-Unit" is used on all pages.
1794 @ <li>Properties: "adunit", "adunit-right", "adunit-omit-if-admin", and
1795 @ "adunit-omit-if-user".
1796 @ <li>Suggested <a href="setup_skinedit?w=0">CSS</a> changes:
1797 @ <blockquote><pre>
1798 @ div.adunit_banner {
1799 @ margin: auto;
1800 @ width: 100%%;
@@ -1888,10 +1916,11 @@
1916 @ Logo Image file:
1917 @ <input type="file" name="logoim" size="60" accept="image/*" />
1918 @ <p align="center">
1919 @ <input type="submit" name="setlogo" value="Change Logo" />
1920 @ <input type="submit" name="clrlogo" value="Revert To Default" /></p>
1921 @ <p>(Properties: "logo-image" and "logo-mimetype")
1922 @ </div></form>
1923 @ <hr />
1924 @
1925 @ <p>The current background image has a MIME-Type of <b>%h(zBgMime)</b>
1926 @ and looks like this:</p>
@@ -1911,10 +1940,11 @@
1940 @ <input type="file" name="bgim" size="60" accept="image/*" />
1941 @ <p align="center">
1942 @ <input type="submit" name="setbg" value="Change Background" />
1943 @ <input type="submit" name="clrbg" value="Revert To Default" /></p>
1944 @ </div></form>
1945 @ <p>(Properties: "background-image" and "background-mimetype")
1946 @ <hr />
1947 @
1948 @ <p><span class="note">Note:</span> Your browser has probably cached these
1949 @ images, so you may need to press the Reload button before changes will
1950 @ take effect. </p>
@@ -1965,10 +1995,11 @@
1995 style_header("Raw SQL Commands");
1996 @ <p><b>Caution:</b> There are no restrictions on the SQL that can be
1997 @ run by this page. You can do serious and irrepairable damage to the
1998 @ repository. Proceed with extreme caution.</p>
1999 @
2000 #if 0
2001 @ <p>Only the first statement in the entry box will be run.
2002 @ Any subsequent statements will be silently ignored.</p>
2003 @
2004 @ <p>Database names:<ul><li>repository
2005 if( g.zConfigDbName ){
@@ -1976,22 +2007,37 @@
2007 }
2008 if( g.localOpen ){
2009 @ <li>localdb
2010 }
2011 @ </ul></p>
2012 #endif
2013
2014 if( P("configtab") ){
2015 /* If the user presses the "CONFIG Table Query" button, populate the
2016 ** query text with a pre-packaged query against the CONFIG table */
2017 zQ = "SELECT\n"
2018 " CASE WHEN length(name)<50 THEN name ELSE printf('%.50s...',name) END AS name,\n"
2019 " CASE WHEN typeof(value)<>'blob' AND length(value)<80 THEN value\n"
2020 " ELSE '...' END AS value,\n"
2021 " datetime(mtime, 'unixepoch') AS mtime\n"
2022 "FROM config\n"
2023 "-- ORDER BY mtime DESC; -- optional";
2024 go = 1;
2025 }
2026 @
2027 @ <form method="post" action="%s(g.zTop)/admin_sql">
2028 login_insert_csrf_secret();
2029 @ SQL:<br />
2030 @ <textarea name="q" rows="8" cols="80">%h(zQ)</textarea><br />
2031 @ <input type="submit" name="go" value="Run SQL">
2032 @ <input type="submit" name="schema" value="Show Schema">
2033 @ <input type="submit" name="tablelist" value="List Tables">
2034 @ <input type="submit" name="configtab" value="CONFIG Table Query">
2035 @ </form>
2036 if( P("schema") ){
2037 zQ = sqlite3_mprintf(
2038 "SELECT sql FROM repository.sqlite_master WHERE sql IS NOT NULL ORDER BY name");
2039 go = 1;
2040 }else if( P("tablelist") ){
2041 zQ = sqlite3_mprintf(
2042 "SELECT name FROM repository.sqlite_master WHERE type='table'"
2043 " ORDER BY name");
2044
--- src/skins.c
+++ src/skins.c
@@ -42,10 +42,11 @@
4242
char *zSQL; /* Filled in at run-time with SQL to insert this skin */
4343
} aBuiltinSkin[] = {
4444
{ "Default", "default", 0 },
4545
{ "Blitz", "blitz", 0 },
4646
{ "Blitz, No Logo", "blitz_no_logo", 0 },
47
+ { "Bootstrap", "bootstrap", 0 },
4748
{ "Xekri", "xekri", 0 },
4849
{ "Original", "original", 0 },
4950
{ "Enhanced Original", "enhanced1", 0 },
5051
{ "Shadow boxes & Rounded Corners", "rounded1", 0 },
5152
{ "Eagle", "eagle", 0 },
5253
--- src/skins.c
+++ src/skins.c
@@ -42,10 +42,11 @@
42 char *zSQL; /* Filled in at run-time with SQL to insert this skin */
43 } aBuiltinSkin[] = {
44 { "Default", "default", 0 },
45 { "Blitz", "blitz", 0 },
46 { "Blitz, No Logo", "blitz_no_logo", 0 },
 
47 { "Xekri", "xekri", 0 },
48 { "Original", "original", 0 },
49 { "Enhanced Original", "enhanced1", 0 },
50 { "Shadow boxes & Rounded Corners", "rounded1", 0 },
51 { "Eagle", "eagle", 0 },
52
--- src/skins.c
+++ src/skins.c
@@ -42,10 +42,11 @@
42 char *zSQL; /* Filled in at run-time with SQL to insert this skin */
43 } aBuiltinSkin[] = {
44 { "Default", "default", 0 },
45 { "Blitz", "blitz", 0 },
46 { "Blitz, No Logo", "blitz_no_logo", 0 },
47 { "Bootstrap", "bootstrap", 0 },
48 { "Xekri", "xekri", 0 },
49 { "Original", "original", 0 },
50 { "Enhanced Original", "enhanced1", 0 },
51 { "Shadow boxes & Rounded Corners", "rounded1", 0 },
52 { "Eagle", "eagle", 0 },
53
+20 -6
--- src/stat.c
+++ src/stat.c
@@ -341,41 +341,55 @@
341341
** Show ways in which this repository has been accessed
342342
*/
343343
void urllist_page(void){
344344
Stmt q;
345345
int cnt;
346
+ int showAll = P("all")!=0;
347
+ int nOmitted;
348
+ sqlite3_int64 iNow;
346349
char *zRemote;
347350
login_check_credentials();
348351
if( !g.perm.Admin ){ login_needed(0); return; }
349352
350353
style_header("URLs and Checkouts");
351354
style_adunit_config(ADUNIT_RIGHT_OK);
352355
style_submenu_element("Stat", "stat");
353356
style_submenu_element("Schema", "repo_schema");
357
+ iNow = db_int64(0, "SELECT strftime('%%s','now')");
354358
@ <div class="section">URLs</div>
355359
@ <table border="0" width='100%%'>
356
- db_prepare(&q, "SELECT substr(name,9), datetime(mtime,'unixepoch')"
357
- " FROM config WHERE name GLOB 'baseurl:*' ORDER BY 2 DESC");
360
+ db_prepare(&q, "SELECT substr(name,9), datetime(mtime,'unixepoch'), mtime"
361
+ " FROM config WHERE name GLOB 'baseurl:*' ORDER BY 3 DESC");
358362
cnt = 0;
363
+ nOmitted = 0;
359364
while( db_step(&q)==SQLITE_ROW ){
360
- @ <tr><td width='100%%'>%h(db_column_text(&q,0))</td>
361
- @ <td><nobr>%h(db_column_text(&q,1))</nobr></td></tr>
365
+ if( !showAll && db_column_int64(&q,2)<(iNow - 3600*24*30) && cnt>8 ){
366
+ nOmitted++;
367
+ }else{
368
+ @ <tr><td width='100%%'>%h(db_column_text(&q,0))</td>
369
+ @ <td><nobr>%h(db_column_text(&q,1))</nobr></td></tr>
370
+ }
362371
cnt++;
363372
}
364373
db_finalize(&q);
365374
if( cnt==0 ){
366375
@ <tr><td>(none)</td>
376
+ }else if( nOmitted ){
377
+ @ <tr><td><a href="urllist?all"><i>Show %d(nOmitted) more...</i></a>
367378
}
368379
@ </table>
369380
@ <div class="section">Checkouts</div>
370381
@ <table border="0" width='100%%'>
371382
db_prepare(&q, "SELECT substr(name,7), datetime(mtime,'unixepoch')"
372383
" FROM config WHERE name GLOB 'ckout:*' ORDER BY 2 DESC");
373384
cnt = 0;
374385
while( db_step(&q)==SQLITE_ROW ){
375
- @ <tr><td width='100%%'>%h(db_column_text(&q,0))</td>
376
- @ <td><nobr>%h(db_column_text(&q,1))</nobr></td></tr>
386
+ const char *zPath = db_column_text(&q,0);
387
+ if( vfile_top_of_checkout(zPath) ){
388
+ @ <tr><td width='100%%'>%h(zPath)</td>
389
+ @ <td><nobr>%h(db_column_text(&q,1))</nobr></td></tr>
390
+ }
377391
cnt++;
378392
}
379393
db_finalize(&q);
380394
if( cnt==0 ){
381395
@ <tr><td>(none)</td>
382396
--- src/stat.c
+++ src/stat.c
@@ -341,41 +341,55 @@
341 ** Show ways in which this repository has been accessed
342 */
343 void urllist_page(void){
344 Stmt q;
345 int cnt;
 
 
 
346 char *zRemote;
347 login_check_credentials();
348 if( !g.perm.Admin ){ login_needed(0); return; }
349
350 style_header("URLs and Checkouts");
351 style_adunit_config(ADUNIT_RIGHT_OK);
352 style_submenu_element("Stat", "stat");
353 style_submenu_element("Schema", "repo_schema");
 
354 @ <div class="section">URLs</div>
355 @ <table border="0" width='100%%'>
356 db_prepare(&q, "SELECT substr(name,9), datetime(mtime,'unixepoch')"
357 " FROM config WHERE name GLOB 'baseurl:*' ORDER BY 2 DESC");
358 cnt = 0;
 
359 while( db_step(&q)==SQLITE_ROW ){
360 @ <tr><td width='100%%'>%h(db_column_text(&q,0))</td>
361 @ <td><nobr>%h(db_column_text(&q,1))</nobr></td></tr>
 
 
 
 
362 cnt++;
363 }
364 db_finalize(&q);
365 if( cnt==0 ){
366 @ <tr><td>(none)</td>
 
 
367 }
368 @ </table>
369 @ <div class="section">Checkouts</div>
370 @ <table border="0" width='100%%'>
371 db_prepare(&q, "SELECT substr(name,7), datetime(mtime,'unixepoch')"
372 " FROM config WHERE name GLOB 'ckout:*' ORDER BY 2 DESC");
373 cnt = 0;
374 while( db_step(&q)==SQLITE_ROW ){
375 @ <tr><td width='100%%'>%h(db_column_text(&q,0))</td>
376 @ <td><nobr>%h(db_column_text(&q,1))</nobr></td></tr>
 
 
 
377 cnt++;
378 }
379 db_finalize(&q);
380 if( cnt==0 ){
381 @ <tr><td>(none)</td>
382
--- src/stat.c
+++ src/stat.c
@@ -341,41 +341,55 @@
341 ** Show ways in which this repository has been accessed
342 */
343 void urllist_page(void){
344 Stmt q;
345 int cnt;
346 int showAll = P("all")!=0;
347 int nOmitted;
348 sqlite3_int64 iNow;
349 char *zRemote;
350 login_check_credentials();
351 if( !g.perm.Admin ){ login_needed(0); return; }
352
353 style_header("URLs and Checkouts");
354 style_adunit_config(ADUNIT_RIGHT_OK);
355 style_submenu_element("Stat", "stat");
356 style_submenu_element("Schema", "repo_schema");
357 iNow = db_int64(0, "SELECT strftime('%%s','now')");
358 @ <div class="section">URLs</div>
359 @ <table border="0" width='100%%'>
360 db_prepare(&q, "SELECT substr(name,9), datetime(mtime,'unixepoch'), mtime"
361 " FROM config WHERE name GLOB 'baseurl:*' ORDER BY 3 DESC");
362 cnt = 0;
363 nOmitted = 0;
364 while( db_step(&q)==SQLITE_ROW ){
365 if( !showAll && db_column_int64(&q,2)<(iNow - 3600*24*30) && cnt>8 ){
366 nOmitted++;
367 }else{
368 @ <tr><td width='100%%'>%h(db_column_text(&q,0))</td>
369 @ <td><nobr>%h(db_column_text(&q,1))</nobr></td></tr>
370 }
371 cnt++;
372 }
373 db_finalize(&q);
374 if( cnt==0 ){
375 @ <tr><td>(none)</td>
376 }else if( nOmitted ){
377 @ <tr><td><a href="urllist?all"><i>Show %d(nOmitted) more...</i></a>
378 }
379 @ </table>
380 @ <div class="section">Checkouts</div>
381 @ <table border="0" width='100%%'>
382 db_prepare(&q, "SELECT substr(name,7), datetime(mtime,'unixepoch')"
383 " FROM config WHERE name GLOB 'ckout:*' ORDER BY 2 DESC");
384 cnt = 0;
385 while( db_step(&q)==SQLITE_ROW ){
386 const char *zPath = db_column_text(&q,0);
387 if( vfile_top_of_checkout(zPath) ){
388 @ <tr><td width='100%%'>%h(zPath)</td>
389 @ <td><nobr>%h(db_column_text(&q,1))</nobr></td></tr>
390 }
391 cnt++;
392 }
393 db_finalize(&q);
394 if( cnt==0 ){
395 @ <tr><td>(none)</td>
396
+20 -8
--- src/timeline.c
+++ src/timeline.c
@@ -201,10 +201,18 @@
201201
}
202202
@ <input type="submit">
203203
@ </form>
204204
style_footer();
205205
}
206
+
207
+/*
208
+** Return a new timelineTable id.
209
+*/
210
+int timeline_tableid(void){
211
+ static int id = 0;
212
+ return id++;
213
+}
206214
207215
/*
208216
** Output a timeline in the web format given a query. The query
209217
** should return these columns:
210218
**
@@ -241,10 +249,11 @@
241249
int pendingEndTr = 0; /* True if a </td></tr> is needed */
242250
int vid = 0; /* Current checkout version */
243251
int dateFormat = 0; /* 0: HH:MM (default) */
244252
int bCommentGitStyle = 0; /* Only show comments through first blank line */
245253
const char *zDateFmt;
254
+ int iTableId = timeline_tableid();
246255
247256
if( fossil_strcmp(g.zIpAddr, "127.0.0.1")==0 && db_open_local(0) ){
248257
vid = db_lget_int("checkout", 0);
249258
}
250259
zPrevDate[0] = 0;
@@ -259,11 +268,11 @@
259268
db_static_prepare(&qbranch,
260269
"SELECT value FROM tagxref WHERE tagid=%d AND tagtype>0 AND rid=:rid",
261270
TAG_BRANCH
262271
);
263272
264
- @ <table id="timelineTable" class="timelineTable">
273
+ @ <table id="timelineTable%d(iTableId)" class="timelineTable">
265274
blob_zero(&comment);
266275
while( db_step(pQuery)==SQLITE_ROW ){
267276
int rid = db_column_int(pQuery, 0);
268277
const char *zUuid = db_column_text(pQuery, 1);
269278
int isLeaf = db_column_int(pQuery, 5);
@@ -623,11 +632,11 @@
623632
@ <tr class="timelineBottom"><td></td><td></td><td></td></tr>
624633
}
625634
}
626635
@ </table>
627636
if( fchngQueryInit ) db_finalize(&fchngQuery);
628
- timeline_output_graph_javascript(pGraph, (tmFlags & TIMELINE_DISJOINT)!=0, 0);
637
+ timeline_output_graph_javascript(pGraph, (tmFlags & TIMELINE_DISJOINT)!=0, iTableId, 0);
629638
}
630639
631640
/*
632641
** Change the RGB background color given in the argument in a foreground
633642
** color with the same hue.
@@ -664,10 +673,11 @@
664673
** graph.
665674
*/
666675
void timeline_output_graph_javascript(
667676
GraphContext *pGraph, /* The graph to be displayed */
668677
int omitDescenders, /* True to omit descenders */
678
+ int iTableId, /* Identifier for the timelineTable */
669679
int fileDiff /* True for file diff. False for check-in diff */
670680
){
671681
if( pGraph && pGraph->nErr==0 && pGraph->nRow>0 ){
672682
GraphRow *pRow;
673683
int i;
@@ -674,10 +684,11 @@
674684
char cSep;
675685
int iRailPitch; /* Pixels between consecutive rails */
676686
int showArrowheads; /* True to draw arrowheads. False to omit. */
677687
int circleNodes; /* True for circle nodes. False for square nodes */
678688
int colorGraph; /* Use colors for graph lines */
689
+ int iTopRow; /* Index of the top row of the graph */
679690
680691
iRailPitch = atoi(PD("railpitch","0"));
681692
showArrowheads = skin_detail_boolean("timeline-arrowheads");
682693
circleNodes = skin_detail_boolean("timeline-circle-nodes");
683694
colorGraph = skin_detail_boolean("timeline-color-graph-lines");
@@ -699,11 +710,11 @@
699710
/* the rowinfo[] array contains all the information needed to generate
700711
** the graph. Each entry contains information for a single row:
701712
**
702713
** id: The id of the <div> element for the row. This is an integer.
703714
** to get an actual id, prepend "m" to the integer. The top node
704
- ** is 1 and numbers increase moving down the timeline.
715
+ ** is iTopRow and numbers increase moving down the timeline.
705716
** bg: The background color for this row
706717
** r: The "rail" that the node for this row sits on. The left-most
707718
** rail is 0 and the number increases to the right.
708719
** d: True if there is a "descender" - an arrow coming from the bottom
709720
** of the page straight up to this node.
@@ -725,10 +736,11 @@
725736
** negative, then the rail position is the absolute value of mi[]
726737
** and a thin merge-arrow descender is drawn to the bottom of
727738
** the screen.
728739
** h: The artifact hash of the object being graphed
729740
*/
741
+ iTopRow = pGraph->pFirst ? pGraph->pFirst->idx : 0;
730742
cgi_printf("var rowinfo = [\n");
731743
for(pRow=pGraph->pFirst; pRow; pRow=pRow->pNext){
732744
cgi_printf("{id:%d,bg:\"%s\",r:%d,d:%d,mo:%d,mu:%d,u:%d,f:%d,au:",
733745
pRow->idx, /* id */
734746
pRow->zBgClr, /* bg */
@@ -772,11 +784,11 @@
772784
@ var canvasDiv;
773785
@ var railPitch;
774786
@ var mergeOffset;
775787
@ var node, arrow, arrowSmall, line, mArrow, mLine, wArrow, wLine;
776788
@ function initGraph(){
777
- @ var parent = gebi("timelineTable").rows[0].cells[1];
789
+ @ var parent = gebi("timelineTable%d(iTableId)").rows[0].cells[1];
778790
@ parent.style.verticalAlign = "top";
779791
@ canvasDiv = document.createElement("div");
780792
@ canvasDiv.className = "tl-canvas";
781793
@ canvasDiv.style.position = "absolute";
782794
@ parent.appendChild(canvasDiv);
@@ -901,11 +913,11 @@
901913
@ var x = p.x + (p.r<rail ? node.w : -mArrow.w);
902914
@ var cls = "arrow merge " + (p.r<rail ? "l" : "r");
903915
@ drawBox(cls,null,x,y+(mLine.w-mArrow.h)/2);
904916
@ }
905917
@ function drawNode(p, btm){
906
- @ if( p.u>0 ) drawUpArrow(p,rowinfo[p.u-1],p.fg);
918
+ @ if( p.u>0 ) drawUpArrow(p,rowinfo[p.u-%d(iTopRow)],p.fg);
907919
@ var cls = node.cls;
908920
@ if( p.mi.length ) cls += " merge";
909921
@ if( p.f&1 ) cls += " leaf";
910922
@ var n = drawBox(cls,p.bg,p.x,p.y);
911923
@ n.id = "tln"+p.id;
@@ -916,11 +928,11 @@
916928
@ if( p.d ) drawUpArrow({x: p.x, y: btm-node.h/2},p,p.fg);
917929
}
918930
@ if( p.mo>=0 ){
919931
@ var x0 = p.x + node.w/2;
920932
@ var x1 = p.mo*railPitch + node.w/2;
921
- @ var u = rowinfo[p.mu-1];
933
+ @ var u = rowinfo[p.mu-%d(iTopRow)];
922934
@ var y1 = miLineY(u);
923935
@ if( p.u<0 || p.mo!=p.r ){
924936
@ x1 += mergeLines[p.mo] = -mLine.w/2;
925937
@ var y0 = p.y+2;
926938
@ if( p.r!=p.mo ) drawMergeLine(x0,y0,x1+(x0<x1 ? mLine.w : 0),null);
@@ -940,11 +952,11 @@
940952
@ if( x0<x1 ){
941953
@ x0 = Math.ceil(x0);
942954
@ x1 += line.w;
943955
@ }
944956
@ var y0 = p.y + (node.h-line.w)/2;
945
- @ var u = rowinfo[p.au[i+1]-1];
957
+ @ var u = rowinfo[p.au[i+1]-%d(iTopRow)];
946958
@ if( u.id<p.id ){
947959
@ drawLine(line,u.fg,x0,y0,x1,null);
948960
@ drawUpArrow(p,u,u.fg);
949961
@ }else{
950962
@ var y1 = u.y + (node.h-line.w)/2;
@@ -986,11 +998,11 @@
986998
@ drawNode(rowinfo[i], btm);
987999
@ }
9881000
@ }
9891001
@ var selRow;
9901002
@ function clickOnNode(){
991
- @ var p = rowinfo[parseInt(this.id.match(/\d+$/)[0], 10)-1];
1003
+ @ var p = rowinfo[parseInt(this.id.match(/\d+$/)[0], 10)-%d(iTopRow)];
9921004
@ if( !selRow ){
9931005
@ selRow = p;
9941006
@ this.className += " sel";
9951007
@ canvasDiv.className += " sel";
9961008
@ }else if( selRow==p ){
9971009
--- src/timeline.c
+++ src/timeline.c
@@ -201,10 +201,18 @@
201 }
202 @ <input type="submit">
203 @ </form>
204 style_footer();
205 }
 
 
 
 
 
 
 
 
206
207 /*
208 ** Output a timeline in the web format given a query. The query
209 ** should return these columns:
210 **
@@ -241,10 +249,11 @@
241 int pendingEndTr = 0; /* True if a </td></tr> is needed */
242 int vid = 0; /* Current checkout version */
243 int dateFormat = 0; /* 0: HH:MM (default) */
244 int bCommentGitStyle = 0; /* Only show comments through first blank line */
245 const char *zDateFmt;
 
246
247 if( fossil_strcmp(g.zIpAddr, "127.0.0.1")==0 && db_open_local(0) ){
248 vid = db_lget_int("checkout", 0);
249 }
250 zPrevDate[0] = 0;
@@ -259,11 +268,11 @@
259 db_static_prepare(&qbranch,
260 "SELECT value FROM tagxref WHERE tagid=%d AND tagtype>0 AND rid=:rid",
261 TAG_BRANCH
262 );
263
264 @ <table id="timelineTable" class="timelineTable">
265 blob_zero(&comment);
266 while( db_step(pQuery)==SQLITE_ROW ){
267 int rid = db_column_int(pQuery, 0);
268 const char *zUuid = db_column_text(pQuery, 1);
269 int isLeaf = db_column_int(pQuery, 5);
@@ -623,11 +632,11 @@
623 @ <tr class="timelineBottom"><td></td><td></td><td></td></tr>
624 }
625 }
626 @ </table>
627 if( fchngQueryInit ) db_finalize(&fchngQuery);
628 timeline_output_graph_javascript(pGraph, (tmFlags & TIMELINE_DISJOINT)!=0, 0);
629 }
630
631 /*
632 ** Change the RGB background color given in the argument in a foreground
633 ** color with the same hue.
@@ -664,10 +673,11 @@
664 ** graph.
665 */
666 void timeline_output_graph_javascript(
667 GraphContext *pGraph, /* The graph to be displayed */
668 int omitDescenders, /* True to omit descenders */
 
669 int fileDiff /* True for file diff. False for check-in diff */
670 ){
671 if( pGraph && pGraph->nErr==0 && pGraph->nRow>0 ){
672 GraphRow *pRow;
673 int i;
@@ -674,10 +684,11 @@
674 char cSep;
675 int iRailPitch; /* Pixels between consecutive rails */
676 int showArrowheads; /* True to draw arrowheads. False to omit. */
677 int circleNodes; /* True for circle nodes. False for square nodes */
678 int colorGraph; /* Use colors for graph lines */
 
679
680 iRailPitch = atoi(PD("railpitch","0"));
681 showArrowheads = skin_detail_boolean("timeline-arrowheads");
682 circleNodes = skin_detail_boolean("timeline-circle-nodes");
683 colorGraph = skin_detail_boolean("timeline-color-graph-lines");
@@ -699,11 +710,11 @@
699 /* the rowinfo[] array contains all the information needed to generate
700 ** the graph. Each entry contains information for a single row:
701 **
702 ** id: The id of the <div> element for the row. This is an integer.
703 ** to get an actual id, prepend "m" to the integer. The top node
704 ** is 1 and numbers increase moving down the timeline.
705 ** bg: The background color for this row
706 ** r: The "rail" that the node for this row sits on. The left-most
707 ** rail is 0 and the number increases to the right.
708 ** d: True if there is a "descender" - an arrow coming from the bottom
709 ** of the page straight up to this node.
@@ -725,10 +736,11 @@
725 ** negative, then the rail position is the absolute value of mi[]
726 ** and a thin merge-arrow descender is drawn to the bottom of
727 ** the screen.
728 ** h: The artifact hash of the object being graphed
729 */
 
730 cgi_printf("var rowinfo = [\n");
731 for(pRow=pGraph->pFirst; pRow; pRow=pRow->pNext){
732 cgi_printf("{id:%d,bg:\"%s\",r:%d,d:%d,mo:%d,mu:%d,u:%d,f:%d,au:",
733 pRow->idx, /* id */
734 pRow->zBgClr, /* bg */
@@ -772,11 +784,11 @@
772 @ var canvasDiv;
773 @ var railPitch;
774 @ var mergeOffset;
775 @ var node, arrow, arrowSmall, line, mArrow, mLine, wArrow, wLine;
776 @ function initGraph(){
777 @ var parent = gebi("timelineTable").rows[0].cells[1];
778 @ parent.style.verticalAlign = "top";
779 @ canvasDiv = document.createElement("div");
780 @ canvasDiv.className = "tl-canvas";
781 @ canvasDiv.style.position = "absolute";
782 @ parent.appendChild(canvasDiv);
@@ -901,11 +913,11 @@
901 @ var x = p.x + (p.r<rail ? node.w : -mArrow.w);
902 @ var cls = "arrow merge " + (p.r<rail ? "l" : "r");
903 @ drawBox(cls,null,x,y+(mLine.w-mArrow.h)/2);
904 @ }
905 @ function drawNode(p, btm){
906 @ if( p.u>0 ) drawUpArrow(p,rowinfo[p.u-1],p.fg);
907 @ var cls = node.cls;
908 @ if( p.mi.length ) cls += " merge";
909 @ if( p.f&1 ) cls += " leaf";
910 @ var n = drawBox(cls,p.bg,p.x,p.y);
911 @ n.id = "tln"+p.id;
@@ -916,11 +928,11 @@
916 @ if( p.d ) drawUpArrow({x: p.x, y: btm-node.h/2},p,p.fg);
917 }
918 @ if( p.mo>=0 ){
919 @ var x0 = p.x + node.w/2;
920 @ var x1 = p.mo*railPitch + node.w/2;
921 @ var u = rowinfo[p.mu-1];
922 @ var y1 = miLineY(u);
923 @ if( p.u<0 || p.mo!=p.r ){
924 @ x1 += mergeLines[p.mo] = -mLine.w/2;
925 @ var y0 = p.y+2;
926 @ if( p.r!=p.mo ) drawMergeLine(x0,y0,x1+(x0<x1 ? mLine.w : 0),null);
@@ -940,11 +952,11 @@
940 @ if( x0<x1 ){
941 @ x0 = Math.ceil(x0);
942 @ x1 += line.w;
943 @ }
944 @ var y0 = p.y + (node.h-line.w)/2;
945 @ var u = rowinfo[p.au[i+1]-1];
946 @ if( u.id<p.id ){
947 @ drawLine(line,u.fg,x0,y0,x1,null);
948 @ drawUpArrow(p,u,u.fg);
949 @ }else{
950 @ var y1 = u.y + (node.h-line.w)/2;
@@ -986,11 +998,11 @@
986 @ drawNode(rowinfo[i], btm);
987 @ }
988 @ }
989 @ var selRow;
990 @ function clickOnNode(){
991 @ var p = rowinfo[parseInt(this.id.match(/\d+$/)[0], 10)-1];
992 @ if( !selRow ){
993 @ selRow = p;
994 @ this.className += " sel";
995 @ canvasDiv.className += " sel";
996 @ }else if( selRow==p ){
997
--- src/timeline.c
+++ src/timeline.c
@@ -201,10 +201,18 @@
201 }
202 @ <input type="submit">
203 @ </form>
204 style_footer();
205 }
206
207 /*
208 ** Return a new timelineTable id.
209 */
210 int timeline_tableid(void){
211 static int id = 0;
212 return id++;
213 }
214
215 /*
216 ** Output a timeline in the web format given a query. The query
217 ** should return these columns:
218 **
@@ -241,10 +249,11 @@
249 int pendingEndTr = 0; /* True if a </td></tr> is needed */
250 int vid = 0; /* Current checkout version */
251 int dateFormat = 0; /* 0: HH:MM (default) */
252 int bCommentGitStyle = 0; /* Only show comments through first blank line */
253 const char *zDateFmt;
254 int iTableId = timeline_tableid();
255
256 if( fossil_strcmp(g.zIpAddr, "127.0.0.1")==0 && db_open_local(0) ){
257 vid = db_lget_int("checkout", 0);
258 }
259 zPrevDate[0] = 0;
@@ -259,11 +268,11 @@
268 db_static_prepare(&qbranch,
269 "SELECT value FROM tagxref WHERE tagid=%d AND tagtype>0 AND rid=:rid",
270 TAG_BRANCH
271 );
272
273 @ <table id="timelineTable%d(iTableId)" class="timelineTable">
274 blob_zero(&comment);
275 while( db_step(pQuery)==SQLITE_ROW ){
276 int rid = db_column_int(pQuery, 0);
277 const char *zUuid = db_column_text(pQuery, 1);
278 int isLeaf = db_column_int(pQuery, 5);
@@ -623,11 +632,11 @@
632 @ <tr class="timelineBottom"><td></td><td></td><td></td></tr>
633 }
634 }
635 @ </table>
636 if( fchngQueryInit ) db_finalize(&fchngQuery);
637 timeline_output_graph_javascript(pGraph, (tmFlags & TIMELINE_DISJOINT)!=0, iTableId, 0);
638 }
639
640 /*
641 ** Change the RGB background color given in the argument in a foreground
642 ** color with the same hue.
@@ -664,10 +673,11 @@
673 ** graph.
674 */
675 void timeline_output_graph_javascript(
676 GraphContext *pGraph, /* The graph to be displayed */
677 int omitDescenders, /* True to omit descenders */
678 int iTableId, /* Identifier for the timelineTable */
679 int fileDiff /* True for file diff. False for check-in diff */
680 ){
681 if( pGraph && pGraph->nErr==0 && pGraph->nRow>0 ){
682 GraphRow *pRow;
683 int i;
@@ -674,10 +684,11 @@
684 char cSep;
685 int iRailPitch; /* Pixels between consecutive rails */
686 int showArrowheads; /* True to draw arrowheads. False to omit. */
687 int circleNodes; /* True for circle nodes. False for square nodes */
688 int colorGraph; /* Use colors for graph lines */
689 int iTopRow; /* Index of the top row of the graph */
690
691 iRailPitch = atoi(PD("railpitch","0"));
692 showArrowheads = skin_detail_boolean("timeline-arrowheads");
693 circleNodes = skin_detail_boolean("timeline-circle-nodes");
694 colorGraph = skin_detail_boolean("timeline-color-graph-lines");
@@ -699,11 +710,11 @@
710 /* the rowinfo[] array contains all the information needed to generate
711 ** the graph. Each entry contains information for a single row:
712 **
713 ** id: The id of the <div> element for the row. This is an integer.
714 ** to get an actual id, prepend "m" to the integer. The top node
715 ** is iTopRow and numbers increase moving down the timeline.
716 ** bg: The background color for this row
717 ** r: The "rail" that the node for this row sits on. The left-most
718 ** rail is 0 and the number increases to the right.
719 ** d: True if there is a "descender" - an arrow coming from the bottom
720 ** of the page straight up to this node.
@@ -725,10 +736,11 @@
736 ** negative, then the rail position is the absolute value of mi[]
737 ** and a thin merge-arrow descender is drawn to the bottom of
738 ** the screen.
739 ** h: The artifact hash of the object being graphed
740 */
741 iTopRow = pGraph->pFirst ? pGraph->pFirst->idx : 0;
742 cgi_printf("var rowinfo = [\n");
743 for(pRow=pGraph->pFirst; pRow; pRow=pRow->pNext){
744 cgi_printf("{id:%d,bg:\"%s\",r:%d,d:%d,mo:%d,mu:%d,u:%d,f:%d,au:",
745 pRow->idx, /* id */
746 pRow->zBgClr, /* bg */
@@ -772,11 +784,11 @@
784 @ var canvasDiv;
785 @ var railPitch;
786 @ var mergeOffset;
787 @ var node, arrow, arrowSmall, line, mArrow, mLine, wArrow, wLine;
788 @ function initGraph(){
789 @ var parent = gebi("timelineTable%d(iTableId)").rows[0].cells[1];
790 @ parent.style.verticalAlign = "top";
791 @ canvasDiv = document.createElement("div");
792 @ canvasDiv.className = "tl-canvas";
793 @ canvasDiv.style.position = "absolute";
794 @ parent.appendChild(canvasDiv);
@@ -901,11 +913,11 @@
913 @ var x = p.x + (p.r<rail ? node.w : -mArrow.w);
914 @ var cls = "arrow merge " + (p.r<rail ? "l" : "r");
915 @ drawBox(cls,null,x,y+(mLine.w-mArrow.h)/2);
916 @ }
917 @ function drawNode(p, btm){
918 @ if( p.u>0 ) drawUpArrow(p,rowinfo[p.u-%d(iTopRow)],p.fg);
919 @ var cls = node.cls;
920 @ if( p.mi.length ) cls += " merge";
921 @ if( p.f&1 ) cls += " leaf";
922 @ var n = drawBox(cls,p.bg,p.x,p.y);
923 @ n.id = "tln"+p.id;
@@ -916,11 +928,11 @@
928 @ if( p.d ) drawUpArrow({x: p.x, y: btm-node.h/2},p,p.fg);
929 }
930 @ if( p.mo>=0 ){
931 @ var x0 = p.x + node.w/2;
932 @ var x1 = p.mo*railPitch + node.w/2;
933 @ var u = rowinfo[p.mu-%d(iTopRow)];
934 @ var y1 = miLineY(u);
935 @ if( p.u<0 || p.mo!=p.r ){
936 @ x1 += mergeLines[p.mo] = -mLine.w/2;
937 @ var y0 = p.y+2;
938 @ if( p.r!=p.mo ) drawMergeLine(x0,y0,x1+(x0<x1 ? mLine.w : 0),null);
@@ -940,11 +952,11 @@
952 @ if( x0<x1 ){
953 @ x0 = Math.ceil(x0);
954 @ x1 += line.w;
955 @ }
956 @ var y0 = p.y + (node.h-line.w)/2;
957 @ var u = rowinfo[p.au[i+1]-%d(iTopRow)];
958 @ if( u.id<p.id ){
959 @ drawLine(line,u.fg,x0,y0,x1,null);
960 @ drawUpArrow(p,u,u.fg);
961 @ }else{
962 @ var y1 = u.y + (node.h-line.w)/2;
@@ -986,11 +998,11 @@
998 @ drawNode(rowinfo[i], btm);
999 @ }
1000 @ }
1001 @ var selRow;
1002 @ function clickOnNode(){
1003 @ var p = rowinfo[parseInt(this.id.match(/\d+$/)[0], 10)-%d(iTopRow)];
1004 @ if( !selRow ){
1005 @ selRow = p;
1006 @ this.className += " sel";
1007 @ canvasDiv.className += " sel";
1008 @ }else if( selRow==p ){
1009
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -565,10 +565,14 @@
565565
$(SRCDIR)/../skins/blitz_no_logo/css.txt \
566566
$(SRCDIR)/../skins/blitz_no_logo/details.txt \
567567
$(SRCDIR)/../skins/blitz_no_logo/footer.txt \
568568
$(SRCDIR)/../skins/blitz_no_logo/header.txt \
569569
$(SRCDIR)/../skins/blitz_no_logo/ticket.txt \
570
+ $(SRCDIR)/../skins/bootstrap/css.txt \
571
+ $(SRCDIR)/../skins/bootstrap/details.txt \
572
+ $(SRCDIR)/../skins/bootstrap/footer.txt \
573
+ $(SRCDIR)/../skins/bootstrap/header.txt \
570574
$(SRCDIR)/../skins/default/css.txt \
571575
$(SRCDIR)/../skins/default/details.txt \
572576
$(SRCDIR)/../skins/default/footer.txt \
573577
$(SRCDIR)/../skins/default/header.txt \
574578
$(SRCDIR)/../skins/eagle/css.txt \
575579
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -565,10 +565,14 @@
565 $(SRCDIR)/../skins/blitz_no_logo/css.txt \
566 $(SRCDIR)/../skins/blitz_no_logo/details.txt \
567 $(SRCDIR)/../skins/blitz_no_logo/footer.txt \
568 $(SRCDIR)/../skins/blitz_no_logo/header.txt \
569 $(SRCDIR)/../skins/blitz_no_logo/ticket.txt \
 
 
 
 
570 $(SRCDIR)/../skins/default/css.txt \
571 $(SRCDIR)/../skins/default/details.txt \
572 $(SRCDIR)/../skins/default/footer.txt \
573 $(SRCDIR)/../skins/default/header.txt \
574 $(SRCDIR)/../skins/eagle/css.txt \
575
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -565,10 +565,14 @@
565 $(SRCDIR)/../skins/blitz_no_logo/css.txt \
566 $(SRCDIR)/../skins/blitz_no_logo/details.txt \
567 $(SRCDIR)/../skins/blitz_no_logo/footer.txt \
568 $(SRCDIR)/../skins/blitz_no_logo/header.txt \
569 $(SRCDIR)/../skins/blitz_no_logo/ticket.txt \
570 $(SRCDIR)/../skins/bootstrap/css.txt \
571 $(SRCDIR)/../skins/bootstrap/details.txt \
572 $(SRCDIR)/../skins/bootstrap/footer.txt \
573 $(SRCDIR)/../skins/bootstrap/header.txt \
574 $(SRCDIR)/../skins/default/css.txt \
575 $(SRCDIR)/../skins/default/details.txt \
576 $(SRCDIR)/../skins/default/footer.txt \
577 $(SRCDIR)/../skins/default/header.txt \
578 $(SRCDIR)/../skins/eagle/css.txt \
579
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -491,10 +491,14 @@
491491
$(SRCDIR)\../skins/blitz_no_logo/css.txt \
492492
$(SRCDIR)\../skins/blitz_no_logo/details.txt \
493493
$(SRCDIR)\../skins/blitz_no_logo/footer.txt \
494494
$(SRCDIR)\../skins/blitz_no_logo/header.txt \
495495
$(SRCDIR)\../skins/blitz_no_logo/ticket.txt \
496
+ $(SRCDIR)\../skins/bootstrap/css.txt \
497
+ $(SRCDIR)\../skins/bootstrap/details.txt \
498
+ $(SRCDIR)\../skins/bootstrap/footer.txt \
499
+ $(SRCDIR)\../skins/bootstrap/header.txt \
496500
$(SRCDIR)\../skins/default/css.txt \
497501
$(SRCDIR)\../skins/default/details.txt \
498502
$(SRCDIR)\../skins/default/footer.txt \
499503
$(SRCDIR)\../skins/default/header.txt \
500504
$(SRCDIR)\../skins/eagle/css.txt \
501505
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -491,10 +491,14 @@
491 $(SRCDIR)\../skins/blitz_no_logo/css.txt \
492 $(SRCDIR)\../skins/blitz_no_logo/details.txt \
493 $(SRCDIR)\../skins/blitz_no_logo/footer.txt \
494 $(SRCDIR)\../skins/blitz_no_logo/header.txt \
495 $(SRCDIR)\../skins/blitz_no_logo/ticket.txt \
 
 
 
 
496 $(SRCDIR)\../skins/default/css.txt \
497 $(SRCDIR)\../skins/default/details.txt \
498 $(SRCDIR)\../skins/default/footer.txt \
499 $(SRCDIR)\../skins/default/header.txt \
500 $(SRCDIR)\../skins/eagle/css.txt \
501
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -491,10 +491,14 @@
491 $(SRCDIR)\../skins/blitz_no_logo/css.txt \
492 $(SRCDIR)\../skins/blitz_no_logo/details.txt \
493 $(SRCDIR)\../skins/blitz_no_logo/footer.txt \
494 $(SRCDIR)\../skins/blitz_no_logo/header.txt \
495 $(SRCDIR)\../skins/blitz_no_logo/ticket.txt \
496 $(SRCDIR)\../skins/bootstrap/css.txt \
497 $(SRCDIR)\../skins/bootstrap/details.txt \
498 $(SRCDIR)\../skins/bootstrap/footer.txt \
499 $(SRCDIR)\../skins/bootstrap/header.txt \
500 $(SRCDIR)\../skins/default/css.txt \
501 $(SRCDIR)\../skins/default/details.txt \
502 $(SRCDIR)\../skins/default/footer.txt \
503 $(SRCDIR)\../skins/default/header.txt \
504 $(SRCDIR)\../skins/eagle/css.txt \
505
+7 -1
--- www/server.wiki
+++ www/server.wiki
@@ -176,11 +176,12 @@
176176
for your particular web server. In particular, the following permissions are
177177
<em>normally</em> required (but, again, may be different for a particular
178178
configuration):
179179
180180
<ul>
181
-<li>The Fossil binary must be readable/executable, and ALL directories leading up to it
181
+<li>The Fossil binary (/usr/bin/fossil in the example above)
182
+must be readable/executable, and ALL directories leading up to it
182183
must be readable by the process which executes the CGI.</li>
183184
<li>ALL directories leading to the CGI script must also be readable and the CGI
184185
script itself must be executable for the user under which it will run (which often differs
185186
from the one running the web server - consult your site's documentation or administrator).</li>
186187
<li>The repository file AND the directory containing it must be writable by the same account
@@ -213,10 +214,15 @@
213214
</p>
214215
<p>
215216
Once deployed, a URL like: <b>http://mydomain.org/cgi-bin/repo/XYZ</b>
216217
will serve up the repository "/home/fossil/repos/XYZ.fossil" (if it exists).
217218
</p>
219
+<p>
220
+Additional options available to the CGI script are documented in the
221
+source code. As of 2017-07-02, the available options are described at
222
+[/artifact/9a52a07b?ln=1777-1824|main.c lines 1777 through 1824].
223
+</p>
218224
</blockquote>
219225
220226
<a name="scgi"></a>
221227
<h2>Fossil as SCGI</h2><blockquote>
222228
223229
--- www/server.wiki
+++ www/server.wiki
@@ -176,11 +176,12 @@
176 for your particular web server. In particular, the following permissions are
177 <em>normally</em> required (but, again, may be different for a particular
178 configuration):
179
180 <ul>
181 <li>The Fossil binary must be readable/executable, and ALL directories leading up to it
 
182 must be readable by the process which executes the CGI.</li>
183 <li>ALL directories leading to the CGI script must also be readable and the CGI
184 script itself must be executable for the user under which it will run (which often differs
185 from the one running the web server - consult your site's documentation or administrator).</li>
186 <li>The repository file AND the directory containing it must be writable by the same account
@@ -213,10 +214,15 @@
213 </p>
214 <p>
215 Once deployed, a URL like: <b>http://mydomain.org/cgi-bin/repo/XYZ</b>
216 will serve up the repository "/home/fossil/repos/XYZ.fossil" (if it exists).
217 </p>
 
 
 
 
 
218 </blockquote>
219
220 <a name="scgi"></a>
221 <h2>Fossil as SCGI</h2><blockquote>
222
223
--- www/server.wiki
+++ www/server.wiki
@@ -176,11 +176,12 @@
176 for your particular web server. In particular, the following permissions are
177 <em>normally</em> required (but, again, may be different for a particular
178 configuration):
179
180 <ul>
181 <li>The Fossil binary (/usr/bin/fossil in the example above)
182 must be readable/executable, and ALL directories leading up to it
183 must be readable by the process which executes the CGI.</li>
184 <li>ALL directories leading to the CGI script must also be readable and the CGI
185 script itself must be executable for the user under which it will run (which often differs
186 from the one running the web server - consult your site's documentation or administrator).</li>
187 <li>The repository file AND the directory containing it must be writable by the same account
@@ -213,10 +214,15 @@
214 </p>
215 <p>
216 Once deployed, a URL like: <b>http://mydomain.org/cgi-bin/repo/XYZ</b>
217 will serve up the repository "/home/fossil/repos/XYZ.fossil" (if it exists).
218 </p>
219 <p>
220 Additional options available to the CGI script are documented in the
221 source code. As of 2017-07-02, the available options are described at
222 [/artifact/9a52a07b?ln=1777-1824|main.c lines 1777 through 1824].
223 </p>
224 </blockquote>
225
226 <a name="scgi"></a>
227 <h2>Fossil as SCGI</h2><blockquote>
228
229

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button