line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Color::Mix; |
2
|
|
|
|
|
|
|
|
3
|
1
|
|
|
1
|
|
62298
|
use strict; |
|
1
|
|
|
|
|
3
|
|
|
1
|
|
|
|
|
36
|
|
4
|
1
|
|
|
1
|
|
6
|
use warnings; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
26
|
|
5
|
1
|
|
|
1
|
|
5
|
use Carp; |
|
1
|
|
|
|
|
13
|
|
|
1
|
|
|
|
|
1988
|
|
6
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
our $VERSION = '0.02'; |
8
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
sub new { |
10
|
2
|
|
|
2
|
1
|
781
|
my ($class) = shift; |
11
|
2
|
|
|
|
|
4
|
my $self = {}; |
12
|
2
|
|
66
|
|
|
13
|
bless $self, ref($class) || $class; |
13
|
2
|
|
|
|
|
7
|
$self->_initialize; |
14
|
2
|
|
|
|
|
6
|
return $self; |
15
|
|
|
|
|
|
|
} |
16
|
|
|
|
|
|
|
|
17
|
|
|
|
|
|
|
################################## |
18
|
|
|
|
|
|
|
# P U B L I C M E T H O D S |
19
|
|
|
|
|
|
|
################################## |
20
|
|
|
|
|
|
|
|
21
|
|
|
|
|
|
|
sub analogous { |
22
|
4
|
|
|
4
|
1
|
3078
|
my ($self, $color, $my_slices, $slices) = @_; |
23
|
4
|
|
100
|
|
|
16
|
$my_slices ||= 3; |
24
|
4
|
|
100
|
|
|
30
|
$slices ||= 12; |
25
|
4
|
|
|
|
|
10
|
$color = $self->get_color($color); |
26
|
4
|
|
|
|
|
9
|
my $angle = 360 / $slices; |
27
|
4
|
|
|
|
|
11
|
return $color, map { $self->_rotate($color, $angle*$_) } 1 .. $my_slices; |
|
13
|
|
|
|
|
35
|
|
28
|
|
|
|
|
|
|
} |
29
|
|
|
|
|
|
|
|
30
|
|
|
|
|
|
|
|
31
|
|
|
|
|
|
|
sub complementary { |
32
|
5
|
|
|
5
|
1
|
521
|
my ($self, $color) = @_; |
33
|
5
|
|
|
|
|
12
|
return $self->_rotate($color, 180); |
34
|
|
|
|
|
|
|
} |
35
|
|
|
|
|
|
|
|
36
|
|
|
|
|
|
|
|
37
|
|
|
|
|
|
|
sub double_complementary { |
38
|
1
|
|
|
1
|
1
|
3
|
my ($self, $primary, $secondary) = @_; |
39
|
1
|
|
|
|
|
4
|
return ($self->complementary($primary), $self->complementary($secondary)); |
40
|
|
|
|
|
|
|
} |
41
|
|
|
|
|
|
|
|
42
|
|
|
|
|
|
|
|
43
|
|
|
|
|
|
|
sub trinary { |
44
|
2
|
|
|
2
|
1
|
720
|
my ($self, $primary) = @_; |
45
|
2
|
|
|
|
|
5
|
return ($self->get_color($primary), $self->_rotate($primary, 120), $self->_rotate($primary, 240)); |
46
|
|
|
|
|
|
|
} |
47
|
|
|
|
|
|
|
|
48
|
|
|
|
|
|
|
|
49
|
|
|
|
|
|
|
sub lighten { |
50
|
7
|
|
|
7
|
1
|
17
|
my ($self, $color, $by) = @_; |
51
|
7
|
|
|
|
|
16
|
$color = $self->get_color($color); |
52
|
7
|
|
100
|
|
|
26
|
$by||=1; |
53
|
7
|
|
|
|
|
14
|
my $shade = $self->get_shade; |
54
|
7
|
100
|
|
|
|
16
|
return sprintf('%.2x%.2x%.2x', map { ( $_ + $shade * $by > 255) ? 255 : $_ + $shade * $by } |
|
21
|
|
|
|
|
110
|
|
55
|
|
|
|
|
|
|
$self->_rgb($color)); |
56
|
|
|
|
|
|
|
} |
57
|
|
|
|
|
|
|
|
58
|
|
|
|
|
|
|
|
59
|
|
|
|
|
|
|
sub darken { |
60
|
5
|
|
|
5
|
1
|
12
|
my ($self, $color, $by) = @_; |
61
|
5
|
|
|
|
|
13
|
$color = $self->get_color($color); |
62
|
5
|
|
100
|
|
|
20
|
$by||=1; |
63
|
5
|
|
|
|
|
10
|
my $shade = $self->get_shade; |
64
|
5
|
100
|
|
|
|
12
|
return sprintf('%.2x%.2x%.2x', map { ($_ - $shade * $by < 0) ? 0 : $_ - $shade * $by } |
|
15
|
|
|
|
|
417
|
|
65
|
|
|
|
|
|
|
$self->_rgb($color)); |
66
|
|
|
|
|
|
|
} |
67
|
|
|
|
|
|
|
|
68
|
|
|
|
|
|
|
|
69
|
|
|
|
|
|
|
sub get_color { |
70
|
44
|
|
|
44
|
1
|
1797
|
my ($self, $color) = @_; |
71
|
44
|
100
|
|
|
|
72
|
return $color if $self->_is_hex_color($color); |
72
|
10
|
100
|
|
|
|
27
|
return $self->_get_named_color($color) if $self->_is_color_name($color); |
73
|
1
|
|
|
|
|
31
|
carp "Doesn't look like a valid color"; |
74
|
|
|
|
|
|
|
} |
75
|
|
|
|
|
|
|
|
76
|
|
|
|
|
|
|
|
77
|
|
|
|
|
|
|
sub get_color_list { |
78
|
0
|
|
|
0
|
1
|
0
|
my ($self) = @_; |
79
|
0
|
|
|
|
|
0
|
return sort keys %{$self->{colors}}; |
|
0
|
|
|
|
|
0
|
|
80
|
|
|
|
|
|
|
} |
81
|
|
|
|
|
|
|
|
82
|
|
|
|
|
|
|
|
83
|
|
|
|
|
|
|
sub set_shade { |
84
|
4
|
|
|
4
|
1
|
9
|
my ($self, $shade) = @_; |
85
|
4
|
|
|
|
|
10
|
$self->{shade_offset} = $shade; |
86
|
|
|
|
|
|
|
} |
87
|
|
|
|
|
|
|
|
88
|
|
|
|
|
|
|
|
89
|
|
|
|
|
|
|
sub get_shade { |
90
|
14
|
|
|
14
|
1
|
16
|
my ($self) = @_; |
91
|
14
|
|
|
|
|
38
|
return $self->{shade_offset}; |
92
|
|
|
|
|
|
|
} |
93
|
|
|
|
|
|
|
|
94
|
|
|
|
|
|
|
|
95
|
|
|
|
|
|
|
################################## |
96
|
|
|
|
|
|
|
# P R I V A T E M E T H O D S |
97
|
|
|
|
|
|
|
################################## |
98
|
|
|
|
|
|
|
|
99
|
|
|
|
|
|
|
sub _initialize { |
100
|
2
|
|
|
2
|
|
3
|
my ($self) = @_; |
101
|
2
|
|
|
|
|
8
|
$self->_setup_colors; |
102
|
2
|
|
|
|
|
10
|
$self->set_shade(32); |
103
|
2
|
|
|
|
|
2
|
return $self; |
104
|
|
|
|
|
|
|
} |
105
|
|
|
|
|
|
|
|
106
|
|
|
|
|
|
|
sub _rotate { |
107
|
22
|
|
|
22
|
|
36
|
my ($self, $color, $angle) = @_; |
108
|
22
|
|
|
|
|
45
|
my $hsv = $self->_RGB2HSV($color); |
109
|
22
|
|
|
|
|
56
|
$hsv->{hue} = $self->_shift_hue($hsv->{hue}, $angle); |
110
|
22
|
|
|
|
|
62
|
my $rotated = $self->_HSV2RGB($hsv); |
111
|
22
|
|
|
|
|
195
|
return sprintf("%.2x%.2x%.2x", $rotated->{r}, $rotated->{g}, $rotated->{b}); |
112
|
|
|
|
|
|
|
} |
113
|
|
|
|
|
|
|
|
114
|
|
|
|
|
|
|
|
115
|
|
|
|
|
|
|
sub _minmax { |
116
|
22
|
|
|
22
|
|
41
|
my($self, @params) = @_; |
117
|
22
|
|
|
|
|
31
|
my $initial = shift @params; |
118
|
22
|
|
|
|
|
26
|
my $max = $initial; |
119
|
22
|
|
|
|
|
24
|
my $min = $initial; |
120
|
22
|
|
|
|
|
40
|
for (@params) { |
121
|
44
|
100
|
|
|
|
74
|
$max = $_ if $_ > $max; |
122
|
44
|
100
|
|
|
|
105
|
$min = $_ if $_ < $min; |
123
|
|
|
|
|
|
|
} |
124
|
22
|
|
|
|
|
59
|
return ($min,$max); |
125
|
|
|
|
|
|
|
} |
126
|
|
|
|
|
|
|
|
127
|
|
|
|
|
|
|
|
128
|
|
|
|
|
|
|
sub _is_hex_color { |
129
|
44
|
|
|
44
|
|
58
|
my ($self, $color) = @_; |
130
|
44
|
100
|
|
|
|
164
|
return 0 unless ($color =~ /^[0-9A-Fa-f]{6}$/); |
131
|
34
|
|
|
|
|
124
|
return 1; |
132
|
|
|
|
|
|
|
} |
133
|
|
|
|
|
|
|
|
134
|
|
|
|
|
|
|
|
135
|
|
|
|
|
|
|
sub _is_color_name { |
136
|
12
|
|
|
12
|
|
1350
|
my ($self, $color) = @_; |
137
|
12
|
100
|
|
|
|
29
|
return 0 unless $self->_get_named_color($color); |
138
|
10
|
|
|
|
|
38
|
return 1; |
139
|
|
|
|
|
|
|
} |
140
|
|
|
|
|
|
|
|
141
|
|
|
|
|
|
|
|
142
|
|
|
|
|
|
|
sub _get_color_names { |
143
|
21
|
|
|
21
|
|
27
|
my ($self) = @_; |
144
|
21
|
|
|
|
|
95
|
return $self->{colors}; |
145
|
|
|
|
|
|
|
} |
146
|
|
|
|
|
|
|
|
147
|
|
|
|
|
|
|
|
148
|
|
|
|
|
|
|
sub _RGB2HSV { |
149
|
22
|
|
|
22
|
|
31
|
my ($self, $hex) = @_; |
150
|
22
|
|
|
|
|
38
|
$hex = $self->get_color($hex); |
151
|
22
|
|
|
|
|
29
|
my %hsv; |
152
|
22
|
|
|
|
|
46
|
my ($r,$g,$b) = ($self->_rgb($hex)); |
153
|
22
|
|
|
|
|
51
|
my ($min, $max) = $self->_minmax($r,$g,$b); |
154
|
22
|
|
|
|
|
36
|
my $dif = $max - $min; |
155
|
22
|
50
|
|
|
|
74
|
$hsv{saturation} = ($max == 0) ? 0 : (100*$dif / $max); |
156
|
22
|
50
|
|
|
|
93
|
if (!$hsv{saturation}) { |
|
|
100
|
|
|
|
|
|
|
|
100
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
157
|
0
|
|
|
|
|
0
|
$hsv{hue} = 0; |
158
|
|
|
|
|
|
|
} |
159
|
|
|
|
|
|
|
elsif ($r == $max) { |
160
|
12
|
|
|
|
|
25
|
$hsv{hue} = 60*($g - $b) / $dif; |
161
|
|
|
|
|
|
|
} |
162
|
|
|
|
|
|
|
elsif ($g == $max) { |
163
|
3
|
|
|
|
|
8
|
$hsv{hue} = 120+60*($b - $r) / $dif; |
164
|
|
|
|
|
|
|
} |
165
|
|
|
|
|
|
|
elsif ($b == $max) { |
166
|
7
|
|
|
|
|
16
|
$hsv{hue} = 240+60*($r - $g) / $dif; |
167
|
|
|
|
|
|
|
} |
168
|
22
|
50
|
|
|
|
61
|
$hsv{hue} += 360 if $hsv{hue} < 0; |
169
|
22
|
|
|
|
|
68
|
$hsv{value} = sprintf("%.0f", $max*100 / 255); |
170
|
22
|
|
|
|
|
41
|
$hsv{hue} = sprintf("%.0f", $hsv{hue}); |
171
|
22
|
|
|
|
|
44
|
$hsv{saturation} = sprintf("%.0f", $hsv{saturation}); |
172
|
22
|
|
|
|
|
28
|
$hsv{r} = $r; |
173
|
22
|
|
|
|
|
26
|
$hsv{g} = $g; |
174
|
22
|
|
|
|
|
30
|
$hsv{b} = $b; |
175
|
22
|
|
|
|
|
60
|
return \%hsv; |
176
|
|
|
|
|
|
|
} |
177
|
|
|
|
|
|
|
|
178
|
|
|
|
|
|
|
|
179
|
|
|
|
|
|
|
sub _HSV2RGB { |
180
|
22
|
|
|
22
|
|
25
|
my ($self, $hsv) = @_; |
181
|
22
|
|
|
|
|
24
|
my ($r,$g,$b,$i,$f,$p,$q,$t,$rgb); |
182
|
22
|
50
|
|
|
|
45
|
if ($hsv->{saturation} eq "0") { |
183
|
0
|
|
|
|
|
0
|
$r = sprintf("%.0f",$hsv->{value} * 2.55); |
184
|
0
|
|
|
|
|
0
|
$g = sprintf("%.0f",$hsv->{value} * 2.55); |
185
|
0
|
|
|
|
|
0
|
$b = sprintf("%.0f",$hsv->{value} * 2.55); |
186
|
|
|
|
|
|
|
} |
187
|
|
|
|
|
|
|
else { |
188
|
22
|
|
|
|
|
37
|
$hsv->{hue} /= 60; |
189
|
22
|
|
|
|
|
28
|
$hsv->{saturation} /= 100; |
190
|
22
|
|
|
|
|
36
|
$hsv->{value} /= 100; |
191
|
22
|
|
|
|
|
47
|
$i = int($hsv->{hue}); |
192
|
22
|
|
|
|
|
28
|
$f = $hsv->{hue} - $i; |
193
|
22
|
|
|
|
|
41
|
$p = $hsv->{value}*(1-$hsv->{saturation}); |
194
|
22
|
|
|
|
|
45
|
$q = $hsv->{value}*(1-$hsv->{saturation}*$f); |
195
|
22
|
|
|
|
|
34
|
$t = $hsv->{value}*(1-$hsv->{saturation}*(1-$f)); |
196
|
|
|
|
|
|
|
|
197
|
22
|
100
|
|
|
|
81
|
if ($i == 0) { $r = $hsv->{value}; $g = $t; $b = $p; } |
|
3
|
100
|
|
|
|
5
|
|
|
3
|
100
|
|
|
|
14
|
|
|
3
|
100
|
|
|
|
4
|
|
|
|
100
|
|
|
|
|
|
198
|
3
|
|
|
|
|
4
|
elsif ($i == 1) { $r = $q; $g = $hsv->{value}; $b = $p; } |
|
3
|
|
|
|
|
4
|
|
|
3
|
|
|
|
|
4
|
|
199
|
3
|
|
|
|
|
6
|
elsif ($i == 2) { $r = $p; $g = $hsv->{value}; $b = $t; } |
|
3
|
|
|
|
|
6
|
|
|
3
|
|
|
|
|
5
|
|
200
|
2
|
|
|
|
|
4
|
elsif ($i == 3) { $r = $p; $g = $q; $b = $hsv->{value}; } |
|
2
|
|
|
|
|
2
|
|
|
2
|
|
|
|
|
3
|
|
201
|
10
|
|
|
|
|
12
|
elsif ($i == 4) { $r = $t; $g = $p; $b = $hsv->{value}; } |
|
10
|
|
|
|
|
13
|
|
|
10
|
|
|
|
|
14
|
|
202
|
1
|
|
|
|
|
3
|
else { $r = $hsv->{value}; $g = $p; $b = $q; } |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
2
|
|
203
|
|
|
|
|
|
|
|
204
|
22
|
|
|
|
|
44
|
$r = sprintf('%.0f', $r * 255); |
205
|
22
|
|
|
|
|
35
|
$g = sprintf('%.0f', $g * 255); |
206
|
22
|
|
|
|
|
35
|
$b = sprintf('%.0f', $b * 255); |
207
|
|
|
|
|
|
|
} |
208
|
|
|
|
|
|
|
|
209
|
22
|
|
|
|
|
53
|
$rgb->{r} = $r; |
210
|
22
|
|
|
|
|
36
|
$rgb->{g} = $g; |
211
|
22
|
|
|
|
|
29
|
$rgb->{b} = $b; |
212
|
22
|
|
|
|
|
44
|
return $rgb; |
213
|
|
|
|
|
|
|
} |
214
|
|
|
|
|
|
|
|
215
|
|
|
|
|
|
|
|
216
|
|
|
|
|
|
|
sub _rgb { |
217
|
34
|
|
|
34
|
|
42
|
my ($self, $hex) = @_; |
218
|
34
|
|
|
|
|
123
|
return (hex(substr($hex,0,2)), |
219
|
|
|
|
|
|
|
hex(substr($hex,2,2)), |
220
|
|
|
|
|
|
|
hex(substr($hex,4,2))); |
221
|
|
|
|
|
|
|
} |
222
|
|
|
|
|
|
|
|
223
|
|
|
|
|
|
|
|
224
|
|
|
|
|
|
|
sub _shift_hue { |
225
|
22
|
|
|
22
|
|
37
|
my ($self, $hue, $angle) = @_; |
226
|
22
|
|
|
|
|
62
|
return ($hue + $angle) % 360; |
227
|
|
|
|
|
|
|
} |
228
|
|
|
|
|
|
|
|
229
|
|
|
|
|
|
|
|
230
|
|
|
|
|
|
|
sub _get_named_color { |
231
|
21
|
|
|
21
|
|
36
|
my ($self, $color_name) = @_; |
232
|
21
|
|
|
|
|
36
|
return $self->_get_color_names->{$color_name}; |
233
|
|
|
|
|
|
|
} |
234
|
|
|
|
|
|
|
|
235
|
|
|
|
|
|
|
|
236
|
|
|
|
|
|
|
sub _setup_colors { |
237
|
2
|
|
|
2
|
|
4
|
my ($self) = @_; |
238
|
2
|
|
|
|
|
726
|
$self->{colors} = {qw( |
239
|
|
|
|
|
|
|
aliceblue f0f8ff |
240
|
|
|
|
|
|
|
antiquewhite faebd7 |
241
|
|
|
|
|
|
|
aqua 00ffff |
242
|
|
|
|
|
|
|
aquamarine 7fffd4 |
243
|
|
|
|
|
|
|
azure f0ffff |
244
|
|
|
|
|
|
|
beige f5f5dc |
245
|
|
|
|
|
|
|
bisque ffe4c4 |
246
|
|
|
|
|
|
|
black 000000 |
247
|
|
|
|
|
|
|
blanchedalmond ffebcd |
248
|
|
|
|
|
|
|
blue 0000ff |
249
|
|
|
|
|
|
|
blueviolet 8a2be2 |
250
|
|
|
|
|
|
|
brown a52a2a |
251
|
|
|
|
|
|
|
burlywood deb887 |
252
|
|
|
|
|
|
|
cadetblue 5f9ea0 |
253
|
|
|
|
|
|
|
chartreuse 7fff00 |
254
|
|
|
|
|
|
|
chocolate d2691e |
255
|
|
|
|
|
|
|
coral ff7f50 |
256
|
|
|
|
|
|
|
cornflowerblue 6495ed |
257
|
|
|
|
|
|
|
cornsilk fff8dc |
258
|
|
|
|
|
|
|
crimson dc143c |
259
|
|
|
|
|
|
|
cyan 00ffff |
260
|
|
|
|
|
|
|
darkblue 00008b |
261
|
|
|
|
|
|
|
darkcyan 008b8b |
262
|
|
|
|
|
|
|
darkgoldenrod b8860b |
263
|
|
|
|
|
|
|
darkgray a9a9a9 |
264
|
|
|
|
|
|
|
darkgreen 006400 |
265
|
|
|
|
|
|
|
darkgrey a9a9a9 |
266
|
|
|
|
|
|
|
darkkhaki bdb76b |
267
|
|
|
|
|
|
|
darkmagenta 8b008b |
268
|
|
|
|
|
|
|
darkolivegreen 556b2f |
269
|
|
|
|
|
|
|
darkorange ff8c00 |
270
|
|
|
|
|
|
|
darkorchid 9932cc |
271
|
|
|
|
|
|
|
darkred 8b0000 |
272
|
|
|
|
|
|
|
darksalmon e9967a |
273
|
|
|
|
|
|
|
darkseagreen 8fbc8f |
274
|
|
|
|
|
|
|
darkslateblue 483d8b |
275
|
|
|
|
|
|
|
darkslategray 2f4f4f |
276
|
|
|
|
|
|
|
darkslategrey 2f4f4f |
277
|
|
|
|
|
|
|
darkturquoise 00ced1 |
278
|
|
|
|
|
|
|
darkviolet 9400d3 |
279
|
|
|
|
|
|
|
deeppink ff1493 |
280
|
|
|
|
|
|
|
deepskyblue 00bfff |
281
|
|
|
|
|
|
|
dimgray 696969 |
282
|
|
|
|
|
|
|
dimgrey 696969 |
283
|
|
|
|
|
|
|
dodgerblue 1e90ff |
284
|
|
|
|
|
|
|
firebrick b22222 |
285
|
|
|
|
|
|
|
floralwhite fffaf0 |
286
|
|
|
|
|
|
|
forestgreen 228b22 |
287
|
|
|
|
|
|
|
fuchsia ff00ff |
288
|
|
|
|
|
|
|
gainsboro dcdcdc |
289
|
|
|
|
|
|
|
ghostwhite f8f8ff |
290
|
|
|
|
|
|
|
gold ffd700 |
291
|
|
|
|
|
|
|
goldenrod daa520 |
292
|
|
|
|
|
|
|
gray 808080 |
293
|
|
|
|
|
|
|
green 008000 |
294
|
|
|
|
|
|
|
greenyellow adff2f |
295
|
|
|
|
|
|
|
grey 808080 |
296
|
|
|
|
|
|
|
honeydew f0fff0 |
297
|
|
|
|
|
|
|
hotpink ff69b4 |
298
|
|
|
|
|
|
|
indianred cd5c5c |
299
|
|
|
|
|
|
|
indigo 4b0082 |
300
|
|
|
|
|
|
|
ivory fffff0 |
301
|
|
|
|
|
|
|
khaki f0e68c |
302
|
|
|
|
|
|
|
lavender e6e6fa |
303
|
|
|
|
|
|
|
lavenderblush fff0f5 |
304
|
|
|
|
|
|
|
lawngreen 7cfc00 |
305
|
|
|
|
|
|
|
lemonchiffon fffacd |
306
|
|
|
|
|
|
|
lightblue add8e6 |
307
|
|
|
|
|
|
|
lightcoral f08080 |
308
|
|
|
|
|
|
|
lightcyan e0ffff |
309
|
|
|
|
|
|
|
lightgoldenrodyellow fafad2 |
310
|
|
|
|
|
|
|
lightgray d3d3d3 |
311
|
|
|
|
|
|
|
lightgreen 90ee90 |
312
|
|
|
|
|
|
|
lightgrey d3d3d3 |
313
|
|
|
|
|
|
|
lightpink ffb6c1 |
314
|
|
|
|
|
|
|
lightsalmon ffa07a |
315
|
|
|
|
|
|
|
lightseagreen 20b2aa |
316
|
|
|
|
|
|
|
lightskyblue 87cefa |
317
|
|
|
|
|
|
|
lightslategray 778899 |
318
|
|
|
|
|
|
|
lightslategrey 778899 |
319
|
|
|
|
|
|
|
lightsteelblue b0c4de |
320
|
|
|
|
|
|
|
lightyellow ffffe0 |
321
|
|
|
|
|
|
|
lime 00ff00 |
322
|
|
|
|
|
|
|
limegreen 32cd32 |
323
|
|
|
|
|
|
|
linen faf0e6 |
324
|
|
|
|
|
|
|
magenta ff00ff |
325
|
|
|
|
|
|
|
maroon 800000 |
326
|
|
|
|
|
|
|
mediumaquamarine 66cdaa |
327
|
|
|
|
|
|
|
mediumblue 0000cd |
328
|
|
|
|
|
|
|
mediumorchid ba55d3 |
329
|
|
|
|
|
|
|
mediumpurple 9370db |
330
|
|
|
|
|
|
|
mediumseagreen 3cb371 |
331
|
|
|
|
|
|
|
mediumslateblue 7b68ee |
332
|
|
|
|
|
|
|
mediumspringgreen 00fa9a |
333
|
|
|
|
|
|
|
mediumturquoise 48d1cc |
334
|
|
|
|
|
|
|
mediumvioletred c71585 |
335
|
|
|
|
|
|
|
midnightblue 191970 |
336
|
|
|
|
|
|
|
mintcream f5fffa |
337
|
|
|
|
|
|
|
mistyrose ffe4e1 |
338
|
|
|
|
|
|
|
moccasin ffe4b5 |
339
|
|
|
|
|
|
|
navajowhite ffdead |
340
|
|
|
|
|
|
|
navy 000080 |
341
|
|
|
|
|
|
|
oldlace fdf5e6 |
342
|
|
|
|
|
|
|
olive 808000 |
343
|
|
|
|
|
|
|
olivedrab 6b8e23 |
344
|
|
|
|
|
|
|
orange ffa500 |
345
|
|
|
|
|
|
|
orangered ff4500 |
346
|
|
|
|
|
|
|
orchid da70d6 |
347
|
|
|
|
|
|
|
palegoldenrod eee8aa |
348
|
|
|
|
|
|
|
palegreen 98fb98 |
349
|
|
|
|
|
|
|
paleturquoise afeeee |
350
|
|
|
|
|
|
|
palevioletred db7093 |
351
|
|
|
|
|
|
|
papayawhip ffefd5 |
352
|
|
|
|
|
|
|
peachpuff ffdab9 |
353
|
|
|
|
|
|
|
peru cd853f |
354
|
|
|
|
|
|
|
pink ffc0cb |
355
|
|
|
|
|
|
|
plum dda0dd |
356
|
|
|
|
|
|
|
powderblue b0e0e6 |
357
|
|
|
|
|
|
|
purple 800080 |
358
|
|
|
|
|
|
|
red ff0000 |
359
|
|
|
|
|
|
|
rosybrown bc8f8f |
360
|
|
|
|
|
|
|
royalblue 4169e1 |
361
|
|
|
|
|
|
|
saddlebrown 8b4513 |
362
|
|
|
|
|
|
|
salmon fa8072 |
363
|
|
|
|
|
|
|
sandybrown f4a460 |
364
|
|
|
|
|
|
|
seagreen 2e8b57 |
365
|
|
|
|
|
|
|
seashell fff5ee |
366
|
|
|
|
|
|
|
sienna a0522d |
367
|
|
|
|
|
|
|
silver c0c0c0 |
368
|
|
|
|
|
|
|
skyblue 87ceeb |
369
|
|
|
|
|
|
|
slateblue 6a5acd |
370
|
|
|
|
|
|
|
slategray 708090 |
371
|
|
|
|
|
|
|
slategrey 708090 |
372
|
|
|
|
|
|
|
snow fffafa |
373
|
|
|
|
|
|
|
springgreen 00ff7f |
374
|
|
|
|
|
|
|
steelblue 4682b4 |
375
|
|
|
|
|
|
|
tan d2b48c |
376
|
|
|
|
|
|
|
teal 008080 |
377
|
|
|
|
|
|
|
thistle d8bfd8 |
378
|
|
|
|
|
|
|
tomato ff6347 |
379
|
|
|
|
|
|
|
turquoise 40e0d0 |
380
|
|
|
|
|
|
|
violet ee82ee |
381
|
|
|
|
|
|
|
wheat f5deb3 |
382
|
|
|
|
|
|
|
white ffffff |
383
|
|
|
|
|
|
|
whitesmoke f5f5f5 |
384
|
|
|
|
|
|
|
yellow ffff00 |
385
|
|
|
|
|
|
|
yellowgreen 9acd32 |
386
|
|
|
|
|
|
|
)}; |
387
|
|
|
|
|
|
|
} |
388
|
|
|
|
|
|
|
|
389
|
|
|
|
|
|
|
|
390
|
|
|
|
|
|
|
1; |
391
|
|
|
|
|
|
|
|
392
|
|
|
|
|
|
|
__END__ |