File Coverage

blib/lib/Chart/Plotly/Trace/Scatter/Marker/Colorbar.pm
Criterion Covered Total %
statement 18 34 52.9
branch 0 8 0.0
condition 0 8 0.0
subroutine 6 7 85.7
pod 1 1 100.0
total 25 58 43.1


line stmt bran cond sub pod time code
1             use Moose;
2 5     5   31 use MooseX::ExtraArgs;
  5         10  
  5         25  
3 5     5   24953 use Moose::Util::TypeConstraints qw(enum union);
  5         10  
  5         25  
4 5     5   8437 if ( !defined Moose::Util::TypeConstraints::find_type_constraint('PDL') ) {
  5         22  
  5         32  
5             Moose::Util::TypeConstraints::type('PDL');
6             }
7              
8             use Chart::Plotly::Trace::Scatter::Marker::Colorbar::Tickfont;
9 5     5   5348 use Chart::Plotly::Trace::Scatter::Marker::Colorbar::Tickformatstop;
  5         16  
  5         169  
10 5     5   2276 use Chart::Plotly::Trace::Scatter::Marker::Colorbar::Title;
  5         14  
  5         159  
11 5     5   2226  
  5         17  
  5         4279  
12             our $VERSION = '0.042'; # VERSION
13              
14             # ABSTRACT: This attribute is one of the possible options for the trace scatter.
15              
16             my $self = shift;
17             my $extra_args = $self->extra_args // {};
18 0     0 1   my $meta = $self->meta;
19 0   0       my %hash = %$self;
20 0           for my $name ( sort keys %hash ) {
21 0           my $attr = $meta->get_attribute($name);
22 0           if ( defined $attr ) {
23 0           my $value = $hash{$name};
24 0 0         my $type = $attr->type_constraint;
25 0           if ( $type && $type->equals('Bool') ) {
26 0           $hash{$name} = $value ? \1 : \0;
27 0 0 0       }
28 0 0         }
29             }
30             %hash = ( %hash, %$extra_args );
31             delete $hash{'extra_args'};
32 0           if ( $self->can('type') && ( !defined $hash{'type'} ) ) {
33 0           $hash{type} = $self->type();
34 0 0 0       }
35 0           return \%hash;
36             }
37 0            
38             has bgcolor => ( is => "rw",
39             isa => "Str",
40             documentation => "Sets the color of padded area.",
41             );
42              
43             has bordercolor => ( is => "rw",
44             isa => "Str",
45             documentation => "Sets the axis line color.",
46             );
47              
48             has borderwidth => ( is => "rw",
49             isa => "Num",
50             documentation => "Sets the width (in px) or the border enclosing this color bar.",
51             );
52              
53             has dtick => (
54             is => "rw",
55             isa => "Any",
56             documentation =>
57             "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L<f>*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *n* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*",
58             );
59              
60             has exponentformat => (
61             is => "rw",
62             isa => enum( [ "none", "e", "E", "power", "SI", "B" ] ),
63             documentation =>
64             "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B.",
65             );
66              
67             has len => (
68             is => "rw",
69             isa => "Num",
70             documentation =>
71             "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.",
72             );
73              
74             has lenmode => (
75             is => "rw",
76             isa => enum( [ "fraction", "pixels" ] ),
77             documentation =>
78             "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.",
79             );
80              
81             has minexponent => (
82             is => "rw",
83             isa => "Num",
84             documentation =>
85             "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.",
86             );
87              
88             has nticks => (
89             is => "rw",
90             isa => "Int",
91             documentation =>
92             "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.",
93             );
94              
95             has orientation => ( is => "rw",
96             isa => enum( [ "h", "v" ] ),
97             documentation => "Sets the orientation of the colorbar.",
98             );
99              
100             has outlinecolor => ( is => "rw",
101             isa => "Str",
102             documentation => "Sets the axis line color.",
103             );
104              
105             has outlinewidth => ( is => "rw",
106             isa => "Num",
107             documentation => "Sets the width (in px) of the axis line.",
108             );
109              
110             has separatethousands => ( is => "rw",
111             isa => "Bool",
112             documentation => "If \"true\", even 4-digit integers are separated",
113             );
114              
115             has showexponent => (
116             is => "rw",
117             isa => enum( [ "all", "first", "last", "none" ] ),
118             documentation =>
119             "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.",
120             );
121              
122             has showticklabels => ( is => "rw",
123             isa => "Bool",
124             documentation => "Determines whether or not the tick labels are drawn.",
125             );
126              
127             has showtickprefix => (
128             is => "rw",
129             isa => enum( [ "all", "first", "last", "none" ] ),
130             documentation =>
131             "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.",
132             );
133              
134             has showticksuffix => ( is => "rw",
135             isa => enum( [ "all", "first", "last", "none" ] ),
136             documentation => "Same as `showtickprefix` but for tick suffixes.",
137             );
138              
139             has thickness => (
140             is => "rw",
141             isa => "Num",
142             documentation =>
143             "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
144             );
145              
146             has thicknessmode => (
147             is => "rw",
148             isa => enum( [ "fraction", "pixels" ] ),
149             documentation =>
150             "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.",
151             );
152              
153             has tick0 => (
154             is => "rw",
155             isa => "Any",
156             documentation =>
157             "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L<f>* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.",
158             );
159              
160             has tickangle => (
161             is => "rw",
162             documentation =>
163             "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.",
164             );
165              
166             has tickcolor => ( is => "rw",
167             isa => "Str",
168             documentation => "Sets the tick color.",
169             );
170              
171             has tickfont => ( is => "rw",
172             isa => "Maybe[HashRef]|Chart::Plotly::Trace::Scatter::Marker::Colorbar::Tickfont", );
173              
174             has tickformat => (
175             is => "rw",
176             isa => "Str",
177             documentation =>
178             "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*",
179             );
180              
181             has tickformatstops => ( is => "rw",
182             isa => "ArrayRef|ArrayRef[Chart::Plotly::Trace::Scatter::Marker::Colorbar::Tickformatstop]", );
183              
184             has ticklabeloverflow => (
185             is => "rw",
186             isa => enum( [ "allow", "hide past div", "hide past domain" ] ),
187             documentation =>
188             "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.",
189             );
190              
191             has ticklabelposition => (
192             is => "rw",
193             isa => enum(
194             [ "outside",
195             "inside",
196             "outside top",
197             "inside top",
198             "outside left",
199             "inside left",
200             "outside right",
201             "inside right",
202             "outside bottom",
203             "inside bottom"
204             ]
205             ),
206             documentation =>
207             "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.",
208             );
209              
210             has ticklabelstep => (
211             is => "rw",
212             isa => "Int",
213             documentation =>
214             "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.",
215             );
216              
217             has ticklen => ( is => "rw",
218             isa => "Num",
219             documentation => "Sets the tick length (in px).",
220             );
221              
222             has tickmode => (
223             is => "rw",
224             isa => enum( [ "auto", "linear", "array" ] ),
225             documentation =>
226             "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).",
227             );
228              
229             has tickprefix => ( is => "rw",
230             isa => "Str",
231             documentation => "Sets a tick label prefix.",
232             );
233              
234             has ticks => (
235             is => "rw",
236             isa => enum( [ "outside", "inside", "" ] ),
237             documentation =>
238             "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.",
239             );
240              
241             has ticksuffix => ( is => "rw",
242             isa => "Str",
243             documentation => "Sets a tick label suffix.",
244             );
245              
246             has ticktext => (
247             is => "rw",
248             isa => "ArrayRef|PDL",
249             documentation =>
250             "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
251             );
252              
253             has ticktextsrc => ( is => "rw",
254             isa => "Str",
255             documentation => "Sets the source reference on Chart Studio Cloud for `ticktext`.",
256             );
257              
258             has tickvals => (
259             is => "rw",
260             isa => "ArrayRef|PDL",
261             documentation =>
262             "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
263             );
264              
265             has tickvalssrc => ( is => "rw",
266             isa => "Str",
267             documentation => "Sets the source reference on Chart Studio Cloud for `tickvals`.",
268             );
269              
270             has tickwidth => ( is => "rw",
271             isa => "Num",
272             documentation => "Sets the tick width (in px).",
273             );
274              
275             has title => ( is => "rw",
276             isa => "Maybe[HashRef]|Chart::Plotly::Trace::Scatter::Marker::Colorbar::Title", );
277              
278             has x => (
279             is => "rw",
280             isa => "Num",
281             documentation =>
282             "Sets the x position of the color bar (in plot fraction). Defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*.",
283             );
284              
285             has xanchor => (
286             is => "rw",
287             isa => enum( [ "left", "center", "right" ] ),
288             documentation =>
289             "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.",
290             );
291              
292             has xpad => ( is => "rw",
293             isa => "Num",
294             documentation => "Sets the amount of padding (in px) along the x direction.",
295             );
296              
297             has y => (
298             is => "rw",
299             isa => "Num",
300             documentation =>
301             "Sets the y position of the color bar (in plot fraction). Defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*.",
302             );
303              
304             has yanchor => (
305             is => "rw",
306             isa => enum( [ "top", "middle", "bottom" ] ),
307             documentation =>
308             "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.",
309             );
310              
311             has ypad => ( is => "rw",
312             isa => "Num",
313             documentation => "Sets the amount of padding (in px) along the y direction.",
314             );
315              
316             __PACKAGE__->meta->make_immutable();
317             1;
318              
319              
320             =pod
321              
322             =encoding utf-8
323              
324             =head1 NAME
325              
326             Chart::Plotly::Trace::Scatter::Marker::Colorbar - This attribute is one of the possible options for the trace scatter.
327              
328             =head1 VERSION
329              
330             version 0.042
331              
332             =head1 SYNOPSIS
333              
334             use HTML::Show;
335             use Chart::Plotly;
336             use Chart::Plotly::Trace::Scatter;
337             my $scatter = Chart::Plotly::Trace::Scatter->new( x => [ 1 .. 5 ], y => [ 1 .. 5 ] );
338            
339             HTML::Show::show( Chart::Plotly::render_full_html( data => [$scatter] ) );
340              
341             =head1 DESCRIPTION
342              
343             This attribute is part of the possible options for the trace scatter.
344              
345             This file has been autogenerated from the official plotly.js source.
346              
347             If you like Plotly, please support them: L<https://plot.ly/>
348             Open source announcement: L<https://plot.ly/javascript/open-source-announcement/>
349              
350             Full reference: L<https://plot.ly/javascript/reference/#scatter>
351              
352             =head1 DISCLAIMER
353              
354             This is an unofficial Plotly Perl module. Currently I'm not affiliated in any way with Plotly.
355             But I think plotly.js is a great library and I want to use it with perl.
356              
357             =head1 METHODS
358              
359             =head2 TO_JSON
360              
361             Serialize the trace to JSON. This method should be called only by L<JSON> serializer.
362              
363             =head1 ATTRIBUTES
364              
365             =over
366              
367             =item * bgcolor
368              
369             Sets the color of padded area.
370              
371             =item * bordercolor
372              
373             Sets the axis line color.
374              
375             =item * borderwidth
376              
377             Sets the width (in px) or the border enclosing this color bar.
378              
379             =item * dtick
380              
381             Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L<f>*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *n* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*
382              
383             =item * exponentformat
384              
385             Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B.
386              
387             =item * len
388              
389             Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.
390              
391             =item * lenmode
392              
393             Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.
394              
395             =item * minexponent
396              
397             Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.
398              
399             =item * nticks
400              
401             Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.
402              
403             =item * orientation
404              
405             Sets the orientation of the colorbar.
406              
407             =item * outlinecolor
408              
409             Sets the axis line color.
410              
411             =item * outlinewidth
412              
413             Sets the width (in px) of the axis line.
414              
415             =item * separatethousands
416              
417             If "true", even 4-digit integers are separated
418              
419             =item * showexponent
420              
421             If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.
422              
423             =item * showticklabels
424              
425             Determines whether or not the tick labels are drawn.
426              
427             =item * showtickprefix
428              
429             If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.
430              
431             =item * showticksuffix
432              
433             Same as `showtickprefix` but for tick suffixes.
434              
435             =item * thickness
436              
437             Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.
438              
439             =item * thicknessmode
440              
441             Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.
442              
443             =item * tick0
444              
445             Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L<f>* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.
446              
447             =item * tickangle
448              
449             Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.
450              
451             =item * tickcolor
452              
453             Sets the tick color.
454              
455             =item * tickfont
456              
457             =item * tickformat
458              
459             Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*
460              
461             =item * tickformatstops
462              
463             =item * ticklabeloverflow
464              
465             Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.
466              
467             =item * ticklabelposition
468              
469             Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.
470              
471             =item * ticklabelstep
472              
473             Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.
474              
475             =item * ticklen
476              
477             Sets the tick length (in px).
478              
479             =item * tickmode
480              
481             Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).
482              
483             =item * tickprefix
484              
485             Sets a tick label prefix.
486              
487             =item * ticks
488              
489             Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.
490              
491             =item * ticksuffix
492              
493             Sets a tick label suffix.
494              
495             =item * ticktext
496              
497             Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.
498              
499             =item * ticktextsrc
500              
501             Sets the source reference on Chart Studio Cloud for `ticktext`.
502              
503             =item * tickvals
504              
505             Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.
506              
507             =item * tickvalssrc
508              
509             Sets the source reference on Chart Studio Cloud for `tickvals`.
510              
511             =item * tickwidth
512              
513             Sets the tick width (in px).
514              
515             =item * title
516              
517             =item * x
518              
519             Sets the x position of the color bar (in plot fraction). Defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*.
520              
521             =item * xanchor
522              
523             Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.
524              
525             =item * xpad
526              
527             Sets the amount of padding (in px) along the x direction.
528              
529             =item * y
530              
531             Sets the y position of the color bar (in plot fraction). Defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*.
532              
533             =item * yanchor
534              
535             Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.
536              
537             =item * ypad
538              
539             Sets the amount of padding (in px) along the y direction.
540              
541             =back
542              
543             =head1 AUTHOR
544              
545             Pablo Rodríguez González <pablo.rodriguez.gonzalez@gmail.com>
546              
547             =head1 COPYRIGHT AND LICENSE
548              
549             This software is Copyright (c) 2022 by Pablo Rodríguez González.
550              
551             This is free software, licensed under:
552              
553             The MIT (X11) License
554              
555             =cut