WIP: default values for function parameters

Started by Pavel Stehuleabout 17 years ago122 messages
#1Pavel Stehule
pavel.stehule@gmail.com

Hello

I have problem with sending patch, so I am send link
http://www.pgsql.cz/patches/defaults.diff.gz

Example:
postgres=# create function fx(a int, b int default 30, c int default 40)
postgres-# returns int as $$ select $1 + $2 + $3; $$
postgres-# language sql;
CREATE FUNCTION
postgres=# select fx();
ERROR: function fx() does not exist
LINE 1: select fx();
^
HINT: No function matches the given name and argument types. You
might need to add explicit type casts.
postgres=# select fx(10);
fx
----
80
(1 row)

postgres=# select fx(10,11);
fx
----
61
(1 row)

postgres=# select fx(10,11,12);
fx
----
33
(1 row)

Know bugs:
blind ambiguous call detection

comments, ideas?

regards
Pavel Stehule

#2Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#1)
Re: WIP: default values for function parameters

Pavel Stehule wrote:

I have problem with sending patch, so I am send link
http://www.pgsql.cz/patches/defaults.diff.gz

Example:
postgres=# create function fx(a int, b int default 30, c int default 40)

Could you explain why you store the default expressions in a new posexpr
type rather than in an array of text (compare pg_attrdef.adbin)?

#3Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#2)
Re: WIP: default values for function parameters

2008/11/24 Peter Eisentraut <peter_e@gmx.net>:

Pavel Stehule wrote:

I have problem with sending patch, so I am send link
http://www.pgsql.cz/patches/defaults.diff.gz

Example:
postgres=# create function fx(a int, b int default 30, c int default 40)

Could you explain why you store the default expressions in a new posexpr
type rather than in an array of text (compare pg_attrdef.adbin)?

I would to implement named params - and there expressions, that are
used as default params, should not be continual. I don't store params
as array of text because I would to eliminate repeated expression's
parsing. So I use similar machanism used for rules or views.

Pavel

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#3)
Re: WIP: default values for function parameters

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

2008/11/24 Peter Eisentraut <peter_e@gmx.net>:

Could you explain why you store the default expressions in a new posexpr
type rather than in an array of text (compare pg_attrdef.adbin)?

I would to implement named params - and there expressions, that are
used as default params, should not be continual. I don't store params
as array of text because I would to eliminate repeated expression's
parsing. So I use similar machanism used for rules or views.

Say again? The representation Peter is suggesting *is* what is used
in rules and views. If you've re-invented that wheel, undo it.

regards, tom lane

#5Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#4)
Re: WIP: default values for function parameters

2008/11/24 Tom Lane <tgl@sss.pgh.pa.us>:

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

2008/11/24 Peter Eisentraut <peter_e@gmx.net>:

Could you explain why you store the default expressions in a new posexpr
type rather than in an array of text (compare pg_attrdef.adbin)?

I would to implement named params - and there expressions, that are
used as default params, should not be continual. I don't store params
as array of text because I would to eliminate repeated expression's
parsing. So I use similar machanism used for rules or views.

Say again? The representation Peter is suggesting *is* what is used
in rules and views. If you've re-invented that wheel, undo it.

Then I am blind. I store serialised transformed expression, but if
better solution exists, then I'll use it.

regards
Pavel Stehule

Show quoted text

regards, tom lane

#6Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#3)
Re: WIP: default values for function parameters

On Monday 24 November 2008 11:40:31 Pavel Stehule wrote:

I would to implement named params - and there expressions, that are
used as default params, should not be continual. I don't store params
as array of text because I would to eliminate repeated expression's
parsing. So I use similar machanism used for rules or views.

You mean you want to avoid repeated parsing of expressions in case the same
expression is used as a default value for several parameters? How common
would that be?

#7Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#6)
Re: WIP: default values for function parameters

2008/11/24 Peter Eisentraut <peter_e@gmx.net>:

On Monday 24 November 2008 11:40:31 Pavel Stehule wrote:

I would to implement named params - and there expressions, that are
used as default params, should not be continual. I don't store params
as array of text because I would to eliminate repeated expression's
parsing. So I use similar machanism used for rules or views.

You mean you want to avoid repeated parsing of expressions in case the same
expression is used as a default value for several parameters? How common
would that be?

no - I am reading default parameters in call statement parsing.
Default parameters are implemented similar to variadic functions - so
no changes on PL part - all changes are on caller part.

Pavel

#8Alvaro Herrera
alvherre@commandprompt.com
In reply to: Pavel Stehule (#5)
Re: WIP: default values for function parameters

Pavel Stehule escribi�:

2008/11/24 Tom Lane <tgl@sss.pgh.pa.us>:

Say again? The representation Peter is suggesting *is* what is used
in rules and views. If you've re-invented that wheel, undo it.

Then I am blind. I store serialised transformed expression, but if
better solution exists, then I'll use it.

Seem to me you just want to store the output of nodeToString.

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

#9Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#7)
Re: WIP: default values for function parameters

On Monday 24 November 2008 23:21:15 Pavel Stehule wrote:

You mean you want to avoid repeated parsing of expressions in case the
same expression is used as a default value for several parameters? How
common would that be?

no - I am reading default parameters in call statement parsing.
Default parameters are implemented similar to variadic functions - so
no changes on PL part - all changes are on caller part.

Then I don't understand why you need this special data type instead of using
an array of text with nulls for parameters without default.

#10Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#9)
Re: WIP: default values for function parameters

2008/11/24 Peter Eisentraut <peter_e@gmx.net>:

On Monday 24 November 2008 23:21:15 Pavel Stehule wrote:

You mean you want to avoid repeated parsing of expressions in case the
same expression is used as a default value for several parameters? How
common would that be?

no - I am reading default parameters in call statement parsing.
Default parameters are implemented similar to variadic functions - so
no changes on PL part - all changes are on caller part.

Then I don't understand why you need this special data type instead of using
an array of text with nulls for parameters without default.

I expect some overhead with classic array - but this overhead will be
small and array of text with nulls is better variant, Tomorrow I'll
send updated version.

Regards
Pavel Stehule

#11Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#9)
Re: WIP: default values for function parameters

Peter Eisentraut <peter_e@gmx.net> writes:

On Monday 24 November 2008 23:21:15 Pavel Stehule wrote:

Default parameters are implemented similar to variadic functions - so
no changes on PL part - all changes are on caller part.

Then I don't understand why you need this special data type instead of using
an array of text with nulls for parameters without default.

I'm not even sure you need to store any nulls.  We're going to require
defaults to be provided for the last N parameters consecutively, right?
So that's just what the array contents are.  Or maybe it's not an array
at all but a single text item containing the representation of a List
--- compare the storage of index expressions.  There shouldn't be any
need to read the contents of the value during function resolution;
an appropriate representation will have the number of non-defaultable
parameters stored as a separate integer column.

regards, tom lane

#12Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#11)
Re: WIP: default values for function parameters

2008/11/25 Tom Lane <tgl@sss.pgh.pa.us>:

Peter Eisentraut <peter_e@gmx.net> writes:

On Monday 24 November 2008 23:21:15 Pavel Stehule wrote:

Default parameters are implemented similar to variadic functions - so
no changes on PL part - all changes are on caller part.

Then I don't understand why you need this special data type instead of using
an array of text with nulls for parameters without default.

I'm not even sure you need to store any nulls.  We're going to require
defaults to be provided for the last N parameters consecutively, right?
So that's just what the array contents are.  Or maybe it's not an array
at all but a single text item containing the representation of a List
--- compare the storage of index expressions.  There shouldn't be any
need to read the contents of the value during function resolution;
an appropriate representation will have the number of non-defaultable
parameters stored as a separate integer column.

this can be the most simple solution, I used special datatype because
a) I am afraid add more columns to system tables, b) I dislike
serialisation into text type, because simple select from this values
returns some "strange" values. But maybe I am thinking and searching
to much complicate solutions. I'll try to simplify patch.

Regards
Pavel Stehule

Show quoted text

regards, tom lane

#13Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#11)
1 attachment(s)
Re: WIP: default values for function parameters

Hello

I am sending actualized versions - I accepted Tom's comments - default
expressions are serialised List stored in text field.

Regards
Pavel Stehule

2008/11/25 Tom Lane <tgl@sss.pgh.pa.us>:

Show quoted text

Peter Eisentraut <peter_e@gmx.net> writes:

On Monday 24 November 2008 23:21:15 Pavel Stehule wrote:

Default parameters are implemented similar to variadic functions - so
no changes on PL part - all changes are on caller part.

Then I don't understand why you need this special data type instead of using
an array of text with nulls for parameters without default.

I'm not even sure you need to store any nulls.  We're going to require
defaults to be provided for the last N parameters consecutively, right?
So that's just what the array contents are.  Or maybe it's not an array
at all but a single text item containing the representation of a List
--- compare the storage of index expressions.  There shouldn't be any
need to read the contents of the value during function resolution;
an appropriate representation will have the number of non-defaultable
parameters stored as a separate integer column.

regards, tom lane

Attachments:

defaults.diff.gzapplication/x-gzip; name=defaults.diff.gzDownload
#14Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#13)
Re: WIP: default values for function parameters

On Thursday 27 November 2008 00:14:19 Pavel Stehule wrote:

I am sending actualized versions - I accepted Tom's comments - default
expressions are serialised List stored in text field.

OK, this is looking pretty good.

There is a structural problem that we need to address. With your patch,
pg_dump produces something like this:

CREATE FUNCTION foo(a integer = 1, b integer = 2, c integer = 3) RETURNS
integer
LANGUAGE sql
AS $_$ SELECT $1 + $2 + $3; $_$;

ALTER FUNCTION public.foo(a integer = 1, b integer = 2, c integer = 3) OWNER
TO peter;

The second command is rejected because default values are only accepted in
CREATE FUNCTION.

There are two ways to fix this, both having some validity:

1. We create a second version of pg_get_function_arguments() that produces
arguments without default values decoration. This is probably the
technically sound thing to do.

2. We accept the default values specification and ignore it silently. Note
that we already silently ignore the argument names. ALTER FUNCTION foo(a
int, b int) will also act on a function defined as foo(x int, y int).

Comments?

#15Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#14)
Re: WIP: default values for function parameters

2008/11/30 Peter Eisentraut <peter_e@gmx.net>:

On Thursday 27 November 2008 00:14:19 Pavel Stehule wrote:

I am sending actualized versions - I accepted Tom's comments - default
expressions are serialised List stored in text field.

OK, this is looking pretty good.

There is a structural problem that we need to address. With your patch,
pg_dump produces something like this:

CREATE FUNCTION foo(a integer = 1, b integer = 2, c integer = 3) RETURNS
integer
LANGUAGE sql
AS $_$ SELECT $1 + $2 + $3; $_$;

ALTER FUNCTION public.foo(a integer = 1, b integer = 2, c integer = 3) OWNER
TO peter;

The second command is rejected because default values are only accepted in
CREATE FUNCTION.

There are two ways to fix this, both having some validity:

1. We create a second version of pg_get_function_arguments() that produces
arguments without default values decoration. This is probably the
technically sound thing to do.

2. We accept the default values specification and ignore it silently. Note
that we already silently ignore the argument names. ALTER FUNCTION foo(a
int, b int) will also act on a function defined as foo(x int, y int).

if this variant is possible, then will be simply implemented

regard
Pavel

Show quoted text

Comments?

#16Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#14)
Re: WIP: default values for function parameters

Peter Eisentraut <peter_e@gmx.net> writes:

There are two ways to fix this, both having some validity:

1. We create a second version of pg_get_function_arguments() that produces
arguments without default values decoration. This is probably the
technically sound thing to do.

Yes. I think that the argument for allowing parameter names in commands
like ALTER FUNCTION is that the user might consider them part of the
function's identity. This can hardly be claimed for default values.

Also, there's a third possibility: we could revert the decision to allow
pg_dump to depend on pg_get_function_arguments in the first place. That
was really the lazy man's approach to begin with. The more we allow
pg_dump to depend on backend functions that work in a SnapshotNow world,
the more risk we have of producing inconsistent dumps.

regards, tom lane

#17David E. Wheeler
david@kineticode.com
In reply to: Tom Lane (#16)
Re: WIP: default values for function parameters

On Nov 30, 2008, at 6:49 PM, Tom Lane wrote:

Peter Eisentraut <peter_e@gmx.net> writes:

There are two ways to fix this, both having some validity:

1. We create a second version of pg_get_function_arguments() that
produces
arguments without default values decoration. This is probably the
technically sound thing to do.

Yes. I think that the argument for allowing parameter names in
commands
like ALTER FUNCTION is that the user might consider them part of the
function's identity. This can hardly be claimed for default values.

Agreed, default values should not be a part of function signatures,
although it might be nice if ALTER FUNCTION to allow default values to
be changed.

Best,

David

#18Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#16)
Re: WIP: default values for function parameters

2008/11/30 Tom Lane <tgl@sss.pgh.pa.us>:

Peter Eisentraut <peter_e@gmx.net> writes:

There are two ways to fix this, both having some validity:

1. We create a second version of pg_get_function_arguments() that produces
arguments without default values decoration. This is probably the
technically sound thing to do.

I'll prepare new patch with this change.

Yes. I think that the argument for allowing parameter names in commands
like ALTER FUNCTION is that the user might consider them part of the
function's identity. This can hardly be claimed for default values.

Also, there's a third possibility: we could revert the decision to allow
pg_dump to depend on pg_get_function_arguments in the first place. That
was really the lazy man's approach to begin with. The more we allow
pg_dump to depend on backend functions that work in a SnapshotNow world,
the more risk we have of producing inconsistent dumps.

I don't understand well. Transactions is spanish village for me. So
there will be some finalizing necessary from You or Peter.

Regards
Pavel Stehule

Show quoted text

regards, tom lane

#19Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#14)
1 attachment(s)
Re: WIP: default values for function parameters

2008/11/30 Peter Eisentraut <peter_e@gmx.net>:

On Thursday 27 November 2008 00:14:19 Pavel Stehule wrote:

I am sending actualized versions - I accepted Tom's comments - default
expressions are serialised List stored in text field.

OK, this is looking pretty good.

There is a structural problem that we need to address. With your patch,
pg_dump produces something like this:

CREATE FUNCTION foo(a integer = 1, b integer = 2, c integer = 3) RETURNS
integer
LANGUAGE sql
AS $_$ SELECT $1 + $2 + $3; $_$;

ALTER FUNCTION public.foo(a integer = 1, b integer = 2, c integer = 3) OWNER
TO peter;

The second command is rejected because default values are only accepted in
CREATE FUNCTION.

There are two ways to fix this, both having some validity:

1. We create a second version of pg_get_function_arguments() that produces
arguments without default values decoration. This is probably the
technically sound thing to do.

I did it. new version is attached

Regards
Pavel Stehule

Show quoted text

2. We accept the default values specification and ignore it silently. Note
that we already silently ignore the argument names. ALTER FUNCTION foo(a
int, b int) will also act on a function defined as foo(x int, y int).

Comments?

Attachments:

defaults0112.diff.gzapplication/x-gzip; name=defaults0112.diff.gzDownload
���3Idefaults0112.diff�<kS�H��=����dl,�%���H�*Y {����K�m��,y$������~��0&���]j��[�G�������Ykwy�I�/���|z-���bQs�������mf;c{0v�V[��f�n����������{N	�v�3�����}F�x=����������������}���XS��b��w���t��)���Q8�g<L��n�����'{�j�X��C����]��C��u�P+��f���X�90�0l�qx���@�n�1,������)t�v�,�lo7�n����Y�������)8�b��\�[����d��?��������B��Cz���)�lo��n��P�<��<+�9V��V(��.�K��H~�h,��.���^���3/p�	�fA��������
�&���z������t����F�`�B�g,���Zq7�9�~z��R��h�t����������~zpy|v
8������%���8�c1O�q� >�=C0p�8�sS�C�	S !��}���%,p���/��a������'���<%F9#V�����g9FNN.���|��v9�|�����i,�G{���J�g��?&<n����9�q����c[�@[��O��h�����A*��o�!��'vv�����L���#�@�
\��WGuH�W[�]m����e6g���O�1/�Yq��G-����G,CWYX���Z��X����'&��!���e�����\N~<9�<���
�^tQ
������LN����9z^���%���|�4�A�d�^O��\�2�a<f����*����
}��V�,��e��F�����*���@\�@��'u!?.��=���"HH�rE�h�@��K#����j���!�$ ����&����tcyOQ�"P��h�
���s���?�7XsK�Z`K��a+`�n-6��?��� E�<@�\S���#
!'� ���.ji�b��YdbQ���{EA?^��v��5�hE�����n�tl����������S��6s���r�~�c����.p``��v��"��p/u�VQ��oH�^m>;����J`������c��e\B�^�w�����`��Z�k@XN
���������|
/������rH+RE���nF����[(
����y��
�$�Q��l7�Q���Un�����4�r�xer��?�7�8:9:�d�m�d�����K��g�$����}/"�������K��\�h5p���i����m�t���noXe��]e9�v:-�:�������Z%/����:NU�A>;��-�*����0	p����.�u���D����+��������n-v1R&+pY-/_����;��p�no�:��y�6B��}z���8�F�f�sB�J0���rY27t�����z�}�\�7<d��%��|����������u��XbT�S�;�=�\Cqy��@yK�%�W7�-���1G%��+aZ�����k�Fa�~,\/�x,��~��8��b�@������,�@p����T0�
�����{B �VQ�<�Bz8M���x�7B�����	P�Q���3�*�A.'k�:����Y�2��U&4;�@�:��������E�sHI\�onp��%���8j��

���o^��k�S����zY��F����-�eh�pY�����V�����
��O��
$-��c�Wr`���(���=�4����]��Xr��q�@.8�����RR��l���EYdQ9����_+�g�I__���''/��5R���e�%x��x�n\C���/]D"?>�(���?��j:,�^
0l?G��v�i��`��eyY��#��H���X���Pmw������1��H�y�``<I(`����bm����YQ�h3L����m��#��j���������|v
s���/2�����!ed1���e��I������sl���h1I�Vnz
.��MB��/��&��S��St�b���!�='�Td����qK�|0#u#��&�NU�
\�D-�^�}�{
����/ �d�h�;Q�Hh5�]�
�@��'��#wv��[�Q5��������fu�T���X�������h
Z,�NT@�P4�m9,�\d?K��M����$�@�	,����e����d t*�w�KZrpW�J3������$	����O�u�j�n�^?�(G�pu�m�*Y����m�_*>�n���J�I���:��}�DK=D���������Q��Ea��k'����@��.9p��!�L�4��;?;8;>��t��$(��@�3]-�xe�W!8��tI��,?
��]�O)��$`����Rs3�dhk`s/�S�[�rj����������F�r�l�,JfQ�C�)/�;q'3�ro�t0E�a��z<�e���|�����"I���^�����dk9�h9�tM�H��cn�@[��^��F�<�����'��"��4�~S:�/�u5��^m�����+�dgh���,L�*�R��v��X�
��"���R�Y��k��fI�����c�l��bM��o���'l��1�Lr���2����a0�H�9�%���VJ��GS�E�
fL/F(�
!�0�{���������Rii!j��t�c���?��+s�������&��
�qk�hf<�j��4T��q,o�i[�������V�:����������rwu�^����t���PzJ>�s�t7|f�����T���/��]��(�|�����E�P�%���"�����Gs�zC"�B�2�J��z��mlM�0�s2�Qd���$�d��T�|�g*U��5���a�%�����d4<Db�R/�� �������W`b1BDYX��&A���������U�������"�
0]P��*���5���O�Q31]�>�9����	[�!S�a��S�/pj�qg������2+��X��P�Cz�YI
!����@���M�����\p7��U~GyT��B��i0�/l�f ���?�>�;H��6��\���Kvg��d�QCA���b`��;�|u~*������)���� ����Q���P���LT&�x�RD����r����OZ���-\���{�?C��p��|�������l$�6{1�D�tL�}��L�������J�`��c�2�h+JX`��Q�R�'�zn��@�������i�2`k��OP��+��b�r	E���U�	
��`h��/J�4��JE�p:k�5��j���4H���@�����P��T��5q�D��@T\.�4���F�V����Q������u��]Ch������	_�gY~���	O��#�Je�}��	�bm�F�V
���Q~���?��45��T�J��U��p��[�~/�1����ldz����c.F���:����"�Z�P�b$���2�Yv��Z��P�W�.G��g�F�
��<�=������������o�������-��
l�/�E}��C6��D�-y��
�	3���d+�V�'1��:�S��R�w��IE��bh|��
6h��+�L�P���1E���T��Q��j��,�ij�uh�x��2c���
�}�P?Y�����n�ax�JSBb:��X�l�_Pl��P�f�b4_�VN�5Y�N�l�����\az�]��Cp0�LhG(�c�#Nx�Z����<�����iH�N������3=�O�!��Gr���tz����d�`�o��P�q�a!#���nYbj����n�S���
;�*���e�@k�j��{��=��q������P�k2���SqPEP�/8�o�R�H�q�@��athx����J:�mu�'Zj���,V99T|�h��a?O� Yj��W�����C4�M6��B���A_���o	����0e�$���6>>�7u���3�x�������)�����FgE��r�������
B*F��������������X��
�Uvx��C�&yeI���9v�gD�(9���~l�yNQ+8W�?���=�LoH�]pV���w5<"7�*KW�F��������P�Q{����V)�BV���Z��Q��X�9���fOc4����]M��n��h����/W�[�����0��}����~��l���6���X��(�j�h���3q���l������o��ff��Ez]�����j	gc���v_G���K�F�)�e���K��������L������-��Ea�6Y��*>U���6����%�<�k��]M���`1�Ap���1x��������:O"��H�����'����"b0�����L<����n��,���u�N�Ux�j��\|�3n?���l�g���{������g�(h�.�3�"{�u��y
="s�:���&�S?��@p8�C��p��H������"�8HW�xa����7
��������z�q������ x����B��������><K����%���Q&��lw_���D����O�r���E�w$�������~�=�@�:��M��R-���F�x���OFX��H��"La���7I��z���B D�������Kq�Ot(��K5�P��fk��=����D��nD(�n@�
�����U4OnK����p*�[��~pTk�:����l�M:��=v��� ��c�������Hj}!�*�:����C���������qx�����z�3w
O:�my��4M���A���P�5�0*-(�0��:<z}�?����G�d7N��������Rg�������C�W����O�-6�^!`�-�3�8�FG�!�qqdh+kG)f���*����O��M�������L������sL�}�{�41�3v������#(�z�h������XYF��y��}o�(,d�F�c��J��,�-�'2��]��m(���%��KR��3��E@>���d��������D�d��N������1�+�_j���������	�!����1�,�p����lfG��/�8BY�N�=u��8��')P��@�a��y����$!�#OYC��RO���/�it����
2x�h�������
r1N�r)
�8��A�S�C����'v������������ej����)���O�b������-�C���7ps()�!����^�Kb	|�TF?8_�����!]�t\n4�m�Q�?_K��!Zl��5��D��4B*1l[�a�8��t�A'�V�1���a�.8�����b*����\�N���0q��x#
���fnAO�4��^�n��k�V�1<>Ru~;����`Z�0�T)��.�n��b/rY��sdhUo7���H<�!*w�
���-�p�Ft�S5����WO�l����AohtV5j1_�>u��(	�J�\���x���\�Z����A>�����C>���H���<��4[��&83��/s���*(�4_����:U�ZEM���\ /����[�k�6��<[�%����R��46Wi�����]'�iT�����6�S�lJ�9YS-SDT
{�C@c��{��h���������!��
��)�w�o��)��+B����{*��.�����jJ������s�<jz��8�/�o���9�U1)��;%y����e�����I���]t,{��6�WF�l��Nv����U]R��W�ta%`9sh����]�S%W�Q���:FCe���������XN�L_���s���)��
�4����������������B��n6�?
�V��Ml������3�7���~he�V�E��`��j����!�`��w������7�W.�����
LV��*���bJ�����cgT��XfnP����S���r�����^��&�x9�E$ry	�MH����[X��/7n@�������eH�����c{��/�~�l�^�������7����}l�F�����P{�^WJ)H�kb�x��*������(���1��0,��[��L@v#=}�Z�����N�M�OP�}q�L�}��*+B����O����7Q��h��ik w�_Y��R��/+�*S��������[�%��)�r-<�XV5��(���������c�_�7�;q�u������nM�D\H��me�<�c�H�4^�x�<(���(������d�
	��	$Z������]
~������TIT'Sy��u>A�#�P������[G#�;���|���'[������r�]��_X����P��5Kj��o�l��M��Z:~�!\1�;����5���`�r5O?z���X���=���p�U��}���"�Jv[���}-f�������z	l�f���������B�D(�R���
�c���g���_������O���?*����������y������_���������0�*�����O�clq���1�J�i���F�V0���t���t�����}�a��9�:
>���dv����?V��[7�jS
������������;FR6��xy[7;��j�o�|{`�e�\F�
\�@y�]�p|������DJ��Q��	��}tQ�����G�^rY?������(���lv���Y��aG�#��)���Hqg�PwO���?U�y ���k��f�=���f���3�~t���
�[��%�%#��b�'@:��sE"�P��g7f��E�Y��e�������$&^t�$�%I��d�K�K�"���K~$��O#!TI�/{)�,�b+����v
��g�e_p��$+��d`+��������;6&�������hM��h}�=���n01N�~LV0jE�$^9^�v��34E�l�S4JW*��l��p��=�i0���}��D���Y|/>[�:�Y�]�r���"\��4�Wc���E�#��PbE�Y��G��&x|"��7��qxCf���f����i�g�+�D�L���1@_WsW�,
Z��S4�5��sSZ���D�-��x��]���$�A��RW���!���c�Vv��M����u�&3�7���/���l�9��~z;�����{vy+
Z�K��FDqrOVW�j#^��>xf��)�F�~u�2��������<>U���w;�V��hY�w����+������"X�"���4}d����L� D�|�����5��BG�>��Kl���c��y��*�,L��l�j���r�U�����9�����K�%�f8���`�4~�����0����qbOO������Ihd16�<���<E��5,x�������b��O���<���5<��5"�i����������)q������1�k�������m��!��E-���f+�����
�C(~�W��D�ZpSj��Xr^�/�[��7%S��,������|,����ln�����g��*��U���oi���fr���	
�J��:������O���j'��/I�������=��k�$�at.R���M���1I>���+o.�"���P��_-�8w��h9$�h�J�C�i���������xh$���\�����w��|�f�?�0�	��x=���A�������'S��������z/�|X;�*]�	|�x��$�w�B����~����l�V�NH��^�n����. J�^��.�;��P���y�;�#o���iiO������\�����Ce1�y�����������������D���J��5\��7��~I�.5ePL�@�������+rg5^��{�Hatd��R�+ �:j7d�$���k���>��_��r�������?|�?o%i����@���P���>
@��K�����=*����1�J)r�Da,�=}��0vd�>�������;�k�8�tMdy����-��b��E�"�+M��as�����C�E��Ms����������D��?=��*j�
~z�K�3������.���]�is>�o�Tj�Y�T���{�#�s�$�yiS*��u����������yE
��,�
|��8���=O�"z��}&8�'����!�;K�	�O�g�OX��^�!��lU����}_1�/�.�����t���	���Oqw���+Bt��Cix���+M��������lXL*��<���e<.�]4��cu{.A@q��6W-�0h2����F~�������%�����S�p�����V�/�W�OK,Z���D���M���"`�i�	,�d8^��^��}Z0K�����{�X_��J�|���o���f��E�_������O��D�/%����W(����\g��7��A�J9�Dq�MVV�8�{�Zla�K����c^�!����/������(�:Z��������r��
��^���������s7�p�Xf�P-P�H��y ���F�/I���=T�����4�)�:Q�X����i�T>���.�P���xj��G�<�������{[�"���#��
(+Na�������b�,/�8���S����+��v_}��>���~���T�REld�M"������o���(7����B
2���}n%5������9*w8�Q�QR��}u��P}�?;��]�3Q���N�$	���'��l���/������X�N(���+��O����g?��'�����u�hzUn����^����
o�&��0
�����v�����i�����v�v�=2���)����	���c	
��.��^p���V��CB��f��nQj�B�
_}�V�����Ek&�(7�a���sI�oeu^��|5T�� �9\)�e���1�
�H����H)��F���+ZH�����������==���sB������2�mRi�R�\����o��/*��S������c�1��0���?��`3���9���mP9�@��t��Y���0���.������u+��E)�t�E%���p�H6d���$�Xdt�jr���k�{|�^�I1nOYH�\���B�������A8�f��qUH�v���Qqk�m��(��������Eq��VNFL���H9�{���.�r�E;M��kqa7o�=�#�_���|����������'�Z�m�9�@������
=v=5�c�2A;��F����������q��n�o��"������h�(�wAPg���_b�o~�cVn��4+�XiC���e�-��b�m|�����E�>���{���o����"��_��=�4���eI��+>gDO+�Q�
� `T25�
m�ri;���dC����,�F�:��F��]V@���tD�Z��C�����x��lH���7������#��U?��(Du�[2���	Qh��	�����C�pq,�������\-�=��W?8m��uJ��
+;�F��e��%�VM��F���1�EP�=�;mx�
�qG$��^�<hjZk��w�������k��G`������jO��\Z�j��,�>���V�J��_J���}e��w��I�wx�'�������r�w���F�Yb�K��y�*M�m���������!\����O��_]�:o��z������Oj�M4�o�����%qx�j�2����dJ��E]����\G:������
d�����&�`:G������vG�:����1�:{���FA���Y�������r[��%���r>X������?�}T���2�,mC��|0 ���5�>��;u���
�] �bKV��7x�{Y�^��'O�E��������/~��]����w��>b�u�������/���P��S�����hS��C*������g�)o�_���z�
�������<���x-fI����a(��S���l`����*:i~���9��5���ZIY"[����hp�'[�3��v�����17qd�E�X(9�b�U�?�i�s�\����zd�B�7��?�c/%���$ �/=$��$1�WL%�����e����VD��h{�L�"�@9|g�����_� "�A�/|����a��"zO-�;�S��W1h�J��s]�Ue*[�����3�[3)],�o����������L����y�$�l����KvA)#����
���T*��3��bX�����@�c
�Q����=�	J��(��F�EJ
�@F������N��s,�np!�>�$�N�m)e�c\r	�W������Q�{��\ ;#��r�0�V�����Y��du���2�I�{��b����
�����(%*����]�
o~��]W��<Iy��iLs���"&��,6���!�n2����������0�,^}����]RZ���*���X)	�o�Y�t�dU����xu@	���������~+�{��)�3����,��_#�z����o�K�b��e;R�U����'~CEI���-g�g���������Cy����}E�(}��~���>��������_w_����1��|��w$�}�e|���/�|�H����.i�s�`�DP�|�:��xB2�C�L<~��o�Jz�z�A���O�N�����_]@��Cxj��|��
����SS��`������N����
��-������+�����"������7���]��%7H��"S�����d�-�[5n[bcBU�A�A���@�_}�_�D���>x�������7�?����#�c�� |fAF^
��>���_�>,|'���D^?C���q��a��H���_\I���a��"K�g�g�����N��Tt�����){,��A.�L��������
?�c���c��E�|,��1�g[+�<�La�w�R��z��?�PV�3 .A7Zx�;	�_��\�����_��K��/1�i���
B;�W���~�8���������p�7�����S�
:��G�s���zj�1��&d"E�q��rH��~`������I�Y\�_Go��.�������-3�d���&����
p�x�����(|?kM������5���k��Ml�C���b�,@@9$�A"�,1�P4�]G�q�#B&�i�d�B��;E~dwd����0�`����2�!�R�F��
b+��;B����Wn\�t$-�n|Z
Z�Z�dQs%���G!�#�f�C���!OQ8J>��0$�Nd�sS��=��R�L�
�]�.���Qs+ A��� �$��He{G�����,Y|�D���?eD��9��x2GK_�h���5!���(�1G�1���&i�5��kQ���E��Z���%���5�/�T�?�5��S� ��>�\�b~�>���_~��w�>��JpU�7��dMd���w�����������<�`O-���40�|�����t6�?\��������X������Og�������t&t�O��|)8�"����o_�%n��y|L�����8����t��h�����E�Y�|;NhI����P����]�Z�D��m�=��/�7���x��.�!��6���l�zq�&)xVJC��{��-^������ ��A���`����:I��jKW?\Y�F�
�0�V�����q�I��e��>0])9��������i����������o�������r���0J\���P���"�v�_��JJVo�{W�=��<��q��v����>����g�$q��mW7w��KY�Z��
^������?��������L8�����c��h��KI
W($,\QGR�1��X��$P��7W ��Es�DG���D�)h�KW��yHJ���xd*���Ey"��W���B4S��{l
S���|U�������nE�B��}h��Q_�>�G��.S4��Ss'5��Ba8,���3���z��i_2���"�oXY�\�{��}�N*���7V��/��m'F�'��Ho6EyH��e��8��<"�
��o��(�]����>yrN����������k�>�H�3����G93;�cE:7�������X�.M��v���q�]��c'=wafx�����k�3|��0<�ON�(�
NE���oP���R��c%��4�����0��}���z��?�4*��;F�@j�@w,J!t������B94�W1�b�P*f�b��yV�H��U���'���p�����u�<��`��pJ��:���p�!v��5/z��A��.6��?����������EX����L�������,����@,5���,�C��Ub�	����(p2���c��
,�\��`MWS3GMJ\k����������X��.�����Fq1ZSa�,GqE��tq%��m>��p��"���A|���=�0����6�%�%X�*`y5hM�����4	LR��m�`C�������y��
���^��F�1ZSa�����`y]
�r����3����ZsPTV.���e��DXK��s���'{�AV���r���%{�EV��o]dev��>dsP����c[/���^�m#��xa��Bn*����s/l�<�o%����Ft?�`����*1����J�.��>��1���_Uc�Z��O?!��D�,�M7dY`�o�@����u`���@&<��	Y[<�>��D s��6d���j)vnr��V���V���,�|�M:�nr[F����2����g���{!n������+]k[�mU �A�N#�0b;�x@m�p�<��4��|�����D��n�X�X����"��|�4�}�q���
!�TXe�N����4����t[W�����u5���	�bqa����������8���X��Z8UM�/����WiW��1��O�>y������i��-���0DG���z��2���KJ�pg!+���m��{�j��A�(��E���:�+?zB��)�h�a@�	d����#U�d	1�� �����vd����9/�M��%��e��0��*A
��������������,n�����ik�������E��lQ���+/~j�B�m�@�H8������_��B�"xj
V��2S
��g(z^?�Po�)9��5�Z�~/������G���,Q?����p�/�\)�'�v������u"�y��6������~:��qt�v����j�����[�����i��#��''�����rUMe�}"��D����O����~f�l����D�����t�?W?V��
��.�W���9�
I.t.78w����M������d�Sn7��"��+0���B��o�s~�>�d�J���3�����p�\�w���~.6�
�;Wd�&�����D`/��>����-��=o���k��W;M��]��ag�I7�kEO����>����Z�/L%������c=D38S���C[�g���&"����t�C��Tl�@����Aj��?Am*�H"s��.�O���-F��(5Fm*�Ds���FMP��L�)��7���>�0Ze�"!R��Er�p:��cP<�@g�\�9��]�>�]o?�P3����Kh���n���n��8����WUG������@�:��@�B(|J=���	��]Dk�	q(����g���U����q@��&�I����^�2/���a.{�`�|�D��Z�������	j�<8���a�Sjp����)w�	�T�w���w��P���n�C�;���Ck���f�TT��zF�j�%�g��Fo���HF�	�4��jvy��t>��"����!�������)[&y��"KL������l
}�Wgl#Y)M���0z����1���<^��D(c�t�hC�)T*���:K��/t"�1r��m��� ����qh\�e���Kk
��l&"�3q�i�[�s��������p)�<���f�HE�g�����'���!����:B��<E\C=6����!�=?���r�wG��aF���g����Q�xp��8���"["�<��K��$.�H�bxhr
����F�K<���+Y q	H�J�ODz��t��&9_��
A�,o���e�D�$rBh�G�2��nC����Y�3�"'x6������O���OWi?�}��;�~�������_U��Z���i���������N�e����(K_��u�������G��k���o��t�B�0��X���|�������O��[����:Xo�����l2�LZ�c�Q��%W{~��|����G�hp��p�]t��?�z�����(�A'���%`��H�*T�H�3Qh�������������V��GA�s�j���d|��QUt�9EL��	��.u
��G��
��dp
����pPE �H#`�*l�hnl��pk��:�j��}�����9V����s�J���?���U*cDS#c*#<C�aMu�9�8rA��!4bi���c�j��#�����zt�������l����A2�����=V�rA�o�F8�?�X�!�#�d�\�2���a
�������������\��zDG�a����������3�an����e�P�����eT1�����4�M�J)%���X�@N`��UUF�?X�o���pC�����p�����/�d�X�V���3L3|}
m!����m>W��~�(9����7����d[	r��7���{���������z��^�\�x')�p/���g���"�-{�w/�'��Ze�{�d/�E��2�{&�� 6��E�:�9�t^����+dc�3������GdN�RU=������H�s�,�����4�,\��5� by�4=��&e�N!�$O�?�����p��s�q�6���\�����v1Z|����"��p2��2�+��k������B`��Q�U[a�t'�-J���$�BO�^�����eM���
��j�k�J�������6����+P��
�zi�=6���Ha�
�#o$�E�O
���!���������k����nw�o���X�l���;�o������!��NuE�y�SW����V��X�����I���K��s���!xU��;P�!��>��H9@%��M�=����F��F�������-�D1��*�h����@����X�
E�����.#�L�|��0�q0�'�c`&v���PY�]	]���Bt"��������E ��>����LN'O�}h��5��g���Zj�Hz��c/����9�VK��|z�S����)n���������t���V��	N��
lZ��E�y�C����C@3����a ��uCB�s�������4��Q%8ul�@L�EU�tm�B� ��`����P�h!�E���7=��@�
��A),���J�������h�lbx�o��6���O)��M�+wpV5M��_qy�}�����$�1��-:� f�a
=��8=�L"@?���)�4]�P �$����KR
�����%�}����'�{B�7Z�9E���dn3>���=��3>S��x@_3~��t����f<KR�4�f<�������G���_�� ������r��#CC�����7����-a��*@��#��@���3�0�h�:���q���[��h5�8���)pC�S���}�,fu�^&��?`�"����l���K������\(n������4j���Q�E���J�\7���[c�3=��Q��
�#���I�7�	���uc�("V�\�XO��
XT��<�vO������q�����g�gC�0I	���<FxC@o��8�]���<�EP�4rJ����H�XVe���B�72��6�"�#� Od
�F+���f�"�%YnS�����X��m������2'4��Ek8=g�ZQ*!��!�[Z�+�7S2���x0�D�fJ��k/����,R��-�3�^�2%��%eMFRS.2_9k��������G!����5,��
�R��=��6��
�3����vg���0������0�c8;<O�p����t�e���n�,1nG[��O���J�v\h����p��7n�o��N�t}�,>n��'�M��ke�q��vx�&�ZYr�&������:n��DWr��&��������Mt�y&���q_�����>��/�Fl������W|z?� Vc8�H?� V�c8H�� Ve8�Zo� V�e8N�o�B�(�/�FW%����u����[����b���#@����
��$��x%����G��7������Tg��4��m���6�����:��2��B�O[5C���v���a��%��L��0����8uO�S�v����'Vj�����\�R��sbJ*K�Cb�9��%/�O�0g����	'��%��L����G)��;$��
�$��)������I�sM�:�C�x���T���]���[v�I���]�I��PMK���f�������y:&�%���'OSv��<U�:C��v����'�C�,*�������*Q���5E��^:V�A��by���C���o���eD��Y��C�~��j(�[?4j"��>���={��������H���O���;y�b�)	\�[�D��	�����j�E*h����|"����7?�jD)"$RN�'�T*@���*����9v.��fnL���7x?��C�����a�s�
���?��������q{(��|���~-�!ao�C|��m��+ �	�����K�f��_������_}�Af�t:����-�d��#����zLkYx��H~hK/�hm��1�g�����[Qz���\xJ��P���J�1���DG�����V~����GX�w��g���Dz��r�V����,�^������V��
z5Ti�N�U�Q�([nK������uW����!�>f���_���z�Irxl��j�;�.�On����
'�]TY�='{����]��r��!6tc��f@�%�D��!^���B��E�|g���3�9�J�8��;s�m�Q(��o��r���vO��x�E"��Sp�t�b�zH�!j��� n*bJ�WI�\l����II�,u�(��,�Y���������~m�E����x��B���6
��%�9�$�m�>m��kb���i(���8[�#���4e��$g���>y������/���{ y��/n�
�p�Co�8���u*+A�w�(.�x������I�t`O��Q�����l�D~l=���z��`+aqsB��"^�rz^���@�9�
P�/�7(�+��}���a/%��
vh����M4	rx���w�=�m����&����m�M4��
�z���)q�N����F1g=\��(��!C�]=�>�������!�AE5p�?�*�r�O�X��oa���76q���PT��.V2��+x���p�$�YA��Gq=wK���~�3,�C5!mP��.��F�����}��4�)�1��<�������.���4]S1��E�l/_U���
��	����]"�7@�*���I��^��
X�a{�+�A���p�y'e������';.8� ��a����!T���r5h*C�*[E]�x5s+a��Od�,������T��qLP\� �7 �
s�.~�����#��`���q����|\O�#���+B��s)=b]	�"H�V|�k�����!N�6��m�@9I�#���,C�������7"9��Qm����	{CKm����h��������F�y��SH�������JYE�=@lH|��(�*�\(�`�Aj"��@b�0]�� 5Yb�iI8Xh�����dt������=�����X���K��f��qJ�aI_��d��\����\z*d�-����	RS�-��`�����R�%����PT9�m�������z	�+��I{��,SeJ��4d]�����D������|{(������"6���T��L]]9��q�,�~��^�{�m���G9�t�V
���&�z:[�����b���z,�r�W?��+�M�9�8��8�L�#^Sd�B�/=aAK��K�t�Z�',d	�������i��-HC�s��6��c��6�����+��Gq��F	�*�d���%��2t;@�K��!���&+Q�!C����R�7Y-%8l	_8/�{6��{1�|��MV��-K����a�^#Y������7d~�O%+Q�������O��$�k��':o��T�
����V��Eb��,E&�TZh��r�����\�J��TM�
��dN��v�#g��k6K�T��
��t�z�_��y�K�'�y&t&��SU ��q,�e-��d���1.�'��[����������Sq:�$3��Z���V��cdi���"�AU��*�lI��2�������1m�Yx�8
���e�V���`���<
��(�B��*�g����2[��t�����e���}��\��8�wr�M�i��`��)A7������Z��H�]�
�77e�)M�r�_/v��A�N�_RwY7aV��R�X���O��h�
�����O��Gj���������y�V�l���7��K��^�$�9����_������V�?�LAd�bK\VH:�X�.^�
����l���)I\��c�b-I��/��B�i5`����gY�^���#+���N?�X�}����,�������YQG���AJw)��v^���Ew��[
C4o��!�_�����n���]qj�-�a�y���-+�Ld�v�k(�Ai�0
i(�����x����Dl�m�������Z����9%I("�G-�B�\K7@��pEj(0@Wt����$���1��u��1f���Q�S���
�����(K�)&Z�%�`�R{��F��#��Q��v����N=6i���1����}�tO���w%qc3���w���4�����Fi���&mC�g��?J�4s�.�L��B�8�^�a���w��^���:&�P^�n@t$f�Td�,���b����H���m���B��^(i��-NoG)K�cD}Jr�{�������{����}���������JYW^���P.}|U+X�!�*G�+vK�$A��>ji��Z3�N��(�������uf��L(
*��2�`�c�1�^�v2S(�([��r{`A+�����B�P���+E��1�l�����S�g�'��<���pz�\rz����=�]D�
���B�������_�.C�����]2�4j9�s��@E�5D	�K�>����>~Y+�;Io�h10��[l��,���X+��>-G�Z1����3hJ
�=m�+����Q�.���5�����c+w���6���e�\�M��q���N��6��C��D�����>_k^vf#N�����vFUy2&V��,���EI�~= ��
h]�/�GFG���g���<d�}eC��??d�����662�� #o��7���!��X��W�!�������hkv��5e��t��)����w��M�D�3Nd��PK�q���e��L�������%O���A'"Q��x�D������>��R{O�OK������8[�
g.�`Z�7%l*��SN��)�a�@����aTECFn���mS���8��{G���L�p�8v
P^�dj��a&�f5�AyS���R8�����ppZ�fe�����&��Lx���y�g��Me+7��%t�
`a����>W;�j�q�����*Z�^������1������3�	�!2����v��x�M�(��Z��U�X�i����YRI#��	�;%�<�x�h	j/���G�`1���~��G����A��p�p7�o��_;
�}C�G7����q;K�x����3�>����t��,��=�Tf1����bNm����)��y�����"�2��J"6=6F�������W�?�P�kd�R,�(Qg�7Pj5���C�)��W�1��!m
�;I����`�����4uFq�� �,[qU|�P/9j���Q��C�9.���eo�A$�%e��P��SB%O5���|*�����o����|�fR���8�e@}�aR��9�44����y���k��d�:C���e����_�X��
��BT.���+�z����gx��~����w<r�
f�\< ������{���^��������yx�k�b��G���+�=���|��r���QqW=�Y+_|��r%UdXae/0���I���T�_�x��w�
J����s�b��(�:�*�.�L�s�v27T("��V���C2��t<^�ZRuH�C��g��TRu��B����eC�zz����z([��'���IoMz����2�J������KP�$���uk�����e�\G��]ew������������"]BE��.]p��D�������.F�t��v�'��������..it�^�K��p(��0r���S�_��_�)a���
xeD�p�D��	\X�(�[��������)�<6��K<�f$�b��)������@�%�ST�
����[J|N��6|�q����{v����O��������E
�z�$��bB�J4~��.�G�>��m�N��������i���3�l����!o��E����m���x]�*+> ����h^��"r������Z�$G�?��)���)����W�}��5�n��%�D����bx4
lhy�v?�FJ��B{�8 ��r���V���Y�.�����B���
���kz)W�`Q'�j�A����DW�-�O��!��@���]A?�%���2	��a7k�^�������v���k�y)I�6��N��3����}��b�)m�������E�3��%����/��r4�p�wj��_��k�Op^��W������nzH�����:
�V�������Z�{�1c���cu	C����Y-O�Q��������]��x[7;\n>����J
�8Rl��3T�j���������wGkVo�X��
�q�GT%{���p�f��Y�!d�(RgdZ����jT'Udw(?�K%72�������af���9��gg45����e��<�NnK�!>%vp�'^ue�:�zS�
l0"��MN�� {xG+Pv�C(ou�pB�m���+J��&O!+f�<�� ��a�\a�;z�<��mSb�s>��QW�Ts�I_��\�A?�E�#2�P�q}%A�,���*�l��[q�2)(�rVP�[��]�8�3ieh�-i�E�f�R(p@��03(��	����B��u��&7��(�����*v��gE��
��'���k�Rr��@k�*���V�m!�:b4U:��0JeM��i,
����E�� f��G�.�T�7��b��r�&�
��x��B��a�0�q�[���7�G�'�y�^��������Z�D�4]��$�j��[�X����w�Ry��.:l��� z]��$<}�%��1�)�E��PM�d47@
��<J?��F�����{���C�����Q���(�O��
����#d�}�1��c��Wi"�^�&����������I��J���b�rG'�)K�i�����1F��(R��	�*����
�/���5K������r��F4��H��q=�H��������1K��m��
H�x@HoWSk��������pN��]��18�j���{�fqb�|����f���C���EW�l�G����tb���e��!P��6�3��$=h�M�:[��Q)�. �q���X���� ?������?���?�M��W��"1}��:$���,=��������k�G�*	��D.%��t��A��lc���G�]����,���5�cy��r�������Wl���6�C�^6a,��R>�
\��ZA"�
���Q�U��hN.����$���������4�H�E�]}1�&����16��$��z�t���k	��q����8�s�B����=\D<�X6�D&�aH�<�C��z,�:p<u?o@���w�|�[U�������)\����Pv�Ws�"���z'�!�bF�w"��b���Vi�79��|b)�!K��j�qB�%�dO��O���@|���0g����"�g��b13���A�����Q)5d�����H��Yk���J�[G��E+I3����F�������>[�D�c�c���������8��b
]�4BKXh
���������!��Tc���5��|@�;&�����a��c��Kc�]��b���xC�(����kr�����9�A`��Q����;�f��MIu�r�
H�J;PN�@{z��s����s�v^����+� ���yE��~f�dr[��(�[&I��!� \�]N�q������^�r��D�����
{�.�8����H�]���	be)u9b�!�s�L�T�h�����xV�-Whe���Q|���te�*6v{D�w������Z�o�B��+���}������U��!���x�x���1�6d�3�$<� ��d��z��� ��P��v��:���0���+z���?}m��*5���}�&��g0��T����Rb�M�	���veJ��9.Y��	���vCJ���-|��v�H:-U��}v1Ji��,�=v������
�
����^_�
���$P�)���!dw��!\D���2����#'��2��������-C�H$XG�`��2��A��Lg����x-��'�@�k���2�Az���XYp��������~�\a�/�.	���7�L�[��Xx)�@ ��������T�� 
�2�H�o|��!�k�c<����uNs�%L�u���Gg���i���b-������'�*5>�q�b�
r�a����d����q?j_��[4Y�����
���.�-�T~����j}R'��qr�^�P���z%��r�v��(�Z%v���D�`����p)�����JS+f	��+�'{^_\�i��V���aw�$�����_�A��*��n���\R��&,�K� ��0�c�}�V���iU�G�k��L.�:�h}��,�Whg���S����~�s\,/M���G��d������~�?&����:�-�|��0x��G���>}��g����m���z��"��7��a�q��Ga����]<+Z���|�f���������R�9�$���5����6���]�D�Z*7��"]��uQ�N�[V��c���YVU��}�X���a����[I��zqU�Hz�Sd�{6b��DV�.�W�9�IY
�`���
��������_�/�d�B�A��}����wh��<�c�J��g�
�^��^�(�1�!_�0��`?�����2�Q�D�uj��0L���������T���1�M`����n���e�����
������xdo��i��i�*/�+�hn	���9v"����>+h����
������c����;.��2d-����K��t��N�||����i'�h��:��	G��>�Z�1����>74�:���z���4t���x��u����6��.Uq�O�]6��=�B�X�0�z^U���9`��<�����KIe�����m�v�^}�1C�*����������,��#C��C���WMq����*8��/�eA� �k�q�������,��=��3�%l�G�a_�9PV43`���q%��@��S3��������1u�H���M��:�S�Hq��6g����=Q|�Wm�P<�M�{P�7��[vye�����<��rg�K����P�1G�[kt����oA��.j����U�v���2���(7�w�S��J/b6���g����\��������hyb��^�3D�����D�w���"��c�g3wI����':<�7n��^��X�r�z�Z��7�+�m��~��,s��'�R��uG�0b��93�x�NCc�5���u�/��-"�nKK��0bY����6���6�	������bqi��xf^���"���D��$T���%��yw�08�C���7�8M��
Z�IN��a�Q
d"J���=�[�-��5��A������a���F
�����������0R��{�9D��G7d}q��{6R�P��[���D����G��7�X�>�rJ�>��j�Gk[��p��z���J�v��f��>o������]U{"&��$L��R_���9��[u���3_��y��(����$|��h�2�����SMa*�e��Hn�����Z��,(�%��}E��-�	��s6qF�X�3�e�$^B	��?��.� Jq6��X\�f�K�>u���(>z����A:�-����V���h��xGEqw��N���]PDl��n�D�����=��ok���
>�S�W�**;p�
���>DhPVF0���`�r
b"��)�9,�L���P 9�=����i	�*�z�qJ�����J��i3V=����f7��s����c�k:�h�qj?4�!h�X����CZ����f�_���}t�G����T{���~e`&���&������(�.W�m�&�WC\+C�Q�cm�Tv�M��d~���t��;����YXlib����]�� ��Y7�
�	<q��dN�; 6Y�������yR�l��sR<+>O����>sS<@W��,�A��+"W�gh����A�Id�F�����x����3���{A���w�l��}=OL�������M6z�:�$2'��!��x�$��9)���['���x6���1����%��:���L�RYW�y5���Y�5y��tH���0��&���2s	,����(KVo�=����4��\�����&d���{���s@O-�����x�9��S�[�����+��'l�f����Y`0:�t?!�B�3�4�R��g�!�(��?g������V�)�?���6/Mq�)��!];u>�0
^���@/�����w�4��<\a�!4�O��S�m�k����-+����Gx~R�6>�Q��X�y��"8c.C�8=���0�:B����	���@J������^>���pj����!s�`�k!_8g����xe7D]��36����>�h��S�==���*q��T�[~qNy�]K(���O��� y�{}���\�er�3�+�o�e���9~<�N<�t_�oQa�����&d0�\�����h�*�)�+g���!�:Dv4�@�2
�
����6��������E�lC~A�5}S"Fh�,B36Gh���n.k�O���6H��
o�n��WwA��F�F�dd�������^hL���f[OyS���
��n�,��.)�v.����-��o ��'�������c9��C�{����],��s�cG��~:����j�!/�Epx`	^jc����vLk�kH.h/XIt^Q�$�����|-?I~�?���k����j
��[��K��N�pG8��~Ve�f��d�j�f��qY���;��_�����G����N(ZGa���s��	���r��Zp�S�����pXi��-G��
���>��]�=�P��s=��
� Z�k������p�;���N{����Zf���Wbi�R=�����?A��g���:��?2[5z�r(�}��N��u=� ���B��h�g6���6<�o�p=J����;��� %V~��W�w�W�Zt���MpIH���S�"��#b���P��j��NW��QB`{������<Ov����M}�����i�K �G?��@�*��M~@��~TS�����#{�������N������44��T��������O��$PB`l��������������6�����+�;!}�I`��;���w��*���E���Y�NB�7��My���BN���7�G�q��S��&�p/{��-���P
�L��}��P������<��!()�c��C���*:A�m��
���+�"3������8wOEP�
�~K�-y(�}B�}�`v������*U=���5��������^��
J��q��������-f�J����������/4����$��d�|>��7�5
�����|4����7�1�K�x�5�]Oo�h*����#��m��!������-m�������%P�t��h0�
F���8�����}���;NO����
�]�����q���v��x���q��������[a�x��5��Al�UT�Gl�����2,���3��J�CE{E_q����:,�K��wY�V���/��E�!�0��*�f�Y�Hq����j�3��i�����p��tL�^V�CQ�S@K�����cV1�E������k�l�q:���(%�CK�#]�Gj��z�����5\����\�(N����p��{Y�8]��!���Mw�X'���3u�-8�
z����%���
]�=�����5�}�FF���3*�������;���P~��)�z�qObZ�b�0}�q�X~mU��,q�wX�����>�Ct,��&q�4sm.��7��FO��c@����Q{YK���8���{���4���+�%���.ATc�D����O0���,�.�u�A��{�-U�����cY��
^(���]�9r� �d�c�
�Qb���B�o���c�Z����/�C�&�����5C��e�.L5D���h���P� �6�.�P
�G~h�=��s=��uUp�h���Gb�@\�A��N�^���l�YZ���5*h	�@K�h�B�'E��5�zkb��Ay��s��6������',��?�CK�BR�=��L#����2G�r��4�9a�si�O�1�&Z�B}!�!1n�c�^�H8����w�����-V��A�;8�mg�w��%}��wq�qHX�T���7����iv��nB��@������'��'?���e=�w����nh0��3r��\:�"��vf�W�?+�� �������BR[���|�������+�qR��o���c�>����W�N�F&V,�}"^�����1������j�����CYW/8��~#H"@�GM@���T4'D�<JB��<VT�r{>��f�pT�P 5��t�2t�T�������F��3����o![V�g����A�Y?�q�iA�Y?�c��s�����D#��9�-n���-����l8�xb����������Q�!����wh��O"j��w�Fp+pq�)�vC(:@f/`��^
�����������S�l6�S(���%g�L�>~6�b���h1j8��g3��t=�i�Wo����R�/��W���	�R���U�@��U�Bf�-��6�r����6+���LN���JM�����}I���"-��`�#�)qx���w%��>��AN����<5��N|��m���"J�b��toP�0P�".�5���y2��'��U�=�m��������Q���:C�6�;�>rM�* �"<k��Y�U
�2��(95��||`Q���\�	����4��;Q��������6�������nu�r�`M�Bc$��=�,��
����������h��g�JG�:���E&A1�H!#\	����_�,S6?���F��[JUC�7�X�q�
12�T�����/���+/�x'�Z�'�t�zg��lXiY�	�������d�3���E~q3�.����Z�����6�k	�8G~�3�x�L\k�����3��NS�'��m��������=����v�=���Pb���jW��Ojq�������#!��%aa�=l��	�q�$`S���)�	y�#Go�����IZ����{WwL��+���c�%7�|�?f	��T��v=`a� zrq�v�e<jI�J��)Sw{d�����&y6�;~�n�;Xa0�i���zT�w�����v���i~\Z��a�2�u����)W:a���-���������&��p-
,A� �����*A�����aw��z�q8;d�	���i'=�1�M����I:@��e�'�]��R�L�>��
��}�(�X7
��{	��S����kF���A����5��|�n���:�#���^L�p}��������1��B=�XW��P���G��"N��QPu5�g^�R�8��QPue���<��W�����)rPum���.@��U ����/X�����������j�8x��B��R���z|�
pN�AmY��-V�! ������e��j[��C�hA7O0ET�(.+��������!��1@�elW�]^m����k���(�G��mQ������`�_8�H�SY�0�vt/0
���������hz��������@t�����H��w�tR���(�k�8]p<���;�����9���&���`s���!U�Zsj#���7V���[#��A��� �k���`2GG����x���8�~�.���$�]�Q��t��<i���MeX�	�v��v;c�'��d=�5��`^&�����Cp�Q�t�LCD��?��`Vv�����R��O��V"�����0�wO��?	����{������Rb���0�G���hW=Z���o��N�`��p���Bl��]T;v�i��1!�js@�N�e2de��RNc���Vx���AB@�<�_�>��3�_���=�2��-=��p��8�ZiVc�&a�n�`L�u��	�u�:���M��N�ir'hMFId��LsF'�1����-l'l�� �(��jP�J$�4(� �Zn1��b�!_�\9E`�d[�&���)V�����/�L�tAmR��D��O�cu+d���8g������*��XS��D�_>qoXxc�
o,��7�,KAV���;;K��������i#
����V�^���gNZ$��Hs����S|�KF�3��x���,���U}���	/�IoW���BY(��!;�������G�{��KM|���:o��4�!��Y��_�����C�0z���m��Ke,�M	_���-g��)$Z�8�����C�Vcxc�h��N�.Y��r��F.Mx���.�
1:k��h1���-A�Rs��WB�O���^�f�P"�P�
�!�nI�_��_B���h[S��%������B���EK��Q��Cg�
�B�D������
�?�2?������������2x<W����v�[����5�n2r�����B�����t�MK���V��,e$���
����)�B��lh���8�Fl��*���v��l�����5V�����\<.�(!��P�������Kv��7N>C��$��n����\�=j��w`�8=o
���|9�%R
�.���"��>�Mo�+��z��RC@4��/��=!��@@B�tq�\x{��\njz�\7V������Bu��m��k��:x&:�-I��:x�$:V�&����������5����S���-�eEC���h_��Zl�� ��-n�� �}[�+=3����RH���7��%V�^be���� ��-qub����B���-yP/����o��,B�<hFmx����E�������+�
#���wmg�"'|���*���Y^�h�R��K�pjgZ�%��r8����E�I�p�f�4�\�.b��������+�� �C��;�G�(�V�]�W4;��d@�	.�
(���(?%I����>���,�����L>�*dE�E�XZ���H��S+��Si"p�:4�H�U���m�����#��(�:��l�.�6��~�#����4l;��H�EC�yk

<��6���P>*�m��3J�y]�%T���8^he���m���7����'C>��l��9H����x�M�/���z��.��������������Xu\����]w��l�������'
6��;��Y6���"�����nc�U��3f�G��T��c���L��Q���7��X��U[v�!��B]�W+�<���/�??N�a��y����Yp;��p��P�}�z�S-�����L(����C���=��S����1k�U���G�"�g�$E%�o|�2�L���������B�F������[9&��?�g���+�#4��\!����U���dv|�ix���%8=���<���6�%������GQ���u������^���`[�^ �,Z"|(V�����M�|_�	yW>���{	�+�R�.�
�&�������\����������?�������dW��.^"�X���9�-�	e;T���P_�%-�����Vq:�
2t��B�(��������A ������t>���tPzu�c����#��td��	�O%����"(r2�������dy_�|�_��0��@3��c��|HI4���t�������B{�hY�y����pF�,}�8��#�.�B�������`�mIX�nh������!���2��5����$Fy���T���3�n/+���6EbJ�?��d���Lb��X�����X����fC���[Q�@�v8�NC}D����a|X��m����f3c�%B'��tB��>��b�5b1Fhkd�����d~X������b{6U
�}�� V?�����b���	D��xX:�`Q���
���Mkv*'�r'����Z�8u��k��hA����5'/���rr����� ?�z�����]�������C��$ZUo����Et.�K��g���`��kT��-���B�1|��[v�*+�0�����	q�t��P������bm��4a�<�=*���P<v�o�����A����Y�U��<����VjO�������]Fi��b�?��e3�8�R��;���|4
�2W8�z������,�fY��nRv��KF�u��������YxIo��7Mnoj�W|P�3N6�!7KpA{V�,�|��x�w�>�c"9�9<���������+X]�8�C����8J����aqij��=��?���in� ��!o��Y�Q��.X��}���{V�����Z@w�$B2C�px��-U@�����'�����������4b�x��~�hm��p��?�N#c���?O�H	��SJkSV.L��9r�@�S�-����b���fse{A$?K3?0(
Q���Y�{����>7��	gf,U�j[�-0���-����h�������q�1���1l��-:Z�&�5`�E���mb�a�t��<!S������"����>����(�����H��#0s���ptItG�n��M�V��n]�X�6*��u����ZB�V��G��U���_��8�y.�����+���~����x�M	��4\�
�a\Sfu����$����H
j`�	�n�0����]���d���,�"����szsA��g�O/�or,�A��FM6�t��V�����c~8@����*Qu��v�;��,�Gaq�6��3�k�T�����/�
I;nu�Ag������V	����$j�������J�Qax�6�:��D����i��[O��A��*$�S�_���%A�av-���6]7b+$_��1��!�p�G-Sd��)L�%f�uR�������J.W\-�p0�������]�F�#�
e��9Z��������g��������T\s���Tg�������y����jK7zv��D��0���������Z�������C���c��8�����@�fN]\s�@��1��Q�J�X������Q��;P��c*����+*b
�AS<pVV���
��*�/Dz�v��e~�����x!;�b�#Y�m]�E��(�� J����o������!��/�5���O�����/��Rc���5S���/S���ej5`*o�����
K�����h������������������~i`'����_v�a����v2�b[���v�G%�a|���������or�o�T�����r�r����!R(z����!������Ox��P�0>~�~����
�K*Q?���/���?~mR�X�H�;c������{���������&�����o������o�``iy���#u���q��upY�iVm�WHT8�}HOW��4�j����$��e`1���mX�3\������xh����R�()�u0�����T)�����F��4�*U*��U�!�Vp��:�ye-�GEH��#
B��"y�mI��m��TYc��8`�1��bm(�����jD�
��� ���s[>[����U�jV����PR8��x)��>��d��	��@�tK�/0g*f�Y�4�V��f��`��[\](V c�P���m]A�(��G�R�db�������
x���@�;�Eb�x���$:[K�K���]��{���R�h��i;T�j9���B	"�h���(�����K�����j$�~���u���e/PL��pbi������O����_��m�i
u�({4ja�L�I<p���V��.�Wp@f���G�eYs6($����v���J��,x7j�7dV�\g/��V���-�1���%���	K�#���]����Ekc����/C�����	r.]%D8���O��[���-�&R�i�IN)A���y�:?�[�d;L�pLw�k=*>�?��v�N?��X
GA��Do��!���(���� ���a����*Z�a
�����Ub�t=KuZ|�m�K0�L���b6�����6�@�No��R�o��/sr���P+��������je^�8�ik�:%,����	��2�'9��%�0b��R�p�i�('5M�a���DJ����i�T��^S@���0��@����u:���G����.�.Q]���������� �����Yu����$�7�8�~W�5��-�;��(��V�u�pz���Uw-U��.
��Uw�T��.
��U�6�T�K6�^eJ�!���� yG�2�@	��/N�-�H��B���`�P���1�6^\��.�^����*Xo?�k�5��w��������1jF��%-��+��!�e^��`�$��9���<SaS�a��I-��1o<���s�����
]!�`a���@��!t-�xn��-n*�����w�6���<������h
��A��UB����}N�����J����=�g��-�C@��Y������&0����bM��A�<Q��������g�\�}�^�V���:xh�|��[�.)VI�V�51'��N
�S��z��W��!�O��+\4��T���`<d�zKQ`�t���"j_T���i�P<O:A_>j�va.��J�f���?��Q!�����mv�V��Cs�������*��5+i��l����x}���y���(�����S?�\�`�t�T��02�O���9Qx����l!�*,�{�LrB~�\4�FA!7r��%v_������4nt�aI�B���m���Y��d��d��t����7�Rp��H����U,/N'|�
e��_f��o�h�F��4;6�".��v,Q	F�o�u�0'c����%����I�����C��$vZ�
�>���b�5>bzv*�NsV1+�W�
���u�A��L[*P!�@~,��	*`e���������7�1Jl��{@	�i���	N:�}��|TAcp����b���&��5��z�[|�VK{ZW�<f��J`�~��p���.�N!6wOx�b����r��3��8^a�Xo��K��?�������Wd����gh	�
�5�4�A5�����tE�t���E0f��N����2����=�i��5�~�	����~�)�W�\���q���X��>���%E/p������b��z��6�(�������SSlK(<�i��
e��E�(o��j4��`Q^B��C[�]a9�I�%��+	�D[�+�(�$�A����������t��Wk7�,*��@�
�GTU?2������;��jj�!�z����1c�s��fh�n�w�1�=}�^�a���ip�J�un�azS�-����
$1����=J��B��o,���F�y���g��H\��C�[=B�41[�������9SF����t=���$�y����a� 
v���S����8
�{d2�N���H�r���t��~�����	�$8c��z>�!���W8�_������� 4�Q����$.DO�M����3���
)!�@J�����>� M����?RB��<U����!�=g#�������l����5�A�u��?�OM�{����������i��N��)�I���ga��)h��e;��>���c�.N��lX����#�*�+��M~��-o���h���T�q�/�V,�������+)m2e�.\��lX����!g6����#{�5�]�����D���,8�3��([JC����!���+z5V�}��v�i<|����{.��qe".&e���8%c�b<������`z����2���iQy�f_��5rP���.�B������/�+�2���(1qC�kZl�m��8����9��O_X��p���g��j�QH�w�-w�������@��9�����.E��`�"�Z����(�
NI�n��=Oe���&?��aRZ��F��?����\����K��N�
4�?/�������"�L�w��v?�
8Z�Xd�
���d/=dG!�@)f�"��s�������(�B�jX�����gj+����u���G�2���I��[s�bP��`�^3x��.��d������E$n�z�8��z$w�s��z3��U��;�^�"�,���bg�/�)��q[:D��������"] =�d�b��9B��=V��~P)9t�����h'�O��Zp�AtG{N�Y�m}�bu�.?����o����/���4��g�n�3������VCw����ZNd\�+j`�t�
�� ��g����k2�A��N���!�.���tA�8���p;�������
�p�����d}�����;9���zk��]-h�g�45�`���U�#`��a���{G���d���F��}�U6j�Y���1�m��fGE����\w����}������J�>
�m��c�sh�m���� '���\N�%#��H��+���@�1��������g�H��X�q�?�����>Sce���N��4�����c{-������4~����������-/o��i�IS%�|%|MN����9zt��5��@]�$!��Y�*~2R��IV��!E��P�XB�.�����b9m7�e���C)�I��@��W�aQ����A���c-)�@Qx��3V3j�Y�K0�	}��[���q����{J�|�~z��*�[P7-��_��_���Mq�Y
�"���n����q{(,f�����1b��$f��fLJ��EcUhG�*L���W��a���j6&*/\�������h���������/!��yT�<���C��C2+'�tV0�B���}���i
�)O�0J' a�O��h�LS��<1M)��`x���Fc���@_A��7<4��>Y�1B=e�V��?��{&}�g�-J�J��e��0.��T���M��#M6n&-��������E�V������z��&/�M���WM.�t�����%O��E����]��������}C����-��x�{^�K��y�:Z`A��H�T!�`���]���cY���[��.��s�O��v����w�o������w�R>����WZ������wg��C�0�v�]�L���������o�����]s����bYA�	�e���������n�G�-���������t�����&�xJ�ne�l���~>F$���	y7�B����pa������OF�7���
~%*��o��w���%���x��^Ld���C	�"s��
]:���O#�d�.B~�����=&D����f�=�����
7����q$����Dg�c�W��4����,���=_F��,S����qMsB�������F��O3�N�3W���L���05�S���7.����%�����
K&4VH�8���WQ��*.5"M��"��_��� ,����U���cy0���<8N��*Q=;\L��m�jA���B�-�v ++�:�Y��
��~��Y��|�8������w�/���~x�����>`�u��J9
 �i�������"v`���:��O>�d"w�%w��w�tb�Q� �e����+�F�ev����w�^0
�W���>�Z_�������\���������@���>�0o0�}���c^F,�d��|��`��(S�E>X�����>!�Z8N. ��^_���>xK.y����8a����'�bY��?|��_~{�D�`s�����i���4�}�
?������1z:��3��c
�|��xkp��l5�$�/���;'V�5�u���_|�U�Ro����z5��oy�-K+�w�$�;Af�+�3�(mQm�]���h���}@���`��`�%+x��R���\��W8�O��u-2U�U�j����6�������ee����E�����jD�3Q�Cx)�3(���C����a$n,k�-C�
��{���\x��'4��������u��%��O|���g����!�]b;[.{Y�:���~Z����iZ�����i�JlN�������$>�im��mZ�%>�im��qZ��}��i�
{Y�:��^��v�����)�%,�[�\�P�9�C�@O�s	<��������wF�r����Q���t��������K�>�h��b������	h�ui3P��f@�r�d�6���]���1�lc��9������
��y�^�'��k>�z���yErJ���z!V�?��>�����q�g�����;��k�b���7���1z� ���r���|>�����������m^��~^��������8�f�s��P�o�'����+@�1���*o^c��u(O����;s�G��*�����!���_2��Y��	j� *w�x���������R
�=����Y�:�wC��`�3�f�Oy�������������Caj��P$���
�Hl��g�7��u�*��u��K�
�����I?64�|:��*sz^K����i]��U>�Q��������!]z��qH	�����<��	l�#;CG��"X���
�YEd:�CC������?>���ck�����.�6{�������y+�f]H�-�������m�������2�P��
���������#KU�n��;7U������|2:d���b[���ydI�7�<��i9��
2��r���d�a�=7���T6s����	*���'<�5N��Y��lW�Y8���r���9Kuc�TwR���S�O�����_��Wk��|.8���P�����Zv���gH�:�!�aa�������C��q�?$<�-FFXgK
gO�-w[��d��3����	k����j1;�m�y�������-���Ke2wc^�yu�������37������h�sW����F�$F0|��1<U~x����[�����d\���>R�3s|�����3�K�+��o,*�~��-�.zv;���^~aL�J��E�G<��������~�_��|�yA�[����G�T�J��~������hu�.���=���#[��?�<[����������/��<5��Fv��KK��Y�����o����#�~�����d�Jx3����S�t���xw}Y�&
���P�n0L#!�L'�[#����P�PR������I��&	e��zn�ud�!����X����7w8^V��]Gf�r?���e���3��6�r�;�EO��<%W!������Z:r5�D��D-��������
����u�8eW��J��=A�-��/�M��zOs!mf��n�.\�	7��;��1�Z��/k������2��Q+�������C��-�-\^86P�2�B��c����4l*���Y�79���w�^!\�r��d�U�N���l3�1
=6@�qN��������[�1L���
��a4����PM��O0��������]�A-��>���A���#��!��R0�&Wk��|S �8���4�&%�/����e�@�8�������1!5���:3�ax>6�����b�.��#����W6�]l��L�6���s�����9����8WW����{����������0yk%������q�d�kM$�������98w�9��Dr��t��oh�HO^���Tl<�e��6N�S����X�R
TJ��g����zI�>�7a6����������N_ �N���N�~8?n��]Q�+��FK���X4m�i^�"���#�*6�x��~7Q���Y0�s����� �]�t/��h�6��17�d��0���CY�]}:�)7p4@$�����8�O�N���k��{�e�T
)E����rS�Y�����
���z#�R�/��K��E�\R�y(zd�u���!6�n�fKh�>�,C��9dJF;`��`	�V��������b{�����eW��D���%���'�;��Y��h4�0��l�*?�O�iK
��f^Dt\7��n�u�nW�����:s��z2��@��l�NI��^��T��MJ��;���x����z
�z��ho��U��33&3����OFx(!�g�+u�Yc��:b��B�'�S�5QJZ �M]^X�/s�u��1�fL��!F��!��a��g�)������i�2A�+mGpN���4�:YKl.ex��<��Y��i��C�;>�5n�����R/�
�_��5��������2<����R����S��5+�FIn��$QV!�
p�*@J5�B|�k�@���nh�7��%�����������9���tn��E��*�ekvY�"�.w�����u�x�A/�a$��}�����`�q�G�K��prrG�?�#�5�E�3R/2�F/��GkF��P74<d��;�Z�*���n��L��l^��?����:x[vO�O?C.f>FV \��z!��+Fn`�p�T����j��F�}F�lB>?��Oh]X��F^)*���$V4���N�����+����a�;G��^�#B�v�-Z�e�lFO�9^� ^��:��oaGB��/,��rj+�����z���g��]�k!�MAl�	� ��Bo�6m�= �~�;�b��.�������O#j��f5lE������t��Q���+:B�}������%�"sA���fEm����c@���,����E`ea4��� ��x�A������I����78mp�-{�>"�Vn�=�f��N5�]�q[IH�����P\h�������c<�3}��&>,�wY�9�ke�����~y�/u�C���!��.'����s����m<tq ���~O���~�F[��������b���pw��B��)o:�!�-��e��'^y�o�@>�X;
I�>�8MA(�t�q��r2�`��K�@�]�<6���R�'s@�ya�8��j��w��6���eO�B�.#��T���G���i���� 	�S���g�����������D��1Q5��C�f$;���.v�A@(1�X������_7@Qo�%j���pX�Y�%?�x��`�
������X]����6q;xS�H<����U�v���2"���8�vC�P�)���!t~������[�S`(m��YT��F�`�K)�������Q���#g.<(���I����}����S�>!���H��\�cz�4G�&������)��8
�lz.(;�7������G��?(��.���W�����E�_�/����1�C��5�����x<{�{����W�c��j�6��w�.<e`�$�)o`iH�\��5��^��U��\Ekg����S��1@��l_��Ph7���T:�Z��g\�r�},���4i���o�F�?(�4�3,a]��>��]���(�=�]��DF�����Z�F����!|��4��6=����p�����O���\8����P���V��_��#	�����?f�vz��Vx��$h���q�3�S�B*�9��������������u�=��d���
�Z��}���~hg^D��������y������i{q&e��r���T!���;��w��M���>B�id�j����F�T�VqvI�ZGp ]b+#v��L(wD�����~�rI���������T��/�h���cL�����	��S�xSM�/��/��-\�2,h��YB�| N&n�%�h�����{>��|�1���B��cI��0�WF�������������Z#��������K������zg�6�-�Tv���T��C�!������� %8@
��J��t�E�+���K��}��n�����o^�MP�������_`�������J��Y�����==�_����W !�����"[���/�WK��.���#o��_���7��^U����8�{t��H�}����
�o��tV�?��������D������'�jCl��1G�[T�#��?�uGC���+��A�}(�����V�>��k���q*j�@�#��H������j8V�~pH%���������m��*J�#y/�����yO���?�MG������@
��y���?�����?���g��>����{�������� ��~.�����]q��2�z�Z�/V������)XIGW�gT�P���z(\�7��=���>w_�����=T�el� ���oNOP�V�pf��"��5S*��s�������j���$�Y�ZVB<��1�y�}���'���L*]����"�
��.���I�
'��A���Z���(�T��&���+C7��/�`(�Q��W���b��������C�����$������8]�
�]����ru�*�,��v���\�3�+��gkwE��3 @�
�:s��z��2~:�~\���[t��DF��"w�=k�Uw��s�������bq|��������*�L������
������G-�����GHT4R�"m�=A�=���Cw�*n���yE����q�BQ�n�Wd�#�TYc���������	��i�NZ��aQx���b�tEC6~0��1sE��|��%-�R��a������g�a�9r�
�]C����
�
���b`A���O����I�n��'g������-��������"���������g����8@�W6���T�7�b�2��?-���
F6��	{f�.h����#�EP�-L�K�~|�JY��Y� j��)�����������;^����Bz	W|�>����}�\T0��sq�7��:��X�AW�L|��U�Yi�C�����1���Q�!�`O_�m��~�YE|�5uK�t�r���@5rzQ�OQp���������n�F#U�-.��-,�pVY>�|�m��j_�o!��^���QZ�a���B����K"�D�Q�0��(�iR>N;�E�hL@n^�V��z�������V��g�`%40<���M�v�mW��U����P?&dE
?H��#Z_�>G���BI��W�tKFf��R,5edp�����<���7b��+P"X	$P����������������3���`xx	R.��
 �$~|��~�`�Y�{-�] B����z-�|�����#�U�PNX���W9�x��EWn�#��5�U�c��_��(h�C�/�#Ak��p[�}�{`�' ���W4�/��z|�T$������O
k�s&�je,qa��������G�u�`��-�s������\ev�VNJ�Cu�Qs�%���A����7�)E:�B��|Y�G����V5�eu:#,E��Fd2��y���G��v�A7y<� �5�	VA
�U'�����-���
������L�"��"�r9q���X��c]/*�Hb'����r&�M����wHVwS�����Z��KF��+�t���m�?>�g�#���n��C�r�oj��	��R�N�C�K�M���D������u��b_�`����������\x|/oz�K���� 2�����(:�d!ra���W���MPB2;2�=1�2����{`�"������������9-�}����e�!�pZ�������q���`���k�&<rZ���%�Fnp�c�E{���Mt;M��Q�B�$�s^��%o�i���m��R=����?'ZS�B�v�?�(�<�
�[��d���e���>�j����C������m������{�}������'<�>o1��}���X�3�>o�w�}�
�x��>�`w��� ����[��>Y�A,s�>o����dE�������$'f�}j�CH��v���q�}&N���O����>��y�����q���`����yM���i�����9*����vZ���w�����t�0�����b;�;��g�}�������������m�n�;iP��>�-���z[C���������4x���cO��?�$<���F���#'s��U�f�6�[����S	�1O��U{��5Dj����emAY��-��A�.��fs������;��<4oJH�n�����7���)o����A��]�\�_��O9v[�����W
��|q�n8������p}�����#��CK5l�8!��t4��������7��Q
��1�p}�5sg[���Ho
��f�Z%_�
;n&���2��$��G�}�[���n<�]��������(~W~�[��"���[��]�dx�FX�Q����~�>�����q&����e��S�v5��ue�6;b'���=��������=N���CW��M�X��H�������e�b�n�Y�^���Ub�/���������/��4�V�6KN�)���<���<�E�,����Y����r��OYt����8����,�o����E���k�M���_����6��O����-��&�����b���;G�mS=X�p5���5BN�.L�j��L?v.\*��W��T�lp��������a_��>���=u���6�8��(��������[���*��b�|����l���!�:7/�����?���rE�pXW������_�[���}t"�Y~y��sp=�c+�jW�
��VjJ���y����{�:x�?�����?��Y3v��x|y������_{���a���/����wg�EU�g���i�������c����H��?�A�x�zka(V�G��!��Z�I$;M�����b[7���s��XnK����e?��IW�=�_l����pc����������(s����.��,}����d�����E3c�r�_��-N�������FB���v��x8:tb.���!����,�q��x��(���0���A����`
���8�9�Q�
�>��f�������5��+T�wT�Z�T�%��wT��T�*�#hj��A���P�O7��]�Y�`7������t'7qn8�"�*=�-��J1<g���7/�����>#h��K*s
�������:����a�w�����;��$�V�s5sc}�������L���Yh�*�\��L�&���F�	�0E����<zj�`")'�	-:��������d�d�$C���]�0�������GT	:#Z����B"���fD�yE��4�_�8�M�v��(-�[h[�R��(�y
C�g��O��'���%��l���P���i3�/(N�)�,��%ME�2�	�Q�n���9�OgG{j���t�����^��#8cz��M	u��C��A���)��M���dtk����y��<������I�Q�.T�9�N���S��.����X %gHE���NA�N43���]-���c"G�x��U~�6������73�������J��?!�h�/����m��
��?�L�mr�1���+b�v��������C��SS>���l����>f;�u`8`��M�5C�H;��k%5�slNN��_Y�4�[��~�X���W��.1�;����������ag�����.��b�}�	�����e�0'�8��������f�������~lu����U>�z[��>�+��|&[}M~���fK��2��/�-SX���Ila�<�3<#l�
����K��������=�V[X6�j1�c�����$�r��U��Y���9��Y����t�y�?�����k�m� 84[���1�}�m��:�GNb��I���a�o�<�V_��v����v������y�W�8��j�^O2`*���M�0k��7��?�V[-��v�T��,�%��v��,�;�����k����9q
�'m���+�2_�:�.ye&
5�i��Y��o�
���5��)����I���7��&-��X�e�b{�������|;��|�mpOrh����8^����L[=�#'/�y�$������&�Sl�5��x�>�����o����=��9�~k�}��r���'�-�\3���l��)�i�oYSt�A7�5��VN4�@bh��o�C������2��+�FNO
O�)��F��,~�5���,1[��l4O�aoC5�i��P�{F�q�t���`
18���;/&�7���\�������p>V�����oMf(U?$�`���+��)~:�M��� ��/h��r���)?�����>�tx��Es�	e]A���R�:��)nj��uu��]���5���	,�u7O��|,�}I��\<��p�g9��r�0��������=l���^=���i��l�0+_1��&8D��-��p�#G?h�C���9!�������0�>�����G��������nh��;=�qdg�z8#��q=�������	��([q+����uxo��njh��?��yW��d��_wu�v�"���-�]d��:m���KC]�!9����g��PW{�M�d<��9Y��|G������$�Pi���3���yP��n�Oh
�~&�f%kTM�MM�����`�Z�����g%�:�����dt�,h�v
����_*��Q�=���b�]xN�|H����B�86s@?#5�R��"s�����5���-�����d&�M����%B�;�)�&#d���c��>�@/>Nk2����t�	�t���H�I��
Z��F���&�Ut�6N�@(�&��+��x"����3[�x��d��M��|:U�����Ev2`���T�zf�Q�
����|n
����Uz��U�>�?��U��I���dp��Qx�����Tt,E�,Pd�z,��~�������nsY�<{@p*H�.�O���K����=4��Y����DpK�q�j8��Qn��m���4'C��d������iF :e�
���+�]�:�oH��Af� ]�rj����0e�������&?=�[][\�E�'�ni�8����#D6���v��Pv�h��p����1h:c5;��7�� {	�m���H@������<��(������[���Mq��	���F�b���+D#�����i� E�����h8|]����p�p���7P�R_�9N�����PI#�a%��|��wS�}S���������|��w�:Feb�C5��.��;�������UyC���NV��
c��2�i(���P��m)���b+��M[�z1:B���Ms���!��s�����a�]�g4Y���e���Uq�&K>�2n���\�@�N�@~m����i�~A���d���`���kW1�~��������|�g��g��W����Nz��d)|=��|��G+�d��<��|��G����da�����x��< �%�����Q���~&� ��P�C��~���X[������V���bF����t}��0�s���bf�K��������+�3*�lv3�.��fd�����K�h�)�L�>���L�?	��B����EU�m��
�u��t���e^9�sr0�~EWn���x��/������<��e�\��s21�!�2Z^9�3r3�Y�2Z]���G�V���G�����;,����;uO����;'�]G-�[~���x��Z������qE��oy�s21�e�2������k�e|�'�?���X�v�%����v�6��(�Y���z�	�eA ,LS�A��["u��LA0	�e��GNh?m�1���M�)�*89�i569*�'#��8I>KIjskT������	��"g����D\o�D��FegB�Ej+�,q�Zl�Z�Ej���*5]���5Y��e.R[���y��Z`s��&�N����D�}.�t]%�CI.�����d��%�"Z��3��!����A�0L�b��&��%:G�GJb������]�\+bK���&c[
lH�I_��{����*q�~����O�!M����d�����K���
�����Q�;�ce�;Nl2�5G��^h"��8����);!��(p�y�P�2�tS�X���M�H(��`���Q���dl���h�tUN�����B���X<���'\�]��.���6�J��\�g���'L{�������MF�
���mD���M�z���{�n�[i���6;�e
���S�E8�X��;g��t;��w2���M�GW���q�c���Bx2�XA�,I�q�Bo2@���r�M���{�R`s��i�I�y�]E���"5��,�M��
l�R�����dd���i�a>��l5b~w�����t~�,�����������D�w��M�w�$�jY�I����z�X���JL���z���*���>]�����p�t��"���Bm2���������xa>A��:kz���y�s�.iNF*��CT��VF��Bq2���Q/	L3@2\.������:�U����H]��0�U��q�{q���I-�G�*�� c��b���U��!�5���h����!.��B���
����1xd�\-PG	�����	�\7#�n;R�9�am~�^��!R�����d�k��.Z�)�/Q�V���X4��E��\�,K��d����Q��#�;��d��"�C�t.��For@q2�X��zN�K�Q�M��W��������d�K��uSE!7���*����E�F����d���� uE'c�kT�.2��P����E��Nk���$�����h'Wg��N�%��0e��!�����dt2����e����H)r����
R����5����"����i=V�=��p/�������?B��	%��5s�/E�J�r�=������`���L�0CM���h���&� ������d�
�w�wY�W�@Ip2�P�s\�V�8Im28�����Mx���$8_,�9O����&�K��;7�Y66��dtK��Yr:�"�M������7�Yv3��d|���,;�6FR��.!��r������
�������tw�=���X��m�l�C�\j�P�1T :n�u�6*�����~�:-��y(	N�K|��G0��'�MG��c��w��A3sh���d�K��
f�(���yRb�p�B���Q��/��u�`����&��Dd����M�����%>�d�����[��v���j��s���2TA:���.�U��!�^7n%B�D�.�^�9f<���B�JRTc���������x����&�����5k���@�����W�R�O����P��G\��%mG��X������h�s��Hi�Yx]��a��
[ ,'��v�8M�(��D�vyG�1�H�`p5�A��		�R�7�j�\,��b-wd�����]�n����W���`KK��|74�%J[���_��A��`K�v���=����"��3���
� +d�6?M�)4�L��$%k���;e�F����-B��mz��0\,z&�"fE\>>��hyO����Q��������=���o`�����Gi�{�'��]�lh���cS7�O��m|vi�����^�y����
Z&<��B.���i�[����#
��h�v�Th�k��CY����hr}8���)
��A~LL"^4������L�bN����b�?<4�s{]��&8�h�#w������-�Dvm�������s^X�pB$*�R�z�Z�����i��{��n��.&I�H���'�Ni�~[UWo ��$��eD%����Xd��A,�?�8�E�l��������^]�%f�8m��}G�'��8�z�����I6zl`K����&��������fFN�q�"�k��B�:W��)���#9[��������`6�3d!Z+o�0BfcA�|�o�=�[����*8�B^q����c"^��6^�E�����N������U[R�Xl�
~���T7����u��,IcJ9C����Y�(3}f���d�;�/c����������������~x*Z�\do�x(�6�z�����s��2{�����v����f������W��0^`��g���/
��hq#QvoK2N>�/���h�8D���!-��;���Mk����G��D4��s%�%�����l��c}e��b�R�����H�9MRw�B_�q���=R]h����ANd�<!r���O��,v�x��g�N������us,����c�����I~C����[���u��������7#2$�|,��V��4w������Pg�_ka���c��(�4<���^O���;;�P�<�Z��5�%FZ*^��V��S1�|pn�������~tP�M����Yg��|K�C�y[`� yYJ���-�K�����@�CKR9y�S���������U�j�v8Y�9x��x(�4����W��/�\K�Xi��.{&��]9�o���;�mG��s@�>��0'�zn8Z O��n5(�����DAvn�v��C@`��B�a���J^��mw$t��nX�[��7&�ip�,���=�����k����:�!Y]�"���������\)���0pf-�����x��;�������M��l��w�VI0�$��^�j~ �z�?n� ns�4%�`�l��~n�_�Y�I�������c�g����m�D��?���q3����k�2n�>�S)�� �z��x�I`	R���}����������P^��gR�����#j���+xL�E�ZC��R����_Q��Yv��	������x��a��]��A��.���|���K[��m�;�?�R���R���Opm�
��7>����3�8���|�H�{�#R����+��@��FIWH�Q�T���OE����cu ���S�>�/�?��Ci�������z<�~������>+����?��r�����p�(�C�����8�&&H�x�
l�.��k^D��^���/��h����'���xc%�f��\��\����Z!��JU���;�v�����6��E�'O���dQx�|�=���;�'�h���zD�U�b��������C���3����z(��v�W=���G�|�����8=����r�����*�R���V/YN�#R��T����T���rz���t�O���G���e������2�$a������]q(:�A�s��mE.��
~"���|{>�pcr>ab�pM�n��mk��@�G����.
���a�|�W��~��c������~[�
�R=�1XU��}�c�;����>
$�mwg?�j����R���	/��� �%�����O.�C8�yv\}�//I�~��(��o��?��i�X�SB��	O����rt��$����>b���Uo�T�00�+x��V�E����/��u�p��\�0g�����8g�Po��t��<�O�3Y&����s����^���(�����Ml�H�|�������E �@E�����8��O��8;��#W�%4K�H�#� +CT��\�3BA��'�x�u��!��Aoc�e2���s�k�.Hb�j���W��ky��s��m�c�Sl5���C&�-���m�)&pG�90�8D�x+��_3G7
��q����DC8�Go#��s}�i`m!�����hs��r7���(���l�E\G��������<K��+����Az����k��<c��!�Y�u
�����\�JUe�� �����vE�B]�`Al2�%G�������s�B3��C�Y�P����i�������X��UWj����\� ��"��C��;Hxa�ih=%���oY�/�c���SS��[�!��6��r���ab��iPA��Q$�L�7�V\���vj�|-�9v�6�<e���\!�-�6�"#�G1� 6�a��)"�K!_�*��K�}dv�-7��XT�]����g��d�c;���oWw��kMIf�������b�rd�������7�
�]�B�~T�N�|[���kK��t�{�s{O?A�]�v��������>|�7���W��=�"<F�����x�&�(Y3�����������c��i�)7�|
A�fZ>O�%#~���Ugfv�mS�mY6��e�xu�����8������;i/���mwn
�l�=�a�9���<{�d'����zv����S%�j8^����z����R�!�\��/��FmZ�R�K�XX�������qF��`f ��]�Y�����.\�����1�6R\^����g
�4�x��i������Ez
�{�r�����r�'�>u	D�x�����P�1����H�eN;^��:��W.��Z�����
�]u�+��t�z�'k;�+Ck�;k� fK]B�k9A�!x*`�I����}��{VD�V���5�f���orr�$F���	QR�����J����}�at|����G}���������6���>�8�������������������)sjS������x�M���+���w@a�w& ;��������P�c�\�r�q1�����yS�t��+	���3��'�d��K%��oa�QA�����g�����{�����s-aV��Za�Z��M��%�="�iQ>�-�T�������}��kJ��V_��k�^%���s��;nM�l��qs��W���}B�.��jp������Eu�����m�
��y;��z��`M�����i=��Ml���z��[����-�&/�1oi#g�)��%�|I.���34]n���Id�p��7�
��U;�=^(�
Q'����Q%y�
�@?Nd���P�{��9c���({�r	����W��]H6�`�WU6uN
��������<�'|S]%6�HA�a��
,�EIKY�]�luA���D�O��;ok�e?���/^F3���V�t�>��t�j�F��[��ry$j1R�1`�+��_kY���k�c��w���V�=1VQu��wXd	���?��NP�-f�c�hskZ����?������"�}�&���*���Ae
KQS�R�<��j�R��E��(*�2Y�}�\T�-�t�p�����1��9f�6t�6T��3�
���������#g������6���N����8"~��*f�>��li�Y[���)h����nc�+�*w�s���Fo?{���6�m{r��A�K��� ��[�j�\T��12o^��;IL���\������K1S�&���!=�;��t�@��FK��piQCNm2�$T�9(��C�Jo��b��
Z�C����Qu��j����5������h	Y2�~������G���5��ji��rC&a}���hC3�,�F�+R��p`����g��W�`��G��Qz:'\E��yF:�	�*
���O1��+�@!(�#/�����>�5K�gw(�=�`��P�Hb��||`g5��]q���Q����)Ow(��K���Dh�s��������� �{�F��?u���<�������.�K����W�N
L,�jN���A�:���C�s2.�,��k7d��O�g�E�:J���Q�&��q�N/�x9@��%���faK��Y�7���"OW�������+h|�R����C�VO�k���

�th1��9����V�Y5��2s����"���V��
n	�$��C�~��� ����b������H��E8�[���
���!|V�Y��no�.��8�/�h����g�#�4H#�����8���)i��R����R��:v�P7�\G��6�����24�5t��V��.����'�3#���/8T����\���7<3�F�`'l���S��cQlv����E�����,���� @��{���������|�����Y<@A�q���8]�rp8}�����a
�����R��t�����$o�Rq:��p�q��J��O,��x�L��v���:��j�V����x~,����Q�O����o.�enN��2���3^���wH���B��S�P�k35F����o0gkus�+L��r=Mb[yi�5��j��8+���|�(�������!��<*����Y&�Q9�`�m��`PP`Q�J��h�T�
��:@m�������m�jW�3
;��M��);����D`�'��H<i=���N�����p�9@��n�n��[�%�����6����%Y�'����W��p��W��s��� p��'�<������l�?N����y"�z��wv���-����Y"����A'������^"y�heD9Jd?G�cx4���3�}��<ma++en@���`F�:��%.�i%���(�K2��,�M���@�t����j������-���6��`����
n��SN��g�"N��W�HH�����X�e�/�����k��LY��;��#Y�*��G�������/�k�����������W�z{_A��TTc�1.!y�L�r�d[��k��g�"�W0`m��
�hTDk�S9���6g�1�~�:���0�?�-%�y�u�(q(��j�����n|��'��P��O�+��P+JO S�fk���������fn�Gh+��	�z\'�z������u�Z���>�Q������64�
.Y�������]KVt���j����M]��	}�3?�y{�+�mS�N�l)�?�yx)QmI����o>�*{?B�y]���+��
���)Is`��myF0+�;}����>B��+�#����T��q}�q�)0�$�w�P��2���8[�q�j�glM�!�N��~B��MM�����UmI� �L��hG�������4�k��{d��,�M��2(��"�JDA�k��iPC	�@����*=$<�t���E��?����I�q�ZCkA�
��i�����J��K�c�	���9eA���<����J�]�U�*�i
�R�q##������'��/��Tu�r�(S��4������S������T�����$TV@��M��SE�d��6?7��	u�L�'I�'AK�s����%+����!��c�?�n%Y��n��S3��A��#��
>�_�K7�-��$q��^.AG*h;��h����}�5:��)�sO��mv�J�b��;,��d���������������yY)��@� :R�6�k7Ei�2*��,}�m_p�����e9)��	��5�aZ���7]S��*�������vu���+6}�D�����m�h�\��������=���<����h�f{n���<��,��t����Z)��ib��.��NX�){����p�F�.M�g� 
��
CU��S����l����6��+	��������V*2�:���1��du ���iU�:��i��8������*���dq��.%�	ZN���pT�.!t�I���4�BM��R�B�(N��j�j��35�����A	�*?�Ou��]���da���_R�&�h�@T5E�n��5��z���h�k��������d��5\�����T�w�>:E���=��1�W�KD������C�p�s��o
��K�R,(�T+0�%YGF�k��j��x��������Q$z�(q��W��C�j��sL�-CO��Oo�/of�-�����Q��<TC"�������4�H�����$C�e[>�;�~J���W�a�d(oG�W2^������,��p�Y
yS��hW��{���[�-�I�Z?��D���Z�/e���G*���C�������5.*��=�i`���%
\�Fa8���^����/U��T�������*�J��������@��R��m��F��`Wh"�[������y���>Y-���i	/��o����f�F��|�������v�!x�4�y�_,���b.��#���WN�o���<�tE� �%BFt���PZ�2L}�Z��S�8�0�����*�X�s���
���Co���H�4��0�S�->w�������K\V]� �(����o-�9P[�H�7]���h�:�X�X!z*���z� P'y�
�_A� ��cM\�2FJ4�.�X�sWK]�����1���--�h����(';�R�d�
Rw�2D�A���x��(���#:_*��+#��s�r�"?��HiNE��������,n"#:�;y�&=������X���Q������H��$[7��������Y�����e�.w��Ml����Q�N���tumb�q�%P]���7�?y �����)^�
�@p?Lo�V�h�����N/Z�����u����I�iN�N����+�u�����(|��",A�}@LD�����ir����p�d����a&>$�]%���K���v��!�@��}H2��+�,@8h>���
p | Y�S0����w����p�}*P�^H:��4eX8 %8�4=W�Ry��	�����XP �9�d����T�y�S>������2A���3 �W Y���fB����,����IWSx����k�0� ]��)��;bd��;�*�F�����6�o|rl��x��g{�f���20A��<L�L��&�=fM��yI���> H��=�j�����0�^D:q�}�:a�g5'�Z����b& �.~8Y�<P��}��X���]�%���������������a�ejFx��?6�,��u��E���Z`�3�����Z��
�m#[X-��'Z��TB��P��k6��`�P��o�R��M��>A�q�hk+����Y�����[W�X��m~7��=�y��bO�o������BV��=�l����Y7��l�������6V��SuZ-^�y������WM��}���d����o�d���f��}��'��8mu�M�*}����m�������0I����)d5>99��0�<$=�i8C���:��W��<�[t)T$���vw
]N�+�����W�y�%���s�X����&�����NnE�|�fT��6�O����~�8��'�J���J��P�Wf�A���@����v(X-2�Y:)N�V�5��;U���s���B�aVRwh���(Q1���D��H%�5B���6Iw*HV�%�����
d�B�$�r���J�SA��D9���i������0GH�rY)�N�(�*�>4����7�*iT��������x��;�6
�����S	��������9��a���7�v�k�1:
����
8^H�3���kO;��wZ�s���X����������x���E�^ ��K�����pm�LI��GM��2u������-�������wF�2o��\���*]��jszp����d()CV�
0.�����;`�)�1�-;�W���-v����g��u'?���#�n�����{I�f��E��4MD���F��;=�@@����J����j�������{�,y��F�CV��G�(����1��f7F:�f�S]y:h����lM�t�0=��%"�5r����SD�F�$Lo1ea"�\����#R����bcc������lN\�"#�=�].�&���ta�������l�"�9rYB4dO��R�b���`���)���A�5�$~i�R�X�z7��������|8����L�pA����A)�\W\����)W��m7Y]uA���Q�N�#�����l�p%Ko$n	X9��xW���q"e��\{l�87y�s�d.`9BE��#T��`��I��U��#G�H�����g�,���8��~��"X����	[������W�z��k�cN�����)hO�~�/`#�0���_�\]~�D���i�z���`�����'L�������|����� ~W2`oIO�L��{������f�J�9��X"���������a��;�t� �A��G�9���foab�?0Eq$��� ����>
�����z�����d�\��Co�n���d\����U
�,'����4�����0��#_�0�����x�Ef������=���l0����u(X`����3i]L�b7��,0g�v�����s���hod���gc��:gp�iF�|A���-K5f���Sk>�$<f��t��Ra��;I����X*0#��9tE�c���]F�{p�:u�|[>Jh�y�}����e�G����y>b��b��<�F��(��v��,f���p���9?�
x��&�n�d�������H��<�~�P)�vn%��{<W[���6'����-����G�����ok-�PY+�c~8��S�LF�d]���=�I�
1��O��	�x���I�#�P+�~��\|\b��;�Y��"���R%��0�e"s�iB�2�!���}�4a�\dN>�Z/>M�/��O�u�O�p�i���O������	�3�NP�nB�~���|<L�>M�ok��>
��>M�oy2G��M�=�4�����4n���iXF0�u��.N�.�
]jk�K���iF���<�;������eZsc�;��+Z�2�Uo��g�����1������"�<"pg�=k�x4]w]C�o��(4}����7���mQ�.��M�q�%���X����@���6��&�X�_����. 
���b�%��r�/q��41b����a-�r�O
�]
'������X���
��Y��n��%�����
#u�v��-�j�5Y�������P��Q{���_���"���#���)!�q�������}^������g�C�}C����ySvOG=V���
��'�P�J]���@�X����j���������X�ENdW�.#�L��_��p��pm��c�&v��hXY�]�vy��
�J�"���n�n@��|����Eer�y��C�����=��)4�\�$��m:�c����s���Z���<(]����*O\�.Ix*�X�9B���]=��@Y�B�!��j'���c�Mg�,�H9�@�a�s ���s��%��W�<u��RL)���Zz�HO�*V,A�!�)��B������z&���97�R#eo�l��T��=�d��&D����#�%�������$�W87
���AZ���G@��/���-��)�e9��<�Ty�N�-=������e�s�n)�.h����~8��[6�Zo�K�B�M<����=B����(��pC�j'b�g�S�n'2����#�e'�
ZW;�G��N�tN��N����,�_a6e�m'V����N8����`U��D�I\�'vt@����D�d�y��3��x�l�e�)�V����y6�5&��VI:Z
7{b<
\![T��:f:B�7�y^������9jU����B�(z�K�R0#���2�Xo������G-<=j�IW��U��P�v���$5+����8 8���S�7����sF�<�����zB�����dZ�@^�bE�)jylZ?���/�L�f��(Ib����#o�mSg�k��:>����F�����i���P�Y�o�P[�
#�`�?���n�a��������Z��Z/�$ah�h[l;��#7��'�p�e37��3X�p����d b�+"<S�G����z�	�����p<��70Y���kX��x�����_��L���|�ffJ��[n�#^?J�D�8eg:����+U
��2 ��Uiu�6S�]O#�il�0�
2������z����(2S����X=D�����X�����ZY�\O����������w���<��e��<�c;%���a�,g�����yX+���y@c�e����<���6J���y@��h�,MW���;�yP�jc����@*���P+��3=c�~�G���q6 x�~,H�V�q6!h���X-]�lD���Y�X�_�lF{�����n�����2��x�����8�����:�C�h}��LE;�l��	�v��^���*���<�����o�]��y8o,0��#0���D��V�F���g��ya�����R�i��j1���rW�����l�z��G�W+����03.�S}��9�*�U�-�
����A��$�s�bYf�h.��L��/��G+;o��P!�6%�9T���A���s������x3EAd��S)O^���CN�
']�|E�lK��..��Es���F���+�mX;
XJ���,�D��n��]��}�u���zVf\��)�R�,�]S���o���+�|KI?��1?!�GG���?�1K���o1_]
�������#f|<{����B��0��7��>�'SP�X����	�>Q/���aa��6Qs�>!��z��O5���+dN�'�T�F���YP�	:��\*G�F���#����8�=f����n�Gr ����u��x����q{(��|�Z�#6��/x� �����n�� ^��Avm�?�������#���O4��+J���.�d�B������ikYM��EH������m�1+$�J��h����KH��JP��mB����	�Yi	JtT�,��:������ks13�
�YE
���B�x�����)v��}j����WC�Gl�Fk=j�g�����
&���
Yc��E�4���Y�
��k�o�<%]<H��\�msm�'��mV������,}���Z/���K\��{�I�3@��HB�\��az6������x<vT�Bz�K������?�����Us�����'�Dg��<�x�V���C����%�j���J{�V�)o�'����+%��������I�:�c�m�9�9���*��:�Y�"��"���e�m��i��<]k���YAx��B7��VD�	��,p�/��d3QU.����v���_\��;���lr������
m>0�)d��ZL,Cz|$���>a�5DK$vN]&�By�SM����C^7'T�E�;pN����1:�WAl�f��G f�����;=���������Q���AZ���$ou[8(
�v�����m�EO��
F��
�1P����<����7^w3���R�!�����5��j��q�]{Yy�W�	�?�c�Yh��q�T���LX�(<��+���<9��Z�iO3�@A�F�U��kQ
��I�"���<� ���a�P���:� �� \��NhQb�""��>dc��[�}dbQ��k�#�G��-���5� ��>������}��:`�w��*U��Sl��5li-%p�G7��T��A��\_��f�'4b�H!3�#��U�|=J�vmf�]�����f"&����l�e0��XH�<�
x�*�g���>aw���{���?���X�2P��+YH3�E��=_
�"4�o��B�#��-�#���GGbA�����H���#��399�
�����=�����Yc$/����HN�a�� ��/xc!��4�|�Q�W|1H0J�$%}�I*�G��:q�����7|��-AO�D��j�r� L�Z�����fN-yL��dJ�Q�����Y.�z��aF�N��Fo�d'��^k]"�Ee��������O��.�a`����E�BFgK������9�BZvj�0��3As�W�c��*w��t(]$� �^�J�r��$�T�?,���%V�n@w���H��M�=�]qt��E�X���P����s�]T�����z�����n��Yd9�S�N�dQ��p2�
��N�K���c��[E����d���c�
�v�����#�������|���E�B�(e�U~��2�x�G�s�Y`8�%�?<;���3���0����)�(z[�4':`$��n�,P�$]U��6UP\�e�]@k�9���h����D1�����@/%���R���wA���x�_��Cq�>
�'+Q1�V�t)F�9�M�mhJ��T�KV�4
-=���rrI*W��,0�dKR��fw���T.?�Y��R�6I��w,1	��1&>�K&�4���%�=��TZ|���X��l�4����8=���,C��
�{��x3��e��r�n9����MK2�0�y�v�&�������Y�c�J�h3�z���^�����*��"�A	��*�pI�2�������1$q�]�3,���E9W�������<,����B��+���(�e93[Y�t���(�#y���E��]���4q�j r/Un���wP�n1���{��!��[#$^o^���R��H����RF�:�����]x��Z
�H!��G&�O���C�����O����������,��3�V��,�9o����z��8q<�
��`[���2/��� ����x�i��U��W��K�zD�������u:�{p���������=����{�I�Z�T������J���D<�z�6���R�Q��`���
K�6,�]i:��;��-D����A�����[��Nv��)���]��M@^�:���<�����N%���������8����n������n��R�@K6�KW��6!��N�8&irM�y��1��L �]���*T�������C��,u�R��O���������pK����lK�����7�)Y���E�m{����Wapl�Ls�-m�y4��4$@CJ�^�+���=c������`�!�Fi_�U�!R��(���n��3��"��_�����]O{z�}Q�q�I��G���[������.���k~<�$�q�]aq����,[��v�AD�vV���UFt��r!��dO����\~�x@7���,��%jT��_�*Q��Nb���z#�h��1WM�F��Z�W�����c<�^���k���:�3����3�3�`�cGH���v�r.�Q��a�V�;VD=�z���QC�y�����e��en���l>�v���W�&t '&�����+�qQXEm����.�J.*����S�R�s���-�f'z@c�8���\unC�y�T�*:�U��m�������3\���F����s�4�<���B�+�|:����F�gO����J��pL8��u�>#����#;�{��7���e�\�N&5���m���m���z������� |����O�*:'cW��Z����0,��d��8�[�8P������~dt���{^NM1��,F��Hf8�!7�M
���)������B���+�����D��f���%���f���~����8jJ����6b't"S6���X��
Md.+^O������e?�{�+�L::f$u|I<9|�����'[=�'m�{&u,.C�E��Fw��������1����l�[��p�����!c�i���)O]{��=�PVDk����`��N��^r���\9��7>���]��ZS��cy88�0�Y��Q�X�- 6�Ls�����y�g��Te+7�k��(�	o�s��k�k��|�����������G���d�,�Np�8!���9h����3����S�'�g�W�c�]���Y(�L�rT����S�J������70��z��T���%����?�+�+Apc ��n�a���������x�x6g@�MV���;8y�����_�t��
*��o�CT�='�`�t��������Bh�bd�B�D�$��
�r�O�b�b/�}���G������kB1.���\��RKr�7��T���R-XY��I�X�4���u��^��3�HB��S���*�+�������>��f���+j��QUDjRV[���8Ib�TS�Zj�2�?��.��<{������V*������]V*S�#G)����=aoR�)������g�����}�v3�UW�#����u�3�lu����OY]x���=�U�?���T�2]��W<� Ui���=y����<u���@��xx���
e��CEE������;��s�����{�c?u�/����h���3,{��2�����o<�.�����x�4�K�\����p�����q2��)3��U!�n�4���N��n`��������Sz�`OQ�L�%U�B7�����l(����wHy�J{>��������nf��w�����������%������w�
�������$��n���yF������%����>]Be��0/�m�����$�W�i�.�<7�� �C����$8���b����R�������I����h�����/���aY�2���	y����	nXC)�8���R��L2���Sw2�P����%H��$H?N
�H��y
H�~�t)�:&' �zsJ�U/�YF��3B��tgA<K��-+C��pm5h��,���5��`�Y4�����e����-}\��5m}3z�"wy�?���"#�0���!Yb$���(c<��~:��1TE��<��A����aHz��M���A�*�cV)��K��=��UO��������t�D�PG�Q'�}�{�`�c��P��z9����ZP��P�>m���4������s@����KI��ZPw����d��1it������"�"��^���e��B���2�(��Z�0�v���"@Z��l-a�m��0}m�X.;%����C���b9��LR���a	���&���6��0�3I��A�w�C�3R������M��N������@�:/��O�-�C�>����y�L�%��~�Z.hN�onj�7H���p�nQ�n�}�ckVFn���}St7��A��qo7���]�����TP�����>C��6�/^]������x%�f������bzD�� O�gmN���s���5v��d���Fu�v���G���,g���%�#�e���af������4�����g��K�Q'>!|p�)��u"fwe�zS�
|�*O���+N����xG+bvmF(ou�p������+\��/OT"4f�=��/��bT]��;z�<��mSb
�>�f�R?YPu�K_�^q}8�E�#:U,�rH��+jxGZ��ma_����Pb����t��/�T����C�>��������4�=�����pE�6�9�]s���n�a�av����q!aM��C'g8�@���d�Y���Q�;�n�[IB�u����L�b�
%���36Xc�R@�8�
��m�` d=���/Q��#�,(;'N-�M���1Y�{F���#�R���hF�T�nn�l�sE�@���ZB�%QW{��z�r"L7����)��Z��gm��07<��I#�������Mym�"wkpiU2� ��I�� �����uO3��t�0��z��Wz*��~W��#����PY�4Bu\m��n,T��W������T@T�sW\�Cj.}
�1���3_�e��X��D[��A��:RU��4�*������/�<�5������r��R6��.(#9���F�.W�w���S�,-���u+h���\�z��[��+N��r�����5K���tO��~���,
D��l��_��Yl������X�K���#XkxI���e�:��F���A�4�I������=�gTI�Qh�q���r�/A~(�U����,�������y�S�����������b��);w���)=|V�P���\qS��J����OMqgh�+4n �����m}�u�3�&�����xpI��b��"R(�S��:���lA�Z<j��A���<
��P��%�����yc��J���b�jbA���gpoF}#V(�Xs��D���b���{�E���o��."��,�xg%���0$N&�aM�>da9���7 UT/�D\�
��*��_@�p�.X��|{(���k%�Rs�}'	#1���E
N����da���sr 4��RE�U���M+��:J=v��O;��������~��7D�xw��#���S|��DTVQ����qr�,�Z�.V�n�H:q
Ch;XIhfB�EZ�<x$�'�@�1�1K�9�?�{F����hW������7�4B�X�K#������4C�QIR�jbXd����-G���4��:�{����X�Jc��a��0Z��2��Qh��tr	$�����e���R���7����W��������_(�E�=���T��*�M�/){R��j��7���I��~�����[
�$��S�@]�P�.<�����K%���X�
��sy�;�q���8��vUCG
��$��*�@WVk��x'�~N�����-���ZV���U��e�&R�����j�*�z{D���U�:���)T_�p��#gqOy����8x�V��'�@
pR�Gv^������B��Z������S#����<��CO	������N�!����9������-��p�l\�N��s���NuO�56%��X�"@z8hb�������E���<�Yb���������Ub7����"�������)mW?	�����n����<���n�)yW	������)I�5�v�=��	�=Lh��	���q�'pXj���){�'�"���*�g{.�����Q��'d����M�3������	�'{B�~	�����zw��XY�]j90��ia��M�~]w+���'��_��eU\W/uU�~]?�`)��[�4��V
)B�
(!�G�������K���R�G�5����_�F\�Y���;
e�^�Jqepw��2B%�j��X�R�z����������v9n#i��s~����*��J$%J���Y�]�Sg������}���aJL%�(R&�|qw���$H�D�/������������%�������<�+�`����t[�5�'jp�
�c�m�fU�P��R3�1!`!}%�VPC��P�z���D�FA
y��C-��Qk3r����E�6f@L�za6m(%�=�m	�L}�@�k�����:��j�'�Oj�G�V��F���.u�#M2K��]��@�i���������nrLy�%�rQ����k�\^����G�-�:�������,��UR�������~a�.�O����i}��ty��EpJvw/^�}{:lw~�G���Re���/m�+�����]�k��{�^���x�O�����%c^����*)�M�����m�JGy��}��W�c���l&yt3I�?�F��
`��?��{�VE��\��Q]�X�����f����l��6��F7���5��qE�p�������%��x����J���3j�y,S�[V1OY���A�Wots�)�)� oU�?e�����g�A��
f�3�����m*xO���^���0��WU��N�w�-�����S�e�a|�
���Pe�yD��mD{�6M��9��wUc���cH,�#������u}���E�Y��d�zWW'�%�x�����O�A�zDf���~��XhR�������i+�w%{Q�������Q;�����N�����s��#���&H�����a,����[}���	mXc/�z�EN4�T�RZ:�
Cxv��U-���MXw^i�'���e��fa-�(;?�_���W��
�nh�F>�������GN��������� ��1-��W�aV)BYl�`s��=-�rq�@Kc�}G.k�g��y�4���������8=��qSH@�����A���8����jr?���OZ��S�#��\q��4�������~�Y7�m���*�u����60���}3G�H��zS�}��fJE���)�����q9�mo.v�����P���8�q'
�����"9#W���`i"g��/��a.��`p�!'� i#aA	e#L������'�c1vH�����a�#{����
U��I����
�)g<#�F�fr����>��
���,����+����f�S�����?q�t�8��*��acQ�T���'����a���]�i�r�'�Hn����.
O0�_�6�y�4"����F���?��/�U�������C�����\���2��K!�j��O
)L��>��������O��+���l,�-���wj��T�_ �
L��x��9vI��
t;�S���
�^��O�o�Z�~�����o�������|l���<���g����_�c���3H�r����Jy��
"��E���_� �,n-�Z�e'�6oC�����p��!Gu
0s�T��B��&���!#D
������$p`O�AW�^g]�3���?^R���/E� f��C�����k���t��b;�4"��M6v�3���&c��u�_�����;�k�#s���l�:�\����@�h�i�a	��u�C�����]v�]4���D�~��c=�x=up
�c����������bj�vs*���}�x@`r����a�I�O�0�cT=e��#�JyF�cFe��i<KT�0Q�����^J��sL����Z�����GK$�A�'
�[����a�#3�+?���,��I���������u�2:�7bkl�n^!�47�,�{u��a1�F�m10������
3oA��RN��f�J1O����}ap���8��+q�'�K&�2Q�N(:��z���@��R���TbN��]�
;�K�*A����) vN"��:�z^�4��T�#u�uaX�M;'�i�l���u��q�������:�2������@�2�����$�Z�E�Mpz(O
�1�'�)��c�<m�0r+Ok�p
����q���Y�%N��I:N��,�R��ID:��dz�g���:�%�����0���gouLJ����k���be�I�6@�x����vy���|�]�l��s���|�o�aK�4<hw���/��/����$I�$8��<KH���i�.W;1�$�g���]�fr�&_��^����tk��'��I���F��=�+�)�A(�no�� �
�����"��|�:�t1�8F��f�q#nt�x��=�o��w�q���7� ����@�v����9�h
���kd �: E�W��g`W���G>y���>���h�T��R,2�����'�d��&�nT�+rM�����z��t�$�ne$�H�HH�Q�
���E��/��at���`e\�����X����[<���oX)`�����}�a|X��a��/�E/���(2���gh�����FwE�<�����&���� ��C�x<�����[2tk2�����?��:#om@�x[G�����'*�{2��X��f����]�;B���+�a�8a_�#�X�1p��2���+�8��#[O�>��GxwkB���t�K�'?
3���s������r�k"_=�e3]��q�x���vx�l�O������*.}��hH��4��M����'�k���0�"����LA5����B\�}�����$�`�L4�Wi~�3�84��(�}��.|�xE�N��z��.z�s���p5VSj:%�)���G�����)�-b������6&-U'�-%���P�M����:�%2BS��.��������!��5�}�ZO�����<�^���6���k't��g=r�F�9T����M�������Ju���j ��f��b:|�<f�/z�U�4��g��U�CS9��;���hu+Et	EA|����G���	0�����;jx����Xyc6$<��XO�J��U�>�G��03�b�f��^Mw�[a:���<L��X�.Q��*�Z-������`���W�Z�\$���l[�y������}�������W��.�(�)h�����H@��K�s�+�$���a�p�P8�]���������4nB��6E�3�j-�$�����3�I����k�v7����)�|���q7��� �+�����<��8����i����t�L&l�X�&{z�vg�P���J��+���0�k�a����
3���*������BH���CE��FVx�E1������q��9��]�d��=eyp����WbJ>����H����q����������)����"q�XK}T�h�0����l�W�l#�R��kI��aAF[{��q5��U�F�4��E�4��,��~����-��{���-�]��/o���>/����_�evS�.���<������cT����w��0���Q}����.��C�N��M�W-`]����F`G���-o����<��ny?^�5!��o�p����R���Op�[����qM~��(�������{��0��^\�s����F�	[�o�xV���K��6�r5�7�;�����2�7|_�b�(��vA7u~I��9n�����|���A=�C��W����$����v�x������.O��euF��8��l��d�E�P��z�����<u{�.&��Q
1�Eep������U1eo�R��C=�������H�LC�kmC�t��_�nIy2�S-qy�U+d��u��u�)�����X:����)LQ��p+�����d�4�!������a�5��	���q�����w�3��R��2��^�}�V@�u$�z��^�?K���z�>��W�`'.N�$�������)���!�k���'����9�d�?��������^��g����Tuq1�-�
�V��O<�Gv�aN�8����H��q\.��x^������kp��)�������~��w0���/����N��������������X8>�4�m�x
t	���q��������S����t�.���+e��������3�:u^��+c��F�V��&6�9}�V�P���\t�\����d��A�������-1������$��uC���n�Sa3���X��|H����F����5a/�1Ea%e������k�UeR�����M����3p^�xI�f�	6G�P�Vfyw�/���O�Kz.W3p��H �8(��i����
������!62_����w����l}��@
���NI��%	k���K�:qkuB���F��/�K8�3JM�w ����w`M7=�i=��nl��Z����'���C��M���g��������:�'`/a����v[,������krYZQ�R6�|��X����D�
�.L���}�;G~����vl��L�+���.��qo6�[J6��]���}�Y[��:X�:���������pG����}�w�>����ix'��"`��z�������s[�w��(��pjP�?�`r�9Y��>�<�F����}�� ���:�&y$^����M�����-m�����{�=�q����w���Xjx
��K��)7�C��+�3q
�L,�:��~�]�t�3@���,4�yT^���]��=���9?S�\9���Vd���r�r��������JX)P&[��7U�y��'��:��#��DO���,�i�PN���8�e�N�\�� ����z�x
�s#���$a	r��"���l%Y@P���?�.,��>�����f�M��R���]H�b �|�#�� �b	x������W�{�E�z|OX���y�j8�����	r0�n����U>���C��Y�K�.�����
?�e]��p�mVo��7�\��j��8yr,T��!�W���`��s��Z�.�>��pd��n��i`.�^h`J9r*����RL5�Y�v���I��������|-%-��p��;�p~Q������s�&���uA��`��M���i	H����u6f�M��K���-Z��bn�Tv��2��2Y��w���U���z�%����o�|�&P��\F[�����U��>�8*~��o��3�o�������������`��3�`��k%�>|������.�}m@�D�h��>��e�:"7u��:b����:]H�b63�(�������X[kd�8��z�q!)AC������M_���46Lu������8$B_�k�%@� ��w�X��B�E$�_����J��Q:
�����O�__�L�0�1?�X��s�r���L&A,d�z0z��P/�QpK3h�1�d�0��I�{��x��^�
�S���	���Ij�Hx5)�E&c���i��:y���$$�h���#5�O9VI�J��|���k�n�C��\�1d���p�s�A{��xD��k
�(�V��hbu��o�i�hb|��:g�U�S��gy�-*?
���������z!�����D����P�3�a*���G����2Uu��VC��N�����OYC`���g��^~��[r	����V�����
���cN���J�����<�F���s6j.��Y<HA�N��0��xP:����5��*���CtxV�l���>�����dI�"�Z�z�}���)P��+��}&O�}fa��.9P|h=^4-���O��>)���r�51tL����-��}�������=��}	-�%]�b{V�Ki�cu���m3��U�s)��<���?<aK%>G� ���P�LC�����'8��G�p9�zO�b�'A��v%�Q����S���� ^`�7m�����m����[��r��4�,������s�S��H���R���&����G������%-�e�d�j��U�+aOS���xZ�+���Tm�5��"��U�{�����;u!�n�O��>
�Z�B.E���4��>�/�1�_Vp�h���#8�D(:R)�7A��R���iJ��uW���+*d�t�6n� ����Du'��������k�t�MH��t�d���p�J��3gM��A�J�)o0�S~}�F��$/�S15J������M@�Of��Y�����k�,d����+^��s�'�)�������0�����1�����D�|�V��,yZ�ewZ�%?S����XXK~J�rJLyv�+�0(KXY�m���[����:���t��@IU���	����Y�����m�-_d�6�>��Hb��+����M�~�g��n/�����R��7�-\��-�]�XN��R^��C���I������%W/"�?�����y�^��d�:��(��0'������7�_X�%t-k�<*d.�����m�	�eW��`jo(s��f���,r�Xc��U���������S=�T�������w���\��Y�u���Gk�I.`��:&��'A��\"~�v�g�@��sOV�N�'����JW������}��;���'k�Qt�#b��|7���=����:v\����������^���]���x92f!�������{�j�QP[���R*xn��A��<I�VA[�<�B��7�l�p�1
�V����3���	����}����B�P�qf* &��N�)|����S���X���G�N�&x<��_0��C�������W(���;na�#,�0�&����+���0
N�]s7��T�����)1(X�Wx.7rMS��@r��a4M���mt�	�p/*	'*Z2N�����x���|�K����):9�M����w#�sy��A�Q�w{�e���a�rX�/��2�v�@o\n�x|���������DR�8�n��� �@�Ow������5�.�F��$����������5�$��]�:�y:D=%1����ctw�Y~z8{b-�qB�o������zr�nI���.�/�G�:��7�p����E�:Z'=>���3Z��MZ�\$i��~��T�Kp7�0{cL���$���������������0������l~9��I�I�(������kJU8p�8���9b�����ki����#�*��v�Yn����������[S*^�*��|x�B�8����48�%�x7�h��\$E�(����r����.�>�a��� �����:��5��*���?��w�*M�C�x��M���\��?||�g��)�\$x<;7�O���+h}v���.r- y��]���+{�6qm�O�c��($�=�
���-<p@a��o�����H��x7op
��,�����c������E�H���6q��Y�+��5����@+��*��	P�����Qf�sX7��S�����u��<Z���p��P�3�L���+D�?|��I��V2q0�'���zpZ��dN0
l
�M�����n�Kv63%G�i���=[�c��������Z������6������������>�]����^��&_O����A��KNO:�[k�k���V|��q���VB��Q�?YH��~_��\[���z�?����� =D�{��7��9x��{[|���9��Z��dD��/�I��Dr���x���WS������5����"&����:�P 2>]�!����4.BH�r'-B~�`�����H�s�S��}�K`>�I�������'O�P��YWkt�TJ���5<*�p���7C���t�)
5&�4���-����&�0�$���x�<(H�'��[�GF1�kw��n,f\�N'�����'G��A#��H�E������� ?�1��h���r3��(�B2��:����TM6��3�������]%5��Fs�6�R�Jk�������H��#��U����~���4FVid��d%p�wA����:�
>�
�Hi�l=d�e�����8�:����{n&�BnF�Bn��##�Y������}�}�z��p�c�L0�F~�ip��L�v#��cf"��c�hh��'r!wdH��q��"+��;��P��Q�e�>��������������m�"[��$�8IHyH$m��s<9�.B�>�5Bt_��8	�f*l�����]���[k>��L��pQ�� E��1}�;�ir>1���b�y��[efHnbNs����0��/��0�hm.��1�a�n���0��x�\N���]
��'� ���M4��|~�iv�Uc&���X�+uQ�P3��M�LBj�@�OS�v�3Qm\�&n�u_f=�F��	8����J�M,U�}�]J(o%�J��gkM�zjL�g�Zs��d���%j��J�t|�'�YM	^���O`�xz|Z�D�����|6�[O������ �/���5��_�v_�A6�����$��JYjM	��(�'��������p�����>�"&������c�F���*�����9��D�S7+�G�,F��06a#�V�\��]���}�D��xB|>���H%[��A3)�
����K��U���]mPv3\��������?�x���Y�~^b:�k�/�d
?W���3�8�_�SgD����@�Ls��k�O�s����~���t�Ue�Z�� �>���72j�@��@9��~F�.��p_!����f=	��h*=0N�k�wQ*�����#n#�� ��-[��?>eyp�����T�d�pEc&�6=G�>��0���]US�a��q��� �j{�,�
|�n_�d�
���;X��$�xj B:������A����p8��n���������	,��-�����
`��Y���"m���[��"����$
"%���0�����wF�{jC��,(dt��l=F���W
�E�gK7(i\
U��yO<O"��=����X��x�L �d�}p������-����G��	�h+��tGLf&�����x�����������9O; 
�s&�q{�"��R�5&���b.o�aWF�||[�_y]�A�%���0�����Z�gr���Y8^�N��*t�x���������(��)/�2����SpI�=2YU���'�p�.������>���Y�����9����9�������f;?�����G��V*��l�����%_�>J���Z������e;9s�i�})��>����0A�H�������A����J���\�7���!���Lzbo_Rx<I������{�������s���_�A��IU�D��?|x���[���/������~���A��a./��O���1������������@s���Rto�?|�����O��o����������j��6�!
�x��G���k��b
�
�]>E���Gh��>����7?uP�4R���T�#4���r�R��K����#���w?Y�����:��M�&h2E�-F ���1��g�����T������~�������nC������z��$N|n����W������?X_�������l�6^�]r��*�Z�j��WM���<����#%2�0�F�4�+��r�T�?�����JG:A2S�SR1�\�j�z�t��J��lr�-��	M������a���4�VJi���D��e5�V2�k���J��M�X!>S��=�����D)+��&��\}�&?���t��Z����	���>P���������2o�o�)Qk���L����+�3�os8�eZ��;Z
���q|��Z����B�}����u��M>;j�9~���z#����wI�x�Q;l~J�8�cr���s�]NN!����x��#e�l-p���L�]�?��� 7��%�q��z�r>4�`g��H��d=X����'"=�� �&�~�����Jj��=�eY��3%�Q����I&`��=g9<�����U�����2�/�>�Mg��o!��b[Ydq!��%����-r�h�JV�kB����z��w����|QXq��v�F�+w^A������1%����x-{���S�5@�����[����b	;n�Y�C�R��@+
��@-�c���yz�wD��u�YpG�����N|��w���E=�o���]���eA&�(�@����5OB+��������a�k�Q5p����zM.Cm�a�*l�������<�l!w�z���|�"7��!����N��"N�Fhi~*����Z�y��[9i.���Z�<}"�H��9l��v����^��t,���T�����r��2����aul/��a%3���*9�����x�u�yT�o��[��_�K��I��lbg�[�wJ�C'vq�h4�� gb��+
�&j������� �M�&�G��7��x�zb�8K���n�|��}�x*Z��������J��V���2L�f��A�N;�u
.h���tr���7U��.�9�� �S�vU�;����O�����;����s�!Gq��s���
��A.���?b��}��"�]�m�y���q�?�������-/c�u��OQ������}���H'p���5p������^� �:�C	��6+�$���a�d��A�\2��%+�w�^.�H���bfy�w��\��;���tL���
�I���_8�V�i6@�,�M�cg A��F�Z��E��������}$v]n�������25��B8u��������v�����zI&i���A.yv�<��ag��GO�J��pr
���:�pXfR����R���OB�L5B�l��Q��W�R:c�5O��|b�� Py�9)	 uw$&�������\!b!"=����j'�W�RlNt����q	�g4�~T���I�i��\J+��/2����`b���y�@s�t�.(����t�vQ��l.����Nb�vQ�R>Mk��!�9Eo#G�4��I�����g���1���O�:Z�+�Z�j����]�-�]N�!P]E.�f��c���W�xu�U��v�m�R��1���X�|�X���l��y0	G��1�{a����LQ%��2T$0]��[� ��
���r[��^�>Q�S���`���5��{�V��C�GT�N�p�sf���K�������]��"	 �[��p������c�� ����!`�R)�;O�Io�^o�p�w�@���3�0c]O.�R�����$������4����8�M���6D��	�"��h��2��^���5��Y������>��S�����@���%X������b��0� ���(�	��VsG�k�5��R�0����zyLo�w�*=\3��$��������fQ�:Wt]�(�Y��e��F�c��D�$����e8�)
v!�@{��������B���MF<�U��up&���&K�sh[+��Xha���C<\�M�S���V/OH�����goQ>3b�hL�������v��+3��n������9)���
��/A�t��;dt�D�B�1�4�i�<�4�X��Y��fi��o���a4�����}��**+����_4kgC2A<?�[�����(�������	�#?=�����Z�r1,��>Z
W�l��u�
��I��6��R��0�U
=��d�/!��QE�	+y���Q�H��>N�.���'����Zy�X�S�o��;��)���EF�F*�gN���)=��=��L����I'@fO���=H�A^)�������td�T����p/��Q{X���P�/{��;u���?s���������6�m3M��b�#'��U�=�s��]�x��z�h��f�~���
D��fzB$Vru��~[�a���e
�)h����Yl���a~w��V������|��\��TO3�����j��S"g���3$��<r��x�:6&6��X�3���[$�P��F�G��I{��������Q�%E+�4�Q���#d������/iiXj#���j��Y��>s%��o����m�PR������L_E��$O��V$�K����Xi}��\�Xp=	wM�k����n0)_�N��%o�����7O�����}+�E~�?���n{s�}
���2���ncJ-�@��dH2���)H!�6��y��S~g��Y�R�����{60	�=y��� RO����r��%X�:�x�����R�����-�7x��y�;�������e�����n\�=�����������j'X��$M��J�E�7OVw�=�g���w�4���p��!����x�U+�*N���P,_� ���n2d5#`����}��#�8^�\6~����c^e�O4�
��X��jm�]�j�������7�{1X�����8�@1���#Ur��<�$����hM�;�5��W������c���?��\I���._���e<I�����<vl�e���"�Q*b�L��!����>�!��;���q�����^������5��hB7�>"c����G��Cn����q�V�#_q���a�]{�set��'�B��!��BF�5�P((	��$�����f�&��=3u�-2gS4����c�ixy������\���w�jP�G�4s~>'y�/�&$t����pP����p�;�^�6'��������Sw^w`����U���9I�dV�|����Q}k��d��N�5l�T
{�����Y�:i�D��a<���M�J�o���Eo{�h!����dYx=]�3�w\�������-\�r{�:�x��$��kT��2s�f�y&
�����j���\&?���r�SZ���%::��n��(����^Y_Yk��*���5
�i�Z�k����
�5�8��F{�J�Nw��������{���Yx!38�4�a������� �#4���_�-��6�����S�0�m���kdJ��S����(pQ���7.Z�����(v�������G���?i)yE��5��t���l&e���v%������*�y(��9QZ
�<��1�y��W1������]{�5�;�z8�2���#�;�y�R
c�����k���Z����>O�fec��8��u�p7`��8�^��G�����&��#�TK�4��������E��������9h
��4}�Su�d4��<JK�T��RQ>[��6 }����|n#X���QU��u��mF��rq����b���\�i�!����b���?�!<bt�t_���%������%�6��'��2.�R\t�C����h=�������?�h���#*f�3
���5d>~�Gs6�e\�M����=���t�zB���w��o9���"�A�����$H�j([\Y����G���xt��4H���I�D����
��n�^�+l����(d"V��!���$���
R`��,����7����Yx2{po���i�	?'"J��w*&�0>V�QO4dD�'�B��1�)�P9��,���Y���d6���qW��!7�gL=�E�i`E5i����On�,����1���n���yH!e��H��������+3}�����|�$ia
�)&�j�C��bDamJ���p�F$-��
�V�s@�&� �*����36��K=�io<�4���t&��O�%l`�0.=���sKk�?�AlN�p�o��jNR�j������K�t������\.O�a,�9o�QjB�s�~a��;T�\
���w�����?}���}r������5j/��S\��R���r�;wf��^C%�����4Wu������x��F��2���?_0��c�������D�O����_����l�	�=���yz��b���� �J�i�1��m70��A��Q���3L������|���37�b�E��pO���C��~|7�E�$Z���D�����*�������7�~���{�]*|w�pM���p�o~��1z��1E�C�s�$W�)��US~)���7?|�`�I�Y��X_���{����N����������z�������������:�w�>������o�����)�\2�<��^x\���K�r���Rt\P1������\O���}�
x\Z]`����q���~��~%��J�W���Rf�iE�,��k����G�C7�M�Ji������]��{�9�
�e�gZG�3B�@GJ��^���$@��"a�\��:I�����\��;	�a�9�+�bo�1T���:�2X 
��h�`]5TD��)�M�P����yY������������D�`S�ex�9
7�rhAC��{���\
5:���=g8���q��FH;�S�t����6��i�3���a��S���E�U���P���6������Dl�	H�M:G������FNfm���P���1�������t,m����la�
�@���yVb�
\�%�B�H�`3�s��D��ttm���%�):�$�`3/v�M���2"����
6���� �#Ok/m@:�6(V`&�@���J�M0m@��[O�
6%b�N@B<�6��5��4bw	����>Y��7v�C4��g���@��H�4+$����5�I���J���Kk��&�or%���u��T��ab;b���lS����$Xw~��!������aP���������x�P��y����3n�ZI����������|j�o����� �M�N:�XI&�������
C#�^���x�DI���r�Ff�Gj��pw{�~K}r��M��;�)���Lh��T�9]��uT��I;�n07���r?���:�����d���9��$���	�<�eo��{��{��i�����>x�h�M�d�f� ��A~N�`?�Z�	s9�=�=�k�U�N�g`h@r���I���R�b�p��ak����MJW1������iay>AN�)I��rb:(�-�ALKQ�0���Nq���wI^��t4�RRe�t-��WSK������Md��.��=��2S��f24��(\���D�����G�����9ytP\�P�u���1���%g~e��g�S1�/&�������;���HQ3�z�I��R��������~dq)����|n�up�P���?��������;����b��xb?z�%���ZL��bLh_�����z���MnJ�)1�B���OA~�,h�c����3�s�!6�cj	�\��5z�����������s�bL�"�]���dx�QW;�
���7��9�L�\�lo���X{��?��p�\�~s
�3f����4��_l�=e�Ar�����9�=2�@ �g���]�&�k��������S������!d%�A�+a�A����m���$��I���'Ez�"�_+z�����?����|(Vaw�E�!1Fm.�����-���PIy�HA���V�?,*��[~��f����K0$��9"����F](<
�e?z=��p��4q��	�P��v�FE�*��P(�����T
�y���\��j���;E:E(���;�q���[�m99N�_)gw!�EV�f������X�5��zG���	�����:-|;���Yd�H���Q�W=L��B�(i��k�Lu�*w1���u$'_O�B-��9�R����,.<��-��%��2q�UJ��c���0N:�^,M�2��x�I����*z�)/����^\����4�"��))�2������O������ �<������:;QI������1���RBO��'���Z^,�����4|�m����m"��������l�u���/��w�X*a[������[���L4�m��Z����l�-���/�j��Z����j�����/���n%R�3����v�NI����\P60���k<�$K��K��3�-�l�����J��-5��������v�UHXMKI	��|��_� ~��j+�wU�oo�4���z�X�3\��_G=],AQG�?W
aYS�
�����}��O���:�X�J�G�������!:(�VJ�'�]�U>V5w���)z�������!��J������
\�+Pi�b#b��k(d�n���y!�������� c�(| I���W��gs�$S�mwLF6�B�ZDo�R��bZ�ps�T�U�r��[<�32����$�+�AD�
��F�Y�bH��0n��N5�tX��b���%]K|��{>:6���U�xC��0�������-#��%�������q�c �:q?�(��%g�(t�*�T���fh���w���tW��������M���"���#����#|����'L�,a���]'q����M��3)c�[D���cE8T"�q��8^!{����n4�N�i��Y���}I��J ���h�� �rRQA���j��r�FY��@G����I
Q�Y-*���hmx�B.u������[�6K�F=R��
OX�"wG��c����tGJ���^���T`��������m{)L�Om�Y){�,���=gy�"[��0�6��I�}�����IA����Q�����I�5(���A��
X��5��r{5�*=&���e��e�]&��w���v�2kI����y�^�I���	�F"g-@����?)������w��_�$'e�:s�	�0?~b�F���e���J3�4�����[_:o�2����G��5�z���� f����$1 ��	��=[\2�����`��,��"?Mc�1��x�y����l�|J���t�����>a���@P����-�<��3���2���F��6`�D�;+E��/4I���������6D"�S7�����B;B�y��(���I�!
�+���� g�	t�Q��m��E:n+H�c�}��);�p?�[��g��u��@�(��?#�W���0�1Ge@�o'[ZG1g�^�,~�������-��o�~��Ka&����������<��#}�5P9 ��I�)����jo5�����!��W�,�+2�����������#h8?A\�6O����*Fg\�~���3������_qG���5�a���q��0w����Os��S��9�N�UB�������7��n�KD�[�,�y��QW>��N.�������_�X,�X�
6N4�`�>���;�����S!@�m��n
dY|M�d��g�k-SB�;5�����)��[�*���j�>�T65��6R�/��h��SOB�N[����A�sL������'�z���~{���_�n(����0�
g��N�)�����ynTJ���J����jj)z�0��P�F���o
��{�lD�p�����t���a����N�+�{0�/z�l���J���}�TQ<h&wmB���� R����gS�]w~vG�D�5�#@.�<��e&l��Sgf�[����V9,�X�E�RRke��vq:�,tD�����Ay��=�p����UQ4���/\�b��eC���;�g���'c�|�4��G��1�`m�������*�2�4�}����n�Pu����5�a����:8�'��H+>����V��5^NI��/���$�m�9a����A�1\6�x�x������'��������M�!������P�c���*���ig���= `��1ij-�dxk+
0���;N��������0�u�0��y4a=������A�	������j�'�0���2���1�vJ�-��d��A�#��{f?&q~��S�)�;��y��&F�x��MI������*�B^��,)�*r�qV�BB�� x��8�d��k��q${�IW1��je�����'u2��1_�s,j	n[<���Ja�S��X��Qv�J����v!U/�D�=g��'�G��co�f�C���:V�8�I%�y0���<�C,��f��`�p&�1K���O����tUB��MEe��U�"<��{�����K[��T����n�i���&�AaN����B�+&2��G����q�0��m���4�kZ8�	�5!a�'D�J��tW1Z>r
����$�w�n��]��eK�����y�^����~����a&��'p��(5.
�����[�K(�0x��@�ej�g�D+4����M9�15��^���c�o�x&��<�9���6�k�&3�F9$����N���l7���eu
`v���������]0cCn��������|o��&Ir���o���0�oGa���/�������;Z���J�F�<ax@/F���}C�x25��U����?]�/\��=`�:�zg�V����3�4����y��L9�9�#?�\���_�O6�_����3H=~L����>��}%W�Z#����)�=eyp�l�j�����{2��-N~�,��������X��Z��T�����%1df�A��
�*$b
����rR�y��L��or��}��7Z����X�W�.�2)f�K��LY�����:|xE���S��&�a/��#uD��A�4��4VE�sf2[Zr
R?O�i�5H�1�/�`��PN�/�S��{��6���&����i��WM�����"� ��}7
�&�D�9$����d�w�T:�B�9E�Z�j6���K��.8E�(P�����c�RH�&U����T�B�9O.����y��jY/�����U��vw��'&������	���EF�e�E�-kqQ3+�������Y��8�� ��Bq��lOkL�����<;��I w~�^2	�6>�`��+_�L��_`�6������r�E��������� e�P���N V�s�����$�Lyj��.�������%P�!qa�'�>�����d���.E���TP�q�.&�T�E���9�1�J{����1J�i�T���������^d[�n@xe+3�F�Q:e����D0��%����N%����j��<E6cx������2�Q<������8Tn������1+�����*.�&$�EE�*���	E��?��}�H���b7��O���������#8�A��{4�h����R�T�t�Fv�������&9L���FdP�K!�/X�jl�|5�1	w�������?��� ����d�/����5���6�qw���`��H�;��azy�#�B�)e|���e���]�uR��/��E��B4	�/(b���=�y�H���1����l� �T�(�Z���Xa��Y;��I�%�9����  �J�;B����� �be�sh���Qd���"S{Md[�[�n�B4�f�t�$���+3��W 1���0[������480e�Y/��=#�VT"����/���X�v_Y_�i_V�����C+������X�qG[�Z�����#��Eh3�q����>3���A��#��W�=��A�>`�e��7�!d&
�"�X���^�4��g��)p`JK��EP3��� i#5���!���8=E������!&B�����-3�����-������
]���ZO�3��"DT�6�"�MQ2�w��}�X�h���=S0�X�wi�e����3A����8�y�7�\�"�?�����L��ilx:6:�iS�CAH�9����H�6�3��S��/���tC:h��d�sL��Ie�? �q
��d�[�)TrM�gDN�>�z
��]U����Z����?�h��	���##��~�.E���� \�<�)�^���r��N7kC&�����$��JbcFb�9����|����P�h�l�B�+y�;*�>7�hTd.&"����l�M7<�Fd�3q)G�Gbb�&C&E���cRKa@$f8�Ofd6�2�0�	�L��lM���N����L�_�34�[�Zh��&��&��N�Bc���-g���dZ���q����~>?~���'�6ga:�@2�/���,�N�5��e�1]�@�<O��
����2O�y�_w���<'��i�M<��<5��i�MD�����4�&&��2O�I'1�B����B�g�4�2�B��
u���~�P�j��D�l���~��L�Pn"c�P�	?��L�Pnbb�&��!����Lz�X���t�&^&����?�B���L��i��r7�~����p��f�,��6�D��v�����!0������t3���0\"v�	���K2�%��a3��Y�5.�1bv����2�=${���_��|�'<��_a�l�����9�������G
��t�s�s�i��a���]����/�ZY!����U���T�s��Y�u�<V|��O���5������s$*�igD�I���z��|�C�p)k3�M63�{?�[��>��^�K������a�-��<&c����}���n���g��m����
^���;}�?[�78BFc����S�~-���?s����E��:nJ{��dRP�)~��I�{�7���~m�������{���K�$U������dz��8A�w�n�������	��W�{}{�$����)��_��i�ca��R��<aD!(;
}����������0����a9��a�����m�a2���������n��4�>��hu6���,�3]������p�d[������?�I�	���1V<��I�����3V<0���s8���:�xXf?n�B��D>�x�f�^9�"�������8/�	rS�3X���,���~�&[���)��f���FQ������#�H�@����HA����q���8��^*C�s\�*��a�/{�x��.�����3��h$V�$�w�K#��I��j�M���l������|s���nEd���#��Q�h����0�7I~�>dx#�$A��|If����r�N7	IH��
zS3�N
�}p
�����x��K���?�?�+���__�?����=�k�c��>=}�d������-U[i����)M�g��{q��2[�������l}%�����������e�*}��0sUf�C�����_
�E�+u>V�
�]��������m��:�rF��--�s�O�Y~-4��m�[�^��d!�}�����y������;�^sw#�p�]pj�������,c�@�����Ir���5�8��Ft���$@Z|N�}���~���)!�sr���uy���1�����^o����&��*t�%�5��,Z������u��n�������u){��������x��o������p��%B<��G� �c�]W���+��Z�x�@���������R��qwK���&�09N���7
��L��������kr��hS��i���3;i���^5�wW{�@)��7�za�j��}\k�j3��CT6
���]��c����k��)���_��~���WxC'��u5����W]����
0^[DX�C���dch���dh`Wk[��������cK����?�A��Y*�(!����46KUrFa���C��H���M����$���ut9 j������OB���%V-;�RA	jT��\��S`���P���\�'�<�����j�W%F+wm��fz�.��*���Qa�T"����3�K�
��G�O.v0J[Ai\������a0��������g]����L�)/\�4yR`�rJ9x2��(��m��(�����
_�3c��'�R������qv,bW�&�*�����u��t�^�m������w~�e��?��4���\�e���+��K�Z�j.�_�I�'������Uv�@��o�����g{�������)� �O�}yg���/�p?^�]z���������H
_�����a�
��]�2�[��S|9kmk��&5�!g������o��6��������R`U��jZ}5�0o��s�k�w��8�����
_'����7������5��{g�{�a�
5|K���T�����X�4|ck��Y��������p��������R`U��jZ��?m����9�5���b�t
�@~�����Z�������n��^�����a�
5|K���T��_�����[{|�Z
_�q��.8�S��z)�;W�n�3Mko��M���{���{5�4]�_������>#5���u�����;8w7�3����n���4YI����(liz��u��������9��N�nr�������Y�c�����n�1��6�����'�B�@w7�X�@����0D�_V�t����Y�BMO�����Z�Z�u(���j�w��h�i�@K�O�]3#����t��4���5j>����"y��UE��t6�j�
�G��z�r]�v5_����6��r����p�����m���lSf�jsu��z�T$;Bs����J��V�Q����X���wIt>��,�E�h\�uU�^7Oy�Yi��9L�=aA����b��u
�;�����v�Q&wh����;��LK����\'t)z��Z1Or?��a���s�9�$��|��`��P����0����%q��Ks�i��c7eE��
)����A�co~�F���	�]��p���M�
����"�`���a`����^��/�������/^�����v^+I1��c;����l`G�O�N*��!�>��W,Q�:kO�$�=���
�\��z	�����]����sg�|�'~���Qbh��c�V��&*���R���*�bB�hg����I!a������gfD���5C���=��z���;"z#��wI��Nmt�=�������x�m�O�\�	<;c�7��U#_��_h�m)v0Ltd��<e����+0uJ��a�*L}u��9F}�?�����I:��e������jQw�&:�'���]rE�E)w0�U��9�E����P�EIHQ�E��)*�F�)�w�5��Zt�8�0Uq8�A��P��;���4����G�;(�=E@��w"^�$��9�^���6����V�Zcv5��g�����mJU+r]V��v���d�*x0T������90��k�)�B�`�+�quj��b���Y���V�� �
�(��{E�`�n
������J����]E�wS)u0�M������B�@�Kn����h��VY�J3��-���V��e��X���`A�@������$.�JX�Q���h�u�f`EXR���x�K���S�R�t��nU�6�q��n����H�M��m���G�����2�;�wm�~�`�����-"�?����,�O�������g�X��k�~9��'���������|C"�(���C,�DlL����IrQ�F� ��sf�v8�7%���\'�5d�mO��.�������e������3���Y?:�{+�t%~)1��]�`��T���d�g ������Xv����F�g^���A�H�Z�Lg���n���/�l���T�2�?��]:��v:A_���t��dd��W��E������C�t.��p���a���.��p�'���!h^��R+�I(��D�V����}-��M�6�x�u���2�Q����"<x�1���Q�R�^���(c���gJK��g�Gr?�i\~BT��]�@�J��������@&&�!�Z~���X��d���Uu|����`�cs�	���qT�j}�!x�h���NF��I���p��:��st��u�����}j2��v�|���3��]�ud��X��$��������Qq
w������@V�~r��L������E/��T~*:+��sa4?��}K��0����4�����0���������0��������]�j!d%o�ej��i��K���s�_�3��n2����d;yK���~N���-�&��9hL���t�l�ga3�>��m2�����;~K��"/1�������'m�,��o�`��A��3k��<���h*Z�y<�P�@ ������\��������U)w0NG9.E����.b�*%��*�iu{������*y0T�����N��`�+)v0H����$���$@�=qaV�.����J�4�G��H)t0����6��9�����F�4����WR�P�<u���`�����6�u�P�v)z0\�
���V��wWU������1�F��^Q*��;�[�4�����B�`��<�����(cmUJ��A.%HbE*����Q���s�)Nb���[{5'��RE��R�����g�t�����d��{�����M!u0���h>u�0�2���L�2Q��I�"z0Z����s����"x0V�� �����7�Z�b�t%Hc���+t%���S���LsR��*y0�e��\ojN�b��
�k�
��*U����J����Y���mL�K��p�����#��HM+����R�P��/~s����Id��/�RY�`�v	��Y�5�|!w0N�����G��5��0��@�Q���"x0R�������5e��:�����;[��h����M�Df�H����� W�y=j,{)t0D��k�<"yA�q�G�����<�x@�q�G����i����8u��>��C��~�y�:�:$��v#��+ ���f��|��pJ�����VO�jTF�T�����fKY;�����40���I^�����Wu��������y- C�Q�u���7E�`��q�exIH����\A��n ��JA�>�]�l�u��A�=��l8�"?��.iD�=�����y5;!���X�l���K�����.�=�Uc�+�#���P:�8qi���&N�pW?
��P�f	����w���iY��J5�D)%��Q ��W�����U��^��|�pgV��o�T�j�A�*h������T������7D^�y�)�mE�`�������9��T�]�y�R�����X�
V�J��+E�`��	dw��#�j��5����*x��V���"y0�2��Cu�&-r�������m���B�P�eFCCk�6�C)
��8���Z5��B�`��9��3k��r��%��*��m[_�B�`����DwV/�3������kg%
}�T����yH�����U�cu��#���M>�9V����8W�)
{m�4*e����6V�6��=-��,�������
����P�y��Eb��i���w��I[��u�=�S� +�F�������I[�I��a.%�u�QNR�`����$z2�K�
��<����65K�B�`�89Eal���H����@7P�����b���W��tFQ�+R�UE�`�����9���R��C3��p2Zmh�����@��qe`5*�F�������}j�I��p����h�*Z�n��D�T�*��{[X��Z����
�������Y��r-#���%q��cu�M�|jZ��}8N�\���.RjX5��&]{v����V��H-�	P%�*o3K�!���Z>�[�;A�U4�����)����}<X��tJ�2y�C��Y����S
�?''��=�!OOq:l�?�Q�n����{�&�.|K��(K��N\T�������:�s���Z3��$���pj�J�_j��~�w�q���=�z���[R2�5H��xY;��[�t\���|"Q|���.
��{y���v��H������Y�,c���Sk�2vl�����c�'h��|b���T�����*�����aOE8��>8�q6YXA�K��^i�$yF����$�m�e.���y���.��2}a}�7g9c��?�8�=�����L���jV�1�b����}����f�ir�f?G��B����jc�l�w�%_.�H�{fV�k���lQY�s���zV�'�c5U���:
��]���(��o��O��7���(��q�3�X���X�u�����o�T�F@�K[��&
���\w�j���J������9�m���,���gy���
�����C�k���@����<�sk���^�j��{������W�m�ut�c`%��\����Cf5����"d���Y���������U�/�*���a�-�����nM>�#�i��������U?j�J������Z<��&uVkk�'���Z��qkMHi������c9D�e�sYc����e$�Iq��b�DQ���A�Y��$�:�������!
x
m��sZ�~,$X��`E�Y��zQ��`q
7�L,f��Y��t(t�_� ���rS�PcS[_f+�l�����S�����:B���|<>�m*�#Yw�������?����Z?����-����B���5Hv����OVq����1�}�{��{�������U;Zf���Q��l�7���(a������C�R4�����Y������2��~�RW�J�_�}$�3c�a��!\m���
q��:8l����X;P�=�a��;�n��'a
��0)�
�^���.j�n�W+L�["o�An������1���\��Z����(����)q��H�Yu�,��9�(Y{���������e�*�:�c'�'"���6z0�uRq��a�j��c��a�_hT+n���6�p
�P��;AL�=���rG���w��||���N�/��o�,��bQ�{�D�m%�K��4�,���e5k�V)��N�r���.�|iLp�mA,�[��$t���\��/�b\.�����r������C���7;0����,g�����{�������B"�9M�=��>l!���N�����2/1�����#W����W�}%Y~dr\����#�=�BiJ�|��=�X��wx�����'r��2������l�^Do�U�������]�VA���<(!'�+���}��n����j��?���C��
��������Q2�u�Y�h�����Af�.�;�R�4<���	*�����nL_� P��'�/T���Q��M�.,�!��wy C���#���+d���D|S0�=|
���p~�Ge(�U3y���P���������z]c!��T,�v�����������������x��n����=�Y���Z|LG)�x8}���=K��P�2��`����P�R����m�c������GC����A�
������ ���I[�n�U� �#Q�x,�*�p�);E�vD8�4�d�qp+�1S$�V���������=��"�	K�?1�e���*ua�Rk�������H)U��S�$1+ud� 0�5�eq�qr.9M�(5�=(Hs���o5CV����C���S��|����T�����g�����X�v	�&��������"��G�.zQ�?�x�z�7��

Q��D�d��G��c��FGY�����!��]�Y�
&k!}D�b���xO�u�[[�B����d���)���,�yUv�<���<"����0"]��k<%��|S �>��(��N�{k���J�(j49��������=����V�k���# g�]��'H�
��:�K���C?�V���Z�~&L?��&;�s�o���J�}@�VV.�M�6�BN��<\���+��R����6�P,�:��VY���e+D4<�< R�4�.
��b�6}���X{&6R���td'��7Lb�3r��`��q�D��u��"�����������T��$;l)��[>��{S�P�N�P��#���7Oj�:3�Q��d��)�w��i[wZ�et����$}���W:�T��]�YN=���A+x�E�,�,)�)�� �v�mvGr���K0��_"ss�OVh����S�y]H�����<��A�m#)qJ���"����]���
Z�Me�2�b��������(�I���$C�a�����{C��IqR"�z+���9�Z�j
m�_w:�Z���rT���>���-��76U��1mP��������1S�����b?=�qZ�Q��7/�17&��<]!T�C��?~��!�y���#DQ������5)��P���pk�d%g����q�����x)u0����K������c5�+QH%��g�!=��x��'���3:h� �'L,�)H�4��c��{?
�~G�x�'L\w��;Y!t��&�����!�DW��(�$�(�IJ&p.%�_�!`��Q�R�}��Q�gX��G �4#i���s�3����w~�tb�-�T$���	P��J��D��$�>���`0�QIN6��D����V�_V���Q��INM���l��R|�Q.�L�)����1p�'[�D�.I�3��/��9�T����~��o�M4�����d������qV&�R!*B������g5��n8���/�.�(�DU�@���p0y�(����'3c�,�dy�|�mt���.9�9�u�v�<d���H������s�������9���F�y���@��>����z�E~�NnD�����`}���T�m�7��F!��yl�c2+(���#������1�z�)�����9�~�,���2h���j��8^~����t��L��
b]��#�<��RR/�1e�N 6V< �Rn�����kH����Q����wP�Bq��i�J���&�C���> V
L
��4t�� m>�
�M��45�k\6������p���6N����g�����L ����?�e��^�
!I�
u����FJ-�`JJ�ld.���Z"J����_�3�Kgf�x���x��������^u���UB%f��G<m���!9��Cc���y����>��[`4��T����rQ��H �$�M"��3b��:��He�Y.K�F)��R����$�~>�Qj�@�<��g���]@�U��X�����^��'���>�����OV�1���$�U.OV�"wGrd)f�4@�#e�����8������v���~C9W�"��C��W�h�7kx�}�������$�%�%���Ts!��GHH�:�6(w���������%�\�4�`;�R�U�+������ l�q���`6 \q��JH�R��.��Xu�*0�)6bM�V��"	����r������P\LOc��:kY��z)�Z��q�ZW���"� �ra`��Z��#���[��4��7i�E�zw�A���2�m`r]�M.�_b�
���]+E����r1~�R���[&5,���'V�C��|Y�?p�M���D��6	G��-��5S;n�A��Ap��:@��p��W�t��q�Y��x[�:T��Th�l.o���p�*wp��M8����B��g]dOB��������[�%�:���3��d����Mr��&���	�j��C��	��!�b�����,��V��������m3�v�6�15��NW���Z��biqO�K�nOC�����bp(u�����C��OwwV��oo�����q�=���]������B����
��K�)K6V ��!�F7��s.�����)���Z��472�����Z��;-+�Z�+U��Z�q���t�%��
��a.l�QG]�:j!xx��
T�nJ��1z�b�5���8�����DP�
�v��0�F��,���ng��KM�D�V�TE��&���Z�������XB����G��xve^@?�T�Gp�zv�<@��TpG��zN��B�T�'p�y�]�?�x�����9R2����>C���Y�����Q  ���3Q( ������������~0�U>����tED��w�(��?wJ���0���~��4���r=<��
N���K�_��eP��%.�E��9�6��fY
x�����p����v�����-k��������`���h�'�e����B�g�ZA��$U!��?.�8�V
+o^��7�n�7#l����\|����u����:������]�W�Mk������ S��t��]Md-������v���sY��\&�����	��U:��zr1�����S��o~ _��ks�a����*n��My�e9Z��X�[-x��nQh,m�V��Y��"��V�NDh����^B���{��Z]��������$����g%3&�n����-��[�����������@�6�,����K2�.��K�Y��*
6w����E���4X���"��h����a�����R4>�����f>*#�c;0�����i�|���T�z/M�����<������KoU?�(�q��U��~K���-=o������ii��'m�}����5wS3����e�d�Iv�����^I��=����TJ?�����)�����=���G��pt]�z�����y����x���W�<>�dOP��V�wp��y��J�:j{�Z@
Q��i�nz��]�`1�A���s$�����>x����tb��C�4�DM�hQ
��|R��^/���U��\��������pC�5���w�+~��)K�u���k��W��8S�!���J���P)}��x k���f]a#\�R1��Ril*4��&��9�Pi����J�!=
E�K/�t~�JA���k��p�jU���������B�}�+M�"�]^r�j
jDP�$+�,# M->�)l-��%�Y�Bh�t���A�:W
��&�m���l�G����<��a��u�?�|���~��"&����*r	t�������'���,o���C��y	>/�/Zlx��/��,g��������?����{H��,�'�Y!OJRD^�M�C�sl����D�$b�w�:�t�V�c�fQ�Q���)i���[C���4W���V=re2���{!|�Zu���y~KR(Qp������j�0��6�&�	��f�j��=��b*���������0�7��c����!=�	��'�>�=Zm�s^T�={6B6E��*Uu�|
�-��m{����������O0���n�p?c%��~��ld�4�;n+sS�b{����r~�G��j~�C���v���^�R�m
e�}h�9���z������v���f�'�O� K��h��\0Gh���q��-E�����Q�:,�.��e	�����}��[��l�\J�(V�����
����.`�x�#6���Z�0��4�\yk9&�\G���x��($d.j�U��S)cf���Vb�jT_�*���ul9rBd��_���p�����P���d��K�
3	kX�Y7O��{E�n���=�g���0i��:W���S�:9���%��Z����3UgOq?��eE��j�T�>C=WJZ�<��>�NAMP���A���fHq��r����,����N���k�*yP=����k�^�����L1�S�����]X�|e������&'����
�0��6�0#1.���� ��
F�����SEO��v����2`��\$�;��hj����Q��<����1�kd|�H������xZ�S���~\�5�=[@Gdc��25_����s�16r�)p/���<���O���5�zI��YVs�Opi�6O����$�+������n)����q�m��y��w�e���Z�t����9�r�����<|&���s�1j������}�%��P�i7����%�c��j��9-�"���p�I�����.���)r	L�R���U�@��/��,�+����H�sVjU�h�HvSKH~�d��W�Y����������]���@�XoC�������c�+B�.)`�
��yy�vE*v3R��uL��5�C1/.0c#wc�J6��<��c�U]"I�#�@���.���)��%������a��l�c�"�%]�������O��?�}	�EGwT���s!0n�w��n����=�e8�#r�����`49s���H5�����y ��o;�/����!���B�Q�7$$_�����?��F�������H'��G�QN��5�������)g�9
�(����F�x8tY���M��^
X@b2F"��Oir�C" *� �X�l]0������Q�k�"Y;�
�����%�V���:q3�
[�p\�O�����Y|-�Sx��C��:CD�&�5����={F�I�^�Y{���v���r�&%d�#*���
n�{�p�������R��	�
)�D���$��O��		�r4�=��p���t9ah$��|������z�&Kwo�x����L�~������48��{����������}�x��~�:o���������=������NX]���^^����?�X����ZV��H�����A�mp������7��e/���
�3x����We�(@��c�2w�}�z��!�>a/~���{������cn}���(Z}�CpL����?������{$���?�|�^�c��������c�yx5���?�j��k4cV���Z_���c�����R��c	O���hO��i0��.��K�0�.��-�./Ge�h���7�!+~e���;��!@�}Q����_���t��D���������
o�0�����^�Z����X_����g�Q|��R ���We��(��#�:8��=���o~��Oo��~������<_15���3#�s���v���.
]p1��b�����#���{���
���a����L��
� �R�rN����rY����� ����g(a[{���w!�_�������M���_�V�1~�����g�M�D�LSl�������|�r8}�9�7c���C���YP�W��R�W�I�g+ ��)x�������@�a��WR���JVU^MW����K�xr�
��sFl�h�.@�]Z�qQH�[�u\��p3g]*D��[�*qn(��?��4�K��f"�f�~�wr�&���~���M��,Pg$�tQ,�@?�������?(����_N��1�Uk���<P�gX �B�w���E;���?||���O������n�
��e��������(gFu�[8�s���om����%/�E]VM���ulR�X.]�,�.�?��:��~~>Z�*�!C?b��z�w������������?|����>��ZyQZQl0����|�<kz�w���{�b�?u�`S,�l;_��g��ZN�/y��d��� �{�2\=�^�x*I�0![x��0�ay��o�}do��`��7�	�������_�����^G7����t�o��}S���������Z���\��Z��}�rn��C�
����pq|,�9T�9�[7[aB�6��J��������{��O��5��b��6�o~���?B[������������*E�������CYDf��h}��OhmA�@���9�*���lP�p67��+�&�up<�<�7��}L�+�g�	��DY��Hf��f��*7?c_j{�)���Iz��c[�Y���2�?u����P�r����V+o�Z)J>��\��`^A
���
/{ +��z�;k/���N��4�wn�,�o���N-���~{��a�/�=�8�,y�%|���/�������;�Kz��_Z���!���#�H<�e����]����>&(����k�;����3�[�;�`�'��-���49��e�����o����}d�#���f�V�]RDh������j������:3����q/;P1��{��9��(vH��t��)�"+`���-:�Ra��^��v�,9�0�A�x4���������=�
%�4e��-���T���'i�W��M���w����m�^��3���D��{����UYcX���/zk�:��;h,��Wb��0*�g}��
��L*�W�_������5d{XJ��V��pfa�v*�5{�
��Rd�D)��N/t3s#���Z�WI����������Vc4=�4�?�vi�)��g���r������V�~�`���K�(�
�=�6�~����Z�uF�����B�L�/��e��� 
�1�`}@]�2dhV{����]u�3�[�kL��3s�,�fC��|���J3�*�v����C�����^���;ZD���0�t}�m���������{����t1:�����^��
�}�z�4�Zf���!C���{����V���n9��%��L1�iKN4\�~��k�,.�b6�H��-���|����lB�������/^�+���e�%{y
2�'`�{E�_TP�E~�T�4��������J-:Q���'����^����_���OS��?�d���l����/JO��Z��+X�g���������T�):4iRJq��B�{!F��d;}SL��?�G������@�_��
�l�����G�=,��3��3��z\��c���m�rY��ZE�|]b�9~��d&4h$f�3=�%�C�Z&�C1�q�}Q,]���02!���3��
g���(���4I�ir,���4^�����R�����Fq�-�u$c�� �M�d)��\������7y[j��q��!fJsR��/���{��_��e�/��
��4�;�r���P��*��R���Se�4/�>���)����v�7k(�A��l��^zo����Rd]���s)���������vf�"��Gk�h�
�������	3�^T��~������3�yCW�����y;��u��W�B���e�._c(�z>[�������Z��[������osfbZX�|��8�����l�|��/�{>f�u������8>E����,���a��.U[/�f�?IO�o�����hr��x����V�w�W��I�O���Z]|v��_��|�K:�	��NOm�k�02�+�������+�vC����7�0nY��:������?}~�����k��o�wW����Uk~��|]M���dH�P����9�:r���Dy���/���
#20Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#19)
Re: WIP: default values for function parameters

It's committed.

#21Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#20)
Re: WIP: default values for function parameters

2008/12/4 Peter Eisentraut <peter_e@gmx.net>:

It's committed.

great,

thank you
Pavel

#22Decibel!
decibel@decibel.org
In reply to: David E. Wheeler (#17)
Re: WIP: default values for function parameters

On Nov 30, 2008, at 12:04 PM, David E. Wheeler wrote:

Agreed, default values should not be a part of function signatures,
although it might be nice if ALTER FUNCTION to allow default values
to be changed.

It would be VERY nice. I routinely cut and paste an entire function
header to later perform things like ALTER and GRANT so that I don't
have to re-type everything. It would be a huge PITA if I had to then
go and delete any default settings.

Example:

CREATE OR REPLACE FUNCTION add(
a int
, b int
) RETURNS int LANGUAGE ...

GRANT EXECUTE ON FUNCTION add(
a int
, b int
) TO someuser;
--
Decibel!, aka Jim C. Nasby, Database Architect decibel@decibel.org
Give your computer some brain candy! www.distributed.net Team #1828

#23Grzegorz Jaskiewicz
gj@pointblue.com.pl
In reply to: Decibel! (#22)
Re: WIP: default values for function parameters

if I may request one simple change/addition, Probably trivial to add,
but I don't have too much time to give away now to any other project
than one that pays my debts.
The default param that's in the middle. Would it be hard, or do anyone
objects against adding 'default' keyword there, so one doesn't have to
substitute default param 3, when he only wants to override 2nd in
funct(1,2,3) ?

#24Pavel Stehule
pavel.stehule@gmail.com
In reply to: Grzegorz Jaskiewicz (#23)
Re: WIP: default values for function parameters

2008/12/9 Grzegorz Jaskiewicz <gj@pointblue.com.pl>:

if I may request one simple change/addition, Probably trivial to add, but I
don't have too much time to give away now to any other project than one that
pays my debts.
The default param that's in the middle. Would it be hard, or do anyone
objects against adding 'default' keyword there, so one doesn't have to
substitute default param 3, when he only wants to override 2nd in
funct(1,2,3) ?

I don't plan it, or not yet, because I don't would to complicate rules
for using it. But for 8.5 I prepare named notation and maybe mixed
notation. like param1 => some, param2 => some ..

Regards
Pavel Stehule

#25Peter Eisentraut
peter_e@gmx.net
In reply to: Decibel! (#22)
Re: WIP: default values for function parameters

Decibel! wrote:

On Nov 30, 2008, at 12:04 PM, David E. Wheeler wrote:

Agreed, default values should not be a part of function signatures,
although it might be nice if ALTER FUNCTION to allow default values to
be changed.

It would be VERY nice. I routinely cut and paste an entire function
header to later perform things like ALTER and GRANT so that I don't have
to re-type everything. It would be a huge PITA if I had to then go and
delete any default settings.

That is not what David was talking about above.

Currently, I don't think you can change parameter default values of an
existing function. But I think that would be a useful and
uncontroversial addition.

#26Peter Eisentraut
peter_e@gmx.net
In reply to: Grzegorz Jaskiewicz (#23)
Re: WIP: default values for function parameters

Grzegorz Jaskiewicz wrote:

if I may request one simple change/addition, Probably trivial to add,
but I don't have too much time to give away now to any other project
than one that pays my debts.
The default param that's in the middle. Would it be hard, or do anyone
objects against adding 'default' keyword there, so one doesn't have to
substitute default param 3, when he only wants to override 2nd in
funct(1,2,3) ?

I don't really understand what you are talking about, but if you mean
allowing default values in the middle of a parameter list, then I'd say
rather not.

#27Grzegorz Jaskiewicz
gj@pointblue.com.pl
In reply to: Pavel Stehule (#24)
Re: WIP: default values for function parameters

Ok, how about

CREATE FUNCTION FOO (one int, two float8 default 3.14, three int[]
default '{6,7,8,90}')....;

and than SELECT FOO( 777, DEFAULT, '{1,2,3,4,5}');

I have no idea what SQL standard says in that case, all I know is that
keyword DEFAULT exists in it, and is used in queries for similar
purpose.

#28Peter Eisentraut
peter_e@gmx.net
In reply to: Grzegorz Jaskiewicz (#27)
Re: WIP: default values for function parameters

Grzegorz Jaskiewicz wrote:

Ok, how about

CREATE FUNCTION FOO (one int, two float8 default 3.14, three int[]
default '{6,7,8,90}')....;

and than SELECT FOO( 777, DEFAULT, '{1,2,3,4,5}');

Yeah, that could be a useful feature.

#29Tom Lane
tgl@sss.pgh.pa.us
In reply to: Grzegorz Jaskiewicz (#23)
Re: WIP: default values for function parameters

Grzegorz Jaskiewicz <gj@pointblue.com.pl> writes:

The default param that's in the middle. Would it be hard, or do anyone
objects against adding 'default' keyword there, so one doesn't have to
substitute default param 3, when he only wants to override 2nd in
funct(1,2,3) ?

Yes, and yes. We can only allow eliminating parameters from the right,
else it becomes impossibly ambiguous.

regards, tom lane

#30Pavel Stehule
pavel.stehule@gmail.com
In reply to: Grzegorz Jaskiewicz (#27)
Re: WIP: default values for function parameters

2008/12/9 Grzegorz Jaskiewicz <gj@pointblue.com.pl>:

Ok, how about

CREATE FUNCTION FOO (one int, two float8 default 3.14, three int[] default
'{6,7,8,90}')....;

and than SELECT FOO( 777, DEFAULT, '{1,2,3,4,5}');

I have no idea what SQL standard says in that case, all I know is that
keyword DEFAULT exists in it, and is used in queries for similar purpose.

SQL standard don't say anything. Leader (in this topic) is Oracle,
and there is for this case "mixed notation" (google) -

select foo(777, three=> '{1,2,3,4,5});

it's more safe and more readable.

I did some test, and I thing so it is implementable. I had to solve
problem with hstore module. There is defined operator => too, what is
bad. But we can implemented in transformation and it should by
disabled via GUC, so it's solveable.

reagards
Pavel Stehule

#31Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#30)
Re: WIP: default values for function parameters

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

select foo(777, three=> '{1,2,3,4,5});

it's more safe and more readable.

... and it breaks an operator that's already in use.

I did some test, and I thing so it is implementable. I had to solve
problem with hstore module. There is defined operator => too, what is
bad. But we can implemented in transformation and it should by
disabled via GUC, so it's solveable.

What's wrong with the "expr AS parameter_name" syntax that we've
discussed before? (And no, having a GUC that changes the meaning
of "=>" isn't an acceptable workaround.)

regards, tom lane

#32Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#31)
Re: WIP: default values for function parameters

2008/12/9 Tom Lane <tgl@sss.pgh.pa.us>:

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

select foo(777, three=> '{1,2,3,4,5});

it's more safe and more readable.

... and it breaks an operator that's already in use.

I did some test, and I thing so it is implementable. I had to solve
problem with hstore module. There is defined operator => too, what is
bad. But we can implemented in transformation and it should by
disabled via GUC, so it's solveable.

What's wrong with the "expr AS parameter_name" syntax that we've
discussed before? (And no, having a GUC that changes the meaning
of "=>" isn't an acceptable workaround.)

what is acceptable workaround? I unhappy, so this symbol was used for
this minor contrib module (for this operator doesn't exists regress
test).

a) "AS" is used in diferent meaning now [rename] (SQL/XML), labels
b) when we implemented, then we blocking possible way, when ANSI SQL
generalise current behave
c) it's own syntax that will be muddly (viz a.)
d) both mayor databases has syntax name symbol value

@name = value
name => value

I am searching ways (or syntax) for two features named params, and
named values. Last are inspirated SQL/XML that is great (I know, so
your opinion is different). For export functions I need to send some
information about columns or labels into functions. So it's usable for
custom export functions, JSON implementation, maybe for
communications.

regards
Pavel Stehule

Show quoted text

regards, tom lane

#33Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#32)
Re: WIP: default values for function parameters

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

2008/12/9 Tom Lane <tgl@sss.pgh.pa.us>:

... and it breaks an operator that's already in use.

what is acceptable workaround? I unhappy, so this symbol was used for
this minor contrib module (for this operator doesn't exists regress
test).

If you could prove that it were *only* being used by this contrib module
then I might hold still for replacing it. But you can't. The odds are
good that people have custom data types using similarly-named operators.

regards, tom lane

#34Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#33)
Re: WIP: default values for function parameters

2008/12/9 Tom Lane <tgl@sss.pgh.pa.us>:

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

2008/12/9 Tom Lane <tgl@sss.pgh.pa.us>:

... and it breaks an operator that's already in use.

what is acceptable workaround? I unhappy, so this symbol was used for
this minor contrib module (for this operator doesn't exists regress
test).

If you could prove that it were *only* being used by this contrib module
then I might hold still for replacing it. But you can't. The odds are
good that people have custom data types using similarly-named operators.

it means, so we must not implement any new operator?

regards
Pavel Stehule

Show quoted text

regards, tom lane

#35Robert Haas
robertmhaas@gmail.com
In reply to: Pavel Stehule (#34)
Re: WIP: default values for function parameters

it means, so we must not implement any new operator?

If the operator were called %@==+!, I think you could make a good
argument that no one else is likely using that for anything.

Surely the same cannot be said of =>

Of course, %@==+! is not a very convenient name for an operator, but
that's exactly the point: there are only a limited number of good,
short names for operators, and => must be near the top of that list.

...Robert

#36Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#34)
Re: WIP: default values for function parameters

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

2008/12/9 Tom Lane <tgl@sss.pgh.pa.us>:

If you could prove that it were *only* being used by this contrib module
then I might hold still for replacing it. But you can't. The odds are
good that people have custom data types using similarly-named operators.

it means, so we must not implement any new operator?

No, it doesn't mean any such thing. If we invented, say, "int4 => int4"
it would not break someone's use of => for their own custom datatype.
What you're proposing would be a global redefinition of the meaning of =>.

This is closer to creating a new reserved word, which as I'm sure you
know we try hard to avoid, even for keywords that the spec says we can
reserve. The bar for making a new fully-reserved word that isn't in
the spec is *very* high.

regards, tom lane

#37Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#36)
Re: WIP: default values for function parameters

2008/12/9 Tom Lane <tgl@sss.pgh.pa.us>:

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

2008/12/9 Tom Lane <tgl@sss.pgh.pa.us>:

If you could prove that it were *only* being used by this contrib module
then I might hold still for replacing it. But you can't. The odds are
good that people have custom data types using similarly-named operators.

it means, so we must not implement any new operator?

No, it doesn't mean any such thing. If we invented, say, "int4 => int4"
it would not break someone's use of => for their own custom datatype.
What you're proposing would be a global redefinition of the meaning of =>.

it's not true, because anybody could to define own operator on buildin
types - so every new operator is risk and carry problems. So only new
operator on new types are safe. All others shoud be problem - an using
of any well know world carries risks.

This is closer to creating a new reserved word, which as I'm sure you
know we try hard to avoid, even for keywords that the spec says we can
reserve. The bar for making a new fully-reserved word that isn't in
the spec is *very* high.

what is problematic on GUC? We use it actually for it? So we should
disable or enable named_params, and when this feature will be
disabled, then pg will be 100% compatible. It's better then creating
some strange syntax.

regards
Pavel

Show quoted text

regards, tom lane

#38Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#37)
Re: WIP: default values for function parameters

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

what is problematic on GUC?

Basically, it's a bad idea to have GUCs that silently make significant
changes in the syntactic meaning of a query. We've learned that lesson
the hard way I think. There are places where we've been forced to do
it because of priority-one considerations like standards compatibility
(eg, standard_conforming_strings). This proposed feature doesn't carry
anywhere near the weight that would make me willing to put in another
such wart.

regards, tom lane

#39Gregory Stark
stark@enterprisedb.com
In reply to: Pavel Stehule (#34)
Re: WIP: default values for function parameters

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

2008/12/9 Tom Lane <tgl@sss.pgh.pa.us>:

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

2008/12/9 Tom Lane <tgl@sss.pgh.pa.us>:

... and it breaks an operator that's already in use.

what is acceptable workaround? I unhappy, so this symbol was used for
this minor contrib module (for this operator doesn't exists regress
test).

If you could prove that it were *only* being used by this contrib module
then I might hold still for replacing it. But you can't. The odds are
good that people have custom data types using similarly-named operators.

it means, so we must not implement any new operator?

Operators mean something specific in Postgres. You're talking about
implementing a new fundamental syntax but using a token that's
indistinguishable from the set of operators.

This is a case where Postgres and these other databases have just diverged and
copying their syntax would break with Postgres's in a major way. It just
doesn't fit. Consider for example things like

foo => bar
foo =>= bar
foo @> bar

How would a user recognise which of these are legal operator names?

Incidentally -- EDB selling Oracle compatibility may put me in a questionable
position here -- the more Oracle incompatibilities in stock Postgres the
better for us. But afaik we don't emulate => anyways so that hardly matters.
If anything it shows how unimportant it is to worry about being compatible on
this front.

--
Gregory Stark
EnterpriseDB http://www.enterprisedb.com
Get trained by Bruce Momjian - ask me about EnterpriseDB's PostgreSQL training!

#40Pavel Stehule
pavel.stehule@gmail.com
In reply to: Gregory Stark (#39)
Re: WIP: default values for function parameters

How would a user recognise which of these are legal operator names?

Incidentally -- EDB selling Oracle compatibility may put me in a questionable
position here -- the more Oracle incompatibilities in stock Postgres the
better for us. But afaik we don't emulate => anyways so that hardly matters.
If anything it shows how unimportant it is to worry about being compatible on
this front.

I don't search compatibility - just searching any good syntax. And
Oracle used wide used syntax - from Ada, Perl. - It isn't Oracle
patent or Oracle design. And named params hasn't big sense without
default params. So now is time for speaking about it.

look on ADA http://archive.adaic.com/standards/83rat/html/ratl-08-03.html

PL/pgSQL < PL/SQL < ADA so using '=>' is only consistent and natural.
And it is my goal.

Regards
Pavel Stehule

Show quoted text

--
Gregory Stark
EnterpriseDB http://www.enterprisedb.com
Get trained by Bruce Momjian - ask me about EnterpriseDB's PostgreSQL training!

#41Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#40)
Re: WIP: default values for function parameters

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

PL/pgSQL < PL/SQL < ADA so using '=>' is only consistent and natural.
And it is my goal.

[ shrug... ] Don't be too surprised when the patch gets rejected.
Oracle compatibility is nice when we can get it, but we aren't going
to break existing behavior for it.

regards, tom lane

#42Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#41)
Re: WIP: default values for function parameters

2008/12/9 Tom Lane <tgl@sss.pgh.pa.us>:

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

PL/pgSQL < PL/SQL < ADA so using '=>' is only consistent and natural.
And it is my goal.

[ shrug... ] Don't be too surprised when the patch gets rejected.
Oracle compatibility is nice when we can get it, but we aren't going
to break existing behavior for it.

I believe to GUC should be a solution - I am don't understand your
argument (wrong historic implementation isn't strong argument*), so ..
I am not hurry, and maybe somebody will come with less controversal
solution or beter solution, maybe not. Actually - variadic functions
and defaults are significant step to forward and will carry comfort to
application and library programmers. And I thing so named params or
argument's metadata is logical next step. I should to believe so
implementation will be in conformance with current standard and with
ideas of standard. I invite any ideas, and I will diskus about it with
respect to ADA (as origin lot of SQL construct) and, ofcourse,
standard.

Really - my goal isn't Oracle compatibility (it's only one efect,
because Oracle use well syntax). I am primary working on libraries and
external modules - and my work (variadic fce, defaults) started on
JSON support. Is nice on PostgreSQL, so every feature should be
customised - own objects, operators, agregates - so I would to write
similar functions (with same user comfort) to SQL/XML function
(without parser's patching) - it isn't possible now.

best regards
Pavel Stehule

p.s.
you can see on cvs - there are some people that develops or use orafce
much more hard then me

* a) this feature should be disabled in default
b) should be conditional compiled
c) with two, three hooks and some small changes should be
implemented as external (contrib) module ~ the most worst variant

Show quoted text

regards, tom lane

#43Bruce Momjian
bruce@momjian.us
In reply to: Pavel Stehule (#40)
Re: WIP: default values for function parameters

Pavel Stehule wrote:

How would a user recognise which of these are legal operator names?

Incidentally -- EDB selling Oracle compatibility may put me in a questionable
position here -- the more Oracle incompatibilities in stock Postgres the
better for us. But afaik we don't emulate => anyways so that hardly matters.
If anything it shows how unimportant it is to worry about being compatible on
this front.

I don't search compatibility - just searching any good syntax. And
Oracle used wide used syntax - from Ada, Perl. - It isn't Oracle
patent or Oracle design. And named params hasn't big sense without
default params. So now is time for speaking about it.

look on ADA http://archive.adaic.com/standards/83rat/html/ratl-08-03.html

PL/pgSQL < PL/SQL < ADA so using '=>' is only consistent and natural.
And it is my goal.

Well, that is interesting, but in SQL we already use 'AS' in most places
where we want to assign a label to a value, so it seems AS is more
logical for SQL at this point.

The problem with a GUC is that when it is changed it breaks things and
it might be set in a dump file but not in postgresql.conf; there is a
long list of problems we have encountered when changing SQL semenatics
via GUC, autocommit being one of them.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

#44Pavel Stehule
pavel.stehule@gmail.com
In reply to: Bruce Momjian (#43)
Re: WIP: default values for function parameters

2008/12/10 Bruce Momjian <bruce@momjian.us>:

Pavel Stehule wrote:

How would a user recognise which of these are legal operator names?

Incidentally -- EDB selling Oracle compatibility may put me in a questionable
position here -- the more Oracle incompatibilities in stock Postgres the
better for us. But afaik we don't emulate => anyways so that hardly matters.
If anything it shows how unimportant it is to worry about being compatible on
this front.

I don't search compatibility - just searching any good syntax. And
Oracle used wide used syntax - from Ada, Perl. - It isn't Oracle
patent or Oracle design. And named params hasn't big sense without
default params. So now is time for speaking about it.

look on ADA http://archive.adaic.com/standards/83rat/html/ratl-08-03.html

PL/pgSQL < PL/SQL < ADA so using '=>' is only consistent and natural.
And it is my goal.

Well, that is interesting, but in SQL we already use 'AS' in most places
where we want to assign a label to a value, so it seems AS is more
logical for SQL at this point.

Question is - what is label - is it parameter name or some other value?

Every output in SQL has default label - column name, or some default.
And we use "AS" for change this default label. So using AS for param
names is bad idea.

Please, show me other case.

The problem with a GUC is that when it is changed it breaks things and
it might be set in a dump file but not in postgresql.conf; there is a
long list of problems we have encountered when changing SQL semenatics
via GUC, autocommit being one of them.

ofcourse, users have to use own mind - but it not break postgresql
using. GUC allow implement new feature in some steps. Actually it's
used for standard literals, and I don't know about any problems.

Autocommit is different case - it's invisible but important change.
Named params change syntax and impact is much more less than moving
tsearch2 to core.

regards
Pavel Stehule

Show quoted text

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

#45Bruce Momjian
bruce@momjian.us
In reply to: Pavel Stehule (#44)
Re: WIP: default values for function parameters

Pavel Stehule wrote:

PL/pgSQL < PL/SQL < ADA so using '=>' is only consistent and natural.
And it is my goal.

Well, that is interesting, but in SQL we already use 'AS' in most places
where we want to assign a label to a value, so it seems AS is more
logical for SQL at this point.

Question is - what is label - is it parameter name or some other value?

Every output in SQL has default label - column name, or some default.
And we use "AS" for change this default label. So using AS for param
names is bad idea.

Please, show me other case.

Well, we use AS in the FROM clause to label tables and those labels can
be used to reference the table in other places in the query. I see us
using AS here as a way to assign the contant to a label that is
referenced as a function parameter.

The problem with a GUC is that when it is changed it breaks things and
it might be set in a dump file but not in postgresql.conf; there is a
long list of problems we have encountered when changing SQL semenatics
via GUC, autocommit being one of them.

ofcourse, users have to use own mind - but it not break postgresql
using. GUC allow implement new feature in some steps. Actually it's
used for standard literals, and I don't know about any problems.

Autocommit is different case - it's invisible but important change.
Named params change syntax and impact is much more less than moving
tsearch2 to core.

The problem is that function text might rely on a certain setting of the
GUC and unless the function sets the GUC itself it could break
functions.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

#46Pavel Stehule
pavel.stehule@gmail.com
In reply to: Bruce Momjian (#45)
Re: WIP: default values for function parameters

2008/12/10 Bruce Momjian <bruce@momjian.us>:

Pavel Stehule wrote:

PL/pgSQL < PL/SQL < ADA so using '=>' is only consistent and natural.
And it is my goal.

Well, that is interesting, but in SQL we already use 'AS' in most places
where we want to assign a label to a value, so it seems AS is more
logical for SQL at this point.

Question is - what is label - is it parameter name or some other value?

Every output in SQL has default label - column name, or some default.
And we use "AS" for change this default label. So using AS for param
names is bad idea.

Please, show me other case.

Well, we use AS in the FROM clause to label tables and those labels can
be used to reference the table in other places in the query. I see us
using AS here as a way to assign the contant to a label that is
referenced as a function parameter.

this is still change of existing label - and it's argument for me - it
is label - not name of argument.

you cannot call function in postgresql in any other context
(PostgreSQL doesn't support statement CALL), so every AS sets label
for given value. You change property of some constant.

Or we should to go via Perl way, where every operator has different
meaning in different content (but I hope, so not).

SELECT column AS bbbb from foo; AS specifies other label than column name
SELECT sin(column AS bbb) from foo; ---> so it reason why using AS for
param names is wrong, with change of context I changing meaning.

The problem with a GUC is that when it is changed it breaks things and
it might be set in a dump file but not in postgresql.conf; there is a
long list of problems we have encountered when changing SQL semenatics
via GUC, autocommit being one of them.

ofcourse, users have to use own mind - but it not break postgresql
using. GUC allow implement new feature in some steps. Actually it's
used for standard literals, and I don't know about any problems.

Autocommit is different case - it's invisible but important change.
Named params change syntax and impact is much more less than moving
tsearch2 to core.

The problem is that function text might rely on a certain setting of the
GUC and unless the function sets the GUC itself it could break
functions.

can you show sample?

Show quoted text

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

#47Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#44)
Re: WIP: default values for function parameters

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

2008/12/10 Bruce Momjian <bruce@momjian.us>:

Well, that is interesting, but in SQL we already use 'AS' in most places
where we want to assign a label to a value, so it seems AS is more
logical for SQL at this point.

Question is - what is label - is it parameter name or some other value?

Every output in SQL has default label - column name, or some default.
And we use "AS" for change this default label. So using AS for param
names is bad idea.

That argument is complete nonsense. A function parameter can't possibly
be an "output" of a SQL statement, so there is no conflict.

regards, tom lane

#48Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#47)
Re: WIP: default values for function parameters

2008/12/10 Tom Lane <tgl@sss.pgh.pa.us>:

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

2008/12/10 Bruce Momjian <bruce@momjian.us>:

Well, that is interesting, but in SQL we already use 'AS' in most places
where we want to assign a label to a value, so it seems AS is more
logical for SQL at this point.

Question is - what is label - is it parameter name or some other value?

Every output in SQL has default label - column name, or some default.
And we use "AS" for change this default label. So using AS for param
names is bad idea.

That argument is complete nonsense. A function parameter can't possibly
be an "output" of a SQL statement, so there is no conflict.

we speaking about two things probably. I speaking so using AS in two
independent meaning is wrong.

look again
select c as foo from tab ...
select fce(c as foo) from tab ...

when you use AS as param names specification, you change meaning of
some construct via used context?

is it true or false?

regards
Pavel Stehule

Show quoted text

regards, tom lane

#49Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#48)
Re: WIP: default values for function parameters

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

look again
select c as foo from tab ...
select fce(c as foo) from tab ...

when you use AS as param names specification, you change meaning of
some construct via used context?

Uh, what's your point? AS changes the meaning too. For example in

select foo, bar from (select c as foo, d as bar from ...) ss;

we are using AS to specify the names seen by the outer select.
This seems to me to be quite a close parallel to attaching names
to function parameters.

regards, tom lane

#50Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#49)
Re: WIP: default values for function parameters

2008/12/10 Tom Lane <tgl@sss.pgh.pa.us>:

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

look again
select c as foo from tab ...
select fce(c as foo) from tab ...

when you use AS as param names specification, you change meaning of
some construct via used context?

Uh, what's your point? AS changes the meaning too. For example in

select foo, bar from (select c as foo, d as bar from ...) ss;

we are using AS to specify the names seen by the outer select.
This seems to me to be quite a close parallel to attaching names
to function parameters.

no, no - you use AS for an change of some property of set c column
values - label. Isn't important if this is select, subselect. label is
metadata - it's related to data. This is using of AS. Maybe it's
different for me, because I am not native speaker, so I feeling SQL
more like artifical language than you. For you using AS is more less
formal - it's your natural language. So I am filling some border
between data names (labels) and parameter names.

next argument - if we accept AS for param names, then we introduce
nonconsistent behave with SQL/XML functions.

select xmlforest(c1, c2 as foo, c3) -- there foo isn't doesn't mean
"use it as param foo", so from this view is using AS very dificult
accaptable too.

regards
Pavel Stehule

Show quoted text

regards, tom lane

#51Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#50)
Re: WIP: default values for function parameters

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

next argument - if we accept AS for param names, then we introduce
nonconsistent behave with SQL/XML functions.

select xmlforest(c1, c2 as foo, c3) -- there foo isn't doesn't mean
"use it as param foo",

It could be read as meaning that, I think.

In any case, I'm not wedded to using AS for this, and am happy to
consider other suggestions. But => isn't acceptable.

regards, tom lane

#52Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#51)
Re: WIP: default values for function parameters

2008/12/10 Tom Lane <tgl@sss.pgh.pa.us>:

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

next argument - if we accept AS for param names, then we introduce
nonconsistent behave with SQL/XML functions.

select xmlforest(c1, c2 as foo, c3) -- there foo isn't doesn't mean
"use it as param foo",

It could be read as meaning that, I think.

In any case, I'm not wedded to using AS for this, and am happy to
consider other suggestions.

me too

regards
Pavel Stehule

But => isn't acceptable.

Show quoted text

regards, tom lane

#53Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#52)
Re: WIP: default values for function parameters

2008/12/10 Pavel Stehule <pavel.stehule@gmail.com>:

2008/12/10 Tom Lane <tgl@sss.pgh.pa.us>:

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

next argument - if we accept AS for param names, then we introduce
nonconsistent behave with SQL/XML functions.

select xmlforest(c1, c2 as foo, c3) -- there foo isn't doesn't mean
"use it as param foo",

It could be read as meaning that, I think.

In any case, I'm not wedded to using AS for this, and am happy to
consider other suggestions.

what do you thing about?

select fce(p1,p2,p3, SET paramname1 = val, paramname2 = val)

example
select dosome(10,20,30, SET flaga = true, flagb = false)

regards
Pavel Stehule

Show quoted text

me too

regards
Pavel Stehule

But => isn't acceptable.

regards, tom lane

#54Bruce Momjian
bruce@momjian.us
In reply to: Pavel Stehule (#53)
Re: WIP: default values for function parameters

Pavel Stehule wrote:

2008/12/10 Pavel Stehule <pavel.stehule@gmail.com>:

2008/12/10 Tom Lane <tgl@sss.pgh.pa.us>:

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

next argument - if we accept AS for param names, then we introduce
nonconsistent behave with SQL/XML functions.

select xmlforest(c1, c2 as foo, c3) -- there foo isn't doesn't mean
"use it as param foo",

It could be read as meaning that, I think.

In any case, I'm not wedded to using AS for this, and am happy to
consider other suggestions.

what do you thing about?

select fce(p1,p2,p3, SET paramname1 = val, paramname2 = val)

example
select dosome(10,20,30, SET flaga = true, flagb = false)

I think AS read more naturally because you expect the parameter to come
first, not the SET keyword.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

#55Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#53)
Re: WIP: default values for function parameters

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

what do you thing about?

select fce(p1,p2,p3, SET paramname1 = val, paramname2 = val)

I'm not really seeing any redeeming social value in that. It's more
keystrokes than the other; and if you dislike AS because of possible
confusion with other usages then surely the same objection applies to
SET.

regards, tom lane

#56Kevin Grittner
Kevin.Grittner@wicourts.gov
In reply to: Tom Lane (#51)
Re: WIP: default values for function parameters

Tom Lane <tgl@sss.pgh.pa.us> wrote:

In any case, I'm not wedded to using AS for this, and am happy to
consider other suggestions. But => isn't acceptable.

How about using a bare equals sign (or the => characters) for
parameter assignment, but require that the parameter name be prefixed
with some special character? (My first thought was a dollar sign, but
that would cause problems in PL/pgSQL, so some other character would
need to be used.) It seems like that could give the parser enough
context to consider the operator as parameter assignment, so it
wouldn't require making it a fully reserved word or preclude other
uses of the operator.

I guess it would preclude the use of whatever character was chosen as
a prefix operator in the context of a parameter list, however; which
might be a fatal flaw to the idea.

-Kevin

#57Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#55)
Re: WIP: default values for function parameters

2008/12/11 Tom Lane <tgl@sss.pgh.pa.us>:

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

what do you thing about?

select fce(p1,p2,p3, SET paramname1 = val, paramname2 = val)

I'm not really seeing any redeeming social value in that. It's more
keystrokes than the other; and if you dislike AS because of possible
confusion with other usages then surely the same objection applies to
SET.

true, it's nothing nice. There is only small set of short keyword

Zdenek Kotala's proposals is using

$name = value, ...
but I afraid so it could do some problems with prepared statements in future :(

Pavel

Show quoted text

regards, tom lane

#58Pavel Stehule
pavel.stehule@gmail.com
In reply to: Kevin Grittner (#56)
Re: WIP: default values for function parameters

2008/12/11 Kevin Grittner <Kevin.Grittner@wicourts.gov>:

Tom Lane <tgl@sss.pgh.pa.us> wrote:

In any case, I'm not wedded to using AS for this, and am happy to
consider other suggestions. But => isn't acceptable.

How about using a bare equals sign (or the => characters) for
parameter assignment, but require that the parameter name be prefixed
with some special character? (My first thought was a dollar sign, but
that would cause problems in PL/pgSQL, so some other character would
need to be used.) It seems like that could give the parser enough
context to consider the operator as parameter assignment, so it
wouldn't require making it a fully reserved word or preclude other
uses of the operator.

maybe this combination should be safe

$name => .... or $name -> ...

it's not used everywhere

Pavel

Show quoted text

I guess it would preclude the use of whatever character was chosen as
a prefix operator in the context of a parameter list, however; which
might be a fatal flaw to the idea.

-Kevin

#59Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#58)
Re: WIP: default values for function parameters

On Thursday 11 December 2008 17:11:28 Pavel Stehule wrote:

maybe this combination should be safe

$name => .... or $name -> ...

it's not used everywhere

Why don't you actually just implement the whole thing first using a random,
simple, and nonconflicting syntax?

Adjusting the syntax to something we can reach consensus on should be a change
of about at most 10 lines at the end.

#60Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#59)
Re: WIP: default values for function parameters

2008/12/11 Peter Eisentraut <peter_e@gmx.net>:

On Thursday 11 December 2008 17:11:28 Pavel Stehule wrote:

maybe this combination should be safe

$name => .... or $name -> ...

it's not used everywhere

Why don't you actually just implement the whole thing first using a random,
simple, and nonconflicting syntax?

Adjusting the syntax to something we can reach consensus on should be a change
of about at most 10 lines at the end.

this is done

I did it today, so I have workable WIP prototype for ADA(Oracle)
syntax. Change of some syntax will not be really problem.

Pavel

#61David E. Wheeler
david@kineticode.com
In reply to: Bruce Momjian (#54)
Re: WIP: default values for function parameters

On Dec 11, 2008, at 3:42 PM, Bruce Momjian wrote:

what do you thing about?

select fce(p1,p2,p3, SET paramname1 = val, paramname2 = val)

example
select dosome(10,20,30, SET flaga = true, flagb = false)

I think AS read more naturally because you expect the parameter to
come
first, not the SET keyword.

Coming to this a bit late, but it seems to me that, while it makes
sense to assign a label to a value using "AS", it's kind of weird to
use it to assign a value to a label.

SELECT foo( bar => 'ick', baz => 'ack' );
SELECT foo( bar AS 'ick', baz AS 'ack' );

As a Perl hacker, I'm strongly biased toward =>, but I guess AS isn't
*too* bad. At least it's the same number of characters. Is -> right out?

Best,

David

#62Ian Caulfield
ian.caulfield@gmail.com
In reply to: David E. Wheeler (#61)
Re: WIP: default values for function parameters

2008/12/12 David E. Wheeler <david@kineticode.com>:

On Dec 11, 2008, at 3:42 PM, Bruce Momjian wrote:

what do you thing about?

select fce(p1,p2,p3, SET paramname1 = val, paramname2 = val)

example
select dosome(10,20,30, SET flaga = true, flagb = false)

I think AS read more naturally because you expect the parameter to come
first, not the SET keyword.

Coming to this a bit late, but it seems to me that, while it makes sense to
assign a label to a value using "AS", it's kind of weird to use it to assign
a value to a label.

SELECT foo( bar => 'ick', baz => 'ack' );
SELECT foo( bar AS 'ick', baz AS 'ack' );

As a Perl hacker, I'm strongly biased toward =>, but I guess AS isn't *too*
bad. At least it's the same number of characters. Is -> right out?

Personally I'm not keen on named parameter assignment, but if 'AS' is
unpopular, and '=>' et al conflict with operators, would verilog-style
syntax - eg function( .param(value) ) - be an idea?

Ian

#63Dimitri Fontaine
dfontaine@hi-media.com
In reply to: Ian Caulfield (#62)
Re: WIP: default values for function parameters

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

Le 12 déc. 08 à 14:14, Ian Caulfield a écrit :

unpopular, and '=>' et al conflict with operators, would verilog-style
syntax - eg function( .param(value) ) - be an idea?

Ok, time to revisit the classics then ;)
http://www.gigamonkeys.com/book/functions.html#keyword-parameters

That would give us things like this:
SELECT foo(1, :name 'bar', :quantity 10);

As colon character does not appear in the list of allowed characters
for the CREATE OPERATOR, it seems it could be valid.
http://www.postgresql.org/docs/8.3/interactive/sql-
createoperator.html

Regards,
- --
dim

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Darwin)

iEYEARECAAYFAklCaCMACgkQlBXRlnbh1blryQCfR9/6qtOlSAOiMbQ+RD8PRTi+
bsoAn2UiLMwZOG9nanXyMWfh5iAbQVTX
=p37W
-----END PGP SIGNATURE-----

#64Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dimitri Fontaine (#63)
Re: WIP: default values for function parameters

2008/12/12 Dimitri Fontaine <dfontaine@hi-media.com>:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

Le 12 déc. 08 à 14:14, Ian Caulfield a écrit :

unpopular, and '=>' et al conflict with operators, would verilog-style
syntax - eg function( .param(value) ) - be an idea?

Ok, time to revisit the classics then ;)
http://www.gigamonkeys.com/book/functions.html#keyword-parameters

That would give us things like this:
SELECT foo(1, :name 'bar', :quantity 10);

As colon character does not appear in the list of allowed characters for the
CREATE OPERATOR, it seems it could be valid.
http://www.postgresql.org/docs/8.3/interactive/sql-createoperator.html

I dislike do LISP from nice PL :)

I thing so $name => is safe, but I didn't test it.

regards
Pavel

Show quoted text

Regards,
- --
dim

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Darwin)

iEYEARECAAYFAklCaCMACgkQlBXRlnbh1blryQCfR9/6qtOlSAOiMbQ+RD8PRTi+
bsoAn2UiLMwZOG9nanXyMWfh5iAbQVTX
=p37W
-----END PGP SIGNATURE-----

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#65Tom Lane
tgl@sss.pgh.pa.us
In reply to: David E. Wheeler (#61)
Re: WIP: default values for function parameters

"David E. Wheeler" <david@kineticode.com> writes:

As a Perl hacker, I'm strongly biased toward =>, but I guess AS isn't
*too* bad. At least it's the same number of characters. Is -> right out?

It's just as bad as => from the perspective of usurping a probable
user-defined operator name.

I think the fundamental problem with *any* notation like that is that
we don't have a concept of reserved words in the operator name space;
and without a precedent for it it's tough to justify suddenly breaking
people's code. As was already noted, you could damp down the objections
by choosing some long and ugly operator name, but that's hardly going
to be pleasant to use.

So I think that really this is never going to fly unless it uses a
keyword-looking reserved word. And we're not going to take some short
word that's not reserved now and suddenly make it so. So, despite
Pavel's objection that the AS syntax proposal might be confused with
other uses of AS, I seriously doubt that any proposal is going to get
accepted that doesn't recycle AS or some other existing reserved word.

regards, tom lane

#66David E. Wheeler
david@kineticode.com
In reply to: Dimitri Fontaine (#63)
Re: WIP: default values for function parameters

On Dec 12, 2008, at 2:33 PM, Dimitri Fontaine wrote:

Ok, time to revisit the classics then ;)
http://www.gigamonkeys.com/book/functions.html#keyword-parameters

That would give us things like this:
SELECT foo(1, :name 'bar', :quantity 10);

As colon character does not appear in the list of allowed characters
for the CREATE OPERATOR, it seems it could be valid.
http://www.postgresql.org/docs/8.3/interactive/sql-
createoperator.html

Oh, I like the colon, but better at the end of the label:

SELECT foo(1, name: 'bar', quantity: 10);

Best,

Daivd

#67David E. Wheeler
david@kineticode.com
In reply to: Tom Lane (#65)
Re: WIP: default values for function parameters

On Dec 12, 2008, at 2:39 PM, Tom Lane wrote:

So I think that really this is never going to fly unless it uses a
keyword-looking reserved word. And we're not going to take some short
word that's not reserved now and suddenly make it so. So, despite
Pavel's objection that the AS syntax proposal might be confused with
other uses of AS, I seriously doubt that any proposal is going to get
accepted that doesn't recycle AS or some other existing reserved word.

I'm okay with AS if that's the way it has to be, but what about a
colon right at the end of the label? A cast is two colons, so no
conflict there:

SELECT foo(1, name: 'bar', quantity: 10);

No doubt I'm missing something…

Best

David

#68Tom Lane
tgl@sss.pgh.pa.us
In reply to: David E. Wheeler (#67)
Re: WIP: default values for function parameters

"David E. Wheeler" <david@kineticode.com> writes:

I'm okay with AS if that's the way it has to be, but what about a
colon right at the end of the label?

Hmm ... a colon isn't considered to be an operator name, so this
wouldn't break any existing usage. I'm a little bit worried about
what we might be cutting ourselves off from in the future, but
maybe it's a good solution.

regards, tom lane

#69Pavel Stehule
pavel.stehule@gmail.com
In reply to: David E. Wheeler (#67)
Re: WIP: default values for function parameters

2008/12/12 David E. Wheeler <david@kineticode.com>:

On Dec 12, 2008, at 2:39 PM, Tom Lane wrote:

So I think that really this is never going to fly unless it uses a
keyword-looking reserved word. And we're not going to take some short
word that's not reserved now and suddenly make it so. So, despite
Pavel's objection that the AS syntax proposal might be confused with
other uses of AS, I seriously doubt that any proposal is going to get
accepted that doesn't recycle AS or some other existing reserved word.

when I should exactly identify param name, the we should to use any symbols.

I'm okay with AS if that's the way it has to be, but what about a colon
right at the end of the label? A cast is two colons, so no conflict there:

SELECT foo(1, name: 'bar', quantity: 10);

it's look well, but I still prefer some combination with =

name: = ''
name: => '''
:name = ''
$name => ..
$name = ..

Maybe I am too conservative
Pavel

Show quoted text

No doubt I'm missing something…

Best

David

#70Rod Taylor
rod.taylor@gmail.com
In reply to: Pavel Stehule (#69)
Re: WIP: default values for function parameters

How about IS or INTO?

param_name IS 3
param_name IS 'some string value'

3 INTO param_name
'some string value' INTO param_name

Show quoted text

On Fri, Dec 12, 2008 at 8:47 AM, Pavel Stehule <pavel.stehule@gmail.com> wrote:

2008/12/12 David E. Wheeler <david@kineticode.com>:

On Dec 12, 2008, at 2:39 PM, Tom Lane wrote:

So I think that really this is never going to fly unless it uses a
keyword-looking reserved word. And we're not going to take some short
word that's not reserved now and suddenly make it so. So, despite
Pavel's objection that the AS syntax proposal might be confused with
other uses of AS, I seriously doubt that any proposal is going to get
accepted that doesn't recycle AS or some other existing reserved word.

when I should exactly identify param name, the we should to use any symbols.

I'm okay with AS if that's the way it has to be, but what about a colon
right at the end of the label? A cast is two colons, so no conflict there:

SELECT foo(1, name: 'bar', quantity: 10);

it's look well, but I still prefer some combination with =

name: = ''
name: => '''
:name = ''
$name => ..
$name = ..

Maybe I am too conservative
Pavel

No doubt I'm missing something…

Best

David

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#71Tom Lane
tgl@sss.pgh.pa.us
In reply to: Rod Taylor (#70)
Re: WIP: default values for function parameters

"Rod Taylor" <rod.taylor@gmail.com> writes:

How about IS or INTO?

IS isn't a fully reserved word, and INTO seems pretty weird for this.

(IS is a type_func_name_keyword, so maybe we could make it work anyway,
but it sounds a bit fragile.)

regards, tom lane

#72Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#69)
Re: WIP: default values for function parameters

right at the end of the label? A cast is two colons, so no conflict there:

SELECT foo(1, name: 'bar', quantity: 10);

it's look well, but I still prefer some combination with =

name: = ''
name: => '''
:name = ''
$name => ..
$name = ..

hmm :( $name isn't possible
:name is in conflict with vars in psql :(

Show quoted text

Maybe I am too conservative
Pavel

No doubt I'm missing something…

Best

David

#73David E. Wheeler
david@kineticode.com
In reply to: Pavel Stehule (#69)
Re: WIP: default values for function parameters

On Dec 12, 2008, at 2:47 PM, Pavel Stehule wrote:

it's look well, but I still prefer some combination with =

name: = ''
name: => '''
:name = ''
$name => ..
$name = ..

Maybe I am too conservative

Given that the colon already indicates "This label corresponds to that
value", the other operator characters are redundant. In English, I
write things like this:

first: go to store
second: get eggs

See what I mean? I quite like the colon solution.

Best,

David

#74Sam Mason
sam@samason.me.uk
In reply to: Rod Taylor (#70)
Re: WIP: default values for function parameters

On Fri, Dec 12, 2008 at 09:00:52AM -0500, Rod Taylor wrote:

How about IS or INTO?

param_name IS 3
param_name IS 'some string value'

that wouldn't work with NULL would it? for example is:

a IS NULL

checking if identifier 'a' IS NULL, or if you're giving NULL to
parameter 'a'.

3 INTO param_name
'some string value' INTO param_name

looks good. Just to throw another item in, you could keep with SQL's
general verboseness and use:

WITH ident = expr

that may be too much though. Names that were mentioned in the keyword
file are:

AS IS WITH ON HAVING INTO
and the following un-reserved entries
MATCH NAME NAMES

Sam

#75Robert Haas
robertmhaas@gmail.com
In reply to: David E. Wheeler (#67)
Re: WIP: default values for function parameters

I'm okay with AS if that's the way it has to be, but what about a colon
right at the end of the label? A cast is two colons, so no conflict there:

SELECT foo(1, name: 'bar', quantity: 10);

No doubt I'm missing something…

I'd just like to mention that there are two different cases to
consider here. One is when you want to pass some optional parameters,
but there are enough of them that it's inconvenient to have them in
some particular order. This is the case I think you're primarily
catering to here.

The other is when you want the function that gets called to magically
know what name the system would have assigned to the column had the
expression been used in a select list, so that you can write things
xmlify(foo) and get <foo>...data from foo...</foo>.

I think the AS syntax makes a lot of sense for the second one, but not
so much for the first one. Maybe we need both:

[keyword:] paramater_expression [AS label]

...Robert

#76Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#71)
Re: WIP: default values for function parameters

I wrote:

"Rod Taylor" <rod.taylor@gmail.com> writes:

How about IS or INTO?

IS isn't a fully reserved word, and INTO seems pretty weird for this.

(IS is a type_func_name_keyword, so maybe we could make it work anyway,
but it sounds a bit fragile.)

Actually, there's an obvious counterexample for IS:

select func(foo IS NULL)

Two possible meanings...

regards, tom lane

#77Heikki Linnakangas
heikki.linnakangas@enterprisedb.com
In reply to: David E. Wheeler (#61)
Re: WIP: default values for function parameters

David E. Wheeler wrote:

Coming to this a bit late, but it seems to me that, while it makes sense
to assign a label to a value using "AS", it's kind of weird to use it to
assign a value to a label.

SELECT foo( bar => 'ick', baz => 'ack' );
SELECT foo( bar AS 'ick', baz AS 'ack' );

We could do it the other way round:

SELECT foo( 'ick' AS bar, 'ack' AS baz);

--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com

#78Pavel Stehule
pavel.stehule@gmail.com
In reply to: Heikki Linnakangas (#77)
Re: WIP: default values for function parameters

2008/12/12 Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>:

David E. Wheeler wrote:

Coming to this a bit late, but it seems to me that, while it makes sense
to assign a label to a value using "AS", it's kind of weird to use it to
assign a value to a label.

SELECT foo( bar => 'ick', baz => 'ack' );
SELECT foo( bar AS 'ick', baz AS 'ack' );

We could do it the other way round:

SELECT foo( 'ick' AS bar, 'ack' AS baz);

I discussed about this form with Tom.

I thing so following should be readable:

name: [ optional => ] value

SELECT foo( bar: 'ick', baz: 'ack' );
SELECT foo( bar: => 'ick', baz: => 'ack' );

or

SELECT foo( bar: = 'ick', baz: = 'ack' );

reason for optional using of "=>" is too thin char ":", so =>
optically boost the colon.

Pavel

this is 100% compatible because syntax name: is new token

Show quoted text

--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com

#79David E. Wheeler
david@kineticode.com
In reply to: Pavel Stehule (#78)
Re: WIP: default values for function parameters

On Dec 12, 2008, at 3:38 PM, Pavel Stehule wrote:

I discussed about this form with Tom.

I thing so following should be readable:

name: [ optional => ] value

SELECT foo( bar: 'ick', baz: 'ack' );
SELECT foo( bar: => 'ick', baz: => 'ack' );

or

SELECT foo( bar: = 'ick', baz: = 'ack' );

reason for optional using of "=>" is too thin char ":", so =>
optically boost the colon.

Hrm. I can see that, I guess. In that case, though, I think I'd prefer
the colon at the beginning of the parameter label:

SELECT foo( :bar => 'ick', :baz => 'ack' );

In that case, though, I'd want the => to be required. Note that
there's a precedent here, too: This is Ruby's syntax for using
"symbols" for parameter names.

this is 100% compatible because syntax name: is new token

Interesting. I hadn't expected that the use of the colon to make the
use of => be okay. Cool that it does, though.

Best,

David

#80Pavel Stehule
pavel.stehule@gmail.com
In reply to: David E. Wheeler (#79)
Re: WIP: default values for function parameters

2008/12/12 David E. Wheeler <david@kineticode.com>:

On Dec 12, 2008, at 3:38 PM, Pavel Stehule wrote:

I discussed about this form with Tom.

I thing so following should be readable:

name: [ optional => ] value

SELECT foo( bar: 'ick', baz: 'ack' );
SELECT foo( bar: => 'ick', baz: => 'ack' );

or

SELECT foo( bar: = 'ick', baz: = 'ack' );

reason for optional using of "=>" is too thin char ":", so =>
optically boost the colon.

Hrm. I can see that, I guess. In that case, though, I think I'd prefer the
colon at the beginning of the parameter label:

SELECT foo( :bar => 'ick', :baz => 'ack' );

this syntax is used yet
http://www.postgresql.org/docs/8.3/interactive/app-psql.html

testdb=> \set foo 'my_table'
testdb=> SELECT * FROM :foo;

would then query the table my_table. The value of the variable is
copied literally, so it can even contain unbalanced quotes or
backslash commands. You must make sure that it makes sense where you
put it. Variable interpolation will not be performed into quoted SQL
entities.

A popular application of this facility is to refer to the last
inserted OID in subsequent statements to build a foreign key scenario.
Another possible use of this mechanism is to copy the contents of a
file into a table column. First load the file into a variable and then
proceed as above:

testdb=> \set content '''' `cat my_file.txt` ''''
testdb=> INSERT INTO my_table VALUES (:content);

regards
Pavel Stehule

Show quoted text

In that case, though, I'd want the => to be required. Note that there's a
precedent here, too: This is Ruby's syntax for using "symbols" for parameter
names.

this is 100% compatible because syntax name: is new token

Interesting. I hadn't expected that the use of the colon to make the use of
=> be okay. Cool that it does, though.

Best,

David

#81Gregory Stark
stark@enterprisedb.com
In reply to: Pavel Stehule (#78)
Re: WIP: default values for function parameters

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

2008/12/12 Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>:

We could do it the other way round:

SELECT foo( 'ick' AS bar, 'ack' AS baz);

I always assumed we were talking about it this way. Everywhere else in SQL AS
is followed by the labels, not the values.

I discussed about this form with Tom.

I thing so following should be readable:

name: [ optional => ] value

SELECT foo( bar: 'ick', baz: 'ack' );
SELECT foo( bar: => 'ick', baz: => 'ack' );

or

SELECT foo( bar: = 'ick', baz: = 'ack' );

reason for optional using of "=>" is too thin char ":", so =>
optically boost the colon.

These don't solve anything. There's nothing stopping you from defining a unary
prefix operator => or =

In any case this is all weird. SQL isn't C and doesn't have random bits of
punctuation involved in syntax. It uses whole words for just about everything.
Anything you do using punctuation characters is going to look out of place.

--
Gregory Stark
EnterpriseDB http://www.enterprisedb.com
Ask me about EnterpriseDB's PostGIS support!

#82David E. Wheeler
david@kineticode.com
In reply to: Gregory Stark (#81)
Re: WIP: default values for function parameters

On Dec 12, 2008, at 3:57 PM, Gregory Stark wrote:

In any case this is all weird. SQL isn't C and doesn't have random
bits of
punctuation involved in syntax. It uses whole words for just about
everything.
Anything you do using punctuation characters is going to look out of
place.

Well, what do databases other than Oracle (which uses =>) do? What's
likely to end up in the standard?

Best,

David

#83Tom Lane
tgl@sss.pgh.pa.us
In reply to: David E. Wheeler (#79)
Re: WIP: default values for function parameters

"David E. Wheeler" <david@kineticode.com> writes:

Hrm. I can see that, I guess. In that case, though, I think I'd prefer
the colon at the beginning of the parameter label:

SELECT foo( :bar => 'ick', :baz => 'ack' );

That's ugly, and incompatible with ecpg syntax, and what's the redeeming
value anyway?

In any case, whichever side you put the colon on, Pavel's proposal for
adding => to it is a nonstarter --- he's ignoring the possibility that
=> is defined as a prefix operator.

Hmm ... actually, ecpg might be a problem here anyway. I know it has
special meaning for :name, but does it allow space between the colon
and the name? If it does then the colon syntax loses. If it doesn't
then you could do "name: value" as long as you were careful to leave
a space after the colon.

regards, tom lane

#84David E. Wheeler
david@kineticode.com
In reply to: Pavel Stehule (#80)
Re: WIP: default values for function parameters

On Dec 12, 2008, at 3:56 PM, Pavel Stehule wrote:

Hrm. I can see that, I guess. In that case, though, I think I'd
prefer the
colon at the beginning of the parameter label:

SELECT foo( :bar => 'ick', :baz => 'ack' );

this syntax is used yet
http://www.postgresql.org/docs/8.3/interactive/app-psql.html

testdb=> \set foo 'my_table'
testdb=> SELECT * FROM :foo;

Oh, right. Damn.

In that case, I'm happy with your proposal of

name: [ => ] value

Where => is optional.

Or, if that just doesn't fly for reasons such as those cited by Greg
Stark, AS would seem to be the only choice left. Though what's on the
lhs vs the rhs is debatable:

SELECT foo( label AS 'value' );
SELECT foo( 'value' AS label );

Maybe they're reversible?

Best,

David

#85Tom Lane
tgl@sss.pgh.pa.us
In reply to: Heikki Linnakangas (#77)
Re: WIP: default values for function parameters

Heikki Linnakangas <heikki.linnakangas@enterprisedb.com> writes:

We could do it the other way round:
SELECT foo( 'ick' AS bar, 'ack' AS baz);

Yeah, that's the direction I had always assumed that we would use,
if AS is the chosen syntax for this.

regards, tom lane

#86Dimitri Fontaine
dfontaine@hi-media.com
In reply to: Gregory Stark (#81)
Re: WIP: default values for function parameters

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 12 déc. 08 à 15:57, Gregory Stark a écrit :

These don't solve anything. There's nothing stopping you from
defining a unary
prefix operator => or =

That's why I'm preferring the common-lisp syntax of :param value, or
its variant param: value.

In any case this is all weird. SQL isn't C and doesn't have random
bits of
punctuation involved in syntax. It uses whole words for just about
everything.
Anything you do using punctuation characters is going to look out of
place.

Well, with the exception of function argument list, beginning with
( and ending with ) and where parameters are separated by ,. Maybe
some : in there would shock users.

SELECT foo(a, b, c);
SELECT foo(a, :c 5);
SELECT foo(a, c: 5);

Not so much new punctuation characters there, 1 out of 4.
- --
dim

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Darwin)

iEYEARECAAYFAklCfysACgkQlBXRlnbh1blWJQCfdLCB0B9xOzvfX2tOfoBL4cxo
X4UAoI3aTK+834Cx5Wbly/snj2hQbQTX
=s6w5
-----END PGP SIGNATURE-----

#87Greg Stark
stark@enterprisedb.com
In reply to: Dimitri Fontaine (#86)
Re: WIP: default values for function parameters

On Fri, Dec 12, 2008 at 3:11 PM, Dimitri Fontaine
<dfontaine@hi-media.com> wrote:

That's why I'm preferring the common-lisp syntax of :param value, or its
variant param: value.

FWIW there is no such common-lisp syntax. Colon is just a regular
symbol character and :param is just a regular symbol in common-lisp.
There is a convention that functions parse their argument lists
looking for such tokens as indicators of what to do with the next
argument but it's purely a convention. There's no syntactic
significance to the colon.

A similar problem arises with using Perl as a precedent. => is just a
regular operator in perl which quotes the lhs as a string if it's a
simple token and otherwise behaves just like a comma. That would be
very different from what we're talking about having it do here.

--
greg

#88Douglas McNaught
doug@mcnaught.org
In reply to: Greg Stark (#87)
Re: WIP: default values for function parameters

On Fri, Dec 12, 2008 at 10:31 AM, Greg Stark <stark@enterprisedb.com> wrote:

On Fri, Dec 12, 2008 at 3:11 PM, Dimitri Fontaine
<dfontaine@hi-media.com> wrote:

That's why I'm preferring the common-lisp syntax of :param value, or its
variant param: value.

FWIW there is no such common-lisp syntax. Colon is just a regular
symbol character and :param is just a regular symbol in common-lisp.
There is a convention that functions parse their argument lists
looking for such tokens as indicators of what to do with the next
argument but it's purely a convention. There's no syntactic
significance to the colon.

Drifting off-topic and being really nit-picky, you're wrong. :) It's
more than just a "convention". Colons *are* special in symbol
names--the leading colon designates the symbol as being in the KEYWORD
package (i.e. symbol namespace; you can put symbols in other packages
by prepending a package name to the colon) and there is standard
syntax (&key) for specifying allowed keyword arguments to a function;
said keys must be symbols in the KEYWORD package.

So the proposed foo( :bar 12, :baz 'stuff' ) syntax is actually very
close to the Common Lisp syntax, though there may be very good reasons
not to use it in PG.

A similar problem arises with using Perl as a precedent. => is just a
regular operator in perl which quotes the lhs as a string if it's a
simple token and otherwise behaves just like a comma. That would be
very different from what we're talking about having it do here.

Very true, and I think the "don't break people who are using => as a
prefix operator" argument is pretty conclusive.

-Doug

#89David E. Wheeler
david@kineticode.com
In reply to: Tom Lane (#83)
Re: WIP: default values for function parameters

On Dec 12, 2008, at 4:06 PM, Tom Lane wrote:

"David E. Wheeler" <david@kineticode.com> writes:

Hrm. I can see that, I guess. In that case, though, I think I'd
prefer
the colon at the beginning of the parameter label:

SELECT foo( :bar => 'ick', :baz => 'ack' );

That's ugly, and incompatible with ecpg syntax, and what's the
redeeming
value anyway?

Beauty is in the eye of the beholder, I guess. I got used to it
hacking Ruby last year.

In any case, whichever side you put the colon on, Pavel's proposal for
adding => to it is a nonstarter --- he's ignoring the possibility that
=> is defined as a prefix operator.

Ah.

Hmm ... actually, ecpg might be a problem here anyway. I know it has
special meaning for :name, but does it allow space between the colon
and the name? If it does then the colon syntax loses. If it doesn't
then you could do "name: value" as long as you were careful to leave
a space after the colon.

So would that eliminate

SELECT foo( bar: 'ick', baz: 'ack' );

as a possibility?

Best,

David

#90Michael Meskes
meskes@postgresql.org
In reply to: Tom Lane (#83)
Re: WIP: default values for function parameters

On Fri, Dec 12, 2008 at 10:06:30AM -0500, Tom Lane wrote:

Hmm ... actually, ecpg might be a problem here anyway. I know it has
special meaning for :name, but does it allow space between the colon
and the name? If it does then the colon syntax loses. If it doesn't

No. Here's the lexer rule:

<SQL>:{identifier}((("->"|\.){identifier})|(\[{array}\]))*

No space possible between ":" and {identifier}.

Michael
--
Michael Meskes
Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org)
Michael at BorussiaFan dot De, Meskes at (Debian|Postgresql) dot Org
ICQ: 179140304, AIM/Yahoo: michaelmeskes, Jabber: meskes@jabber.org
Go VfL Borussia! Go SF 49ers! Use Debian GNU/Linux! Use PostgreSQL!

#91Tom Lane
tgl@sss.pgh.pa.us
In reply to: Michael Meskes (#90)
Re: WIP: default values for function parameters

Michael Meskes <meskes@postgresql.org> writes:

On Fri, Dec 12, 2008 at 10:06:30AM -0500, Tom Lane wrote:

Hmm ... actually, ecpg might be a problem here anyway. I know it has
special meaning for :name, but does it allow space between the colon
and the name? If it does then the colon syntax loses. If it doesn't

No. Here's the lexer rule:
<SQL>:{identifier}((("->"|\.){identifier})|(\[{array}\]))*
No space possible between ":" and {identifier}.

Excellent. I checked that psql's colon-variable feature behaves the
same. So it looks like the proposed "name: value" syntax would indeed
not break any existing features. Barring better ideas I think we should
go with that one.

regards, tom lane

#92David E. Wheeler
david@kineticode.com
In reply to: Tom Lane (#91)
Re: WIP: default values for function parameters

On Dec 12, 2008, at 7:05 PM, Tom Lane wrote:

Excellent. I checked that psql's colon-variable feature behaves the
same. So it looks like the proposed "name: value" syntax would indeed
not break any existing features. Barring better ideas I think we
should
go with that one.

+1

Best,

David

#93Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#91)
Re: WIP: default values for function parameters

Tom Lane wrote:

Michael Meskes <meskes@postgresql.org> writes:

On Fri, Dec 12, 2008 at 10:06:30AM -0500, Tom Lane wrote:

Hmm ... actually, ecpg might be a problem here anyway. I know it has
special meaning for :name, but does it allow space between the colon
and the name? If it does then the colon syntax loses. If it doesn't

No. Here's the lexer rule:
<SQL>:{identifier}((("->"|\.){identifier})|(\[{array}\]))*
No space possible between ":" and {identifier}.

Excellent. I checked that psql's colon-variable feature behaves the
same. So it looks like the proposed "name: value" syntax would indeed
not break any existing features. Barring better ideas I think we should
go with that one.

Does that mean the whitespace following the : will be required? (I could
figure it out but brain is otherwise occupied).

cheers

andrew

#94Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#93)
Re: WIP: default values for function parameters

Andrew Dunstan <andrew@dunslane.net> writes:

Excellent. I checked that psql's colon-variable feature behaves the
same. So it looks like the proposed "name: value" syntax would indeed
not break any existing features. Barring better ideas I think we should
go with that one.

Does that mean the whitespace following the : will be required? (I could
figure it out but brain is otherwise occupied).

Only if what's immediately after the colon is an identifier, and
possibly not even then depending on the client-side context. For
instance psql won't do anything unless the identifier matches one
of its variables. We'd definitely want to document a recommendation
to leave a space there, though.

regards, tom lane

#95Asko Oja
ascoja@gmail.com
In reply to: Tom Lane (#91)
Re: WIP: default values for function parameters

On Fri, Dec 12, 2008 at 8:05 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Michael Meskes <meskes@postgresql.org> writes:

On Fri, Dec 12, 2008 at 10:06:30AM -0500, Tom Lane wrote:

Hmm ... actually, ecpg might be a problem here anyway. I know it has
special meaning for :name, but does it allow space between the colon
and the name? If it does then the colon syntax loses. If it doesn't

No. Here's the lexer rule:
<SQL>:{identifier}((("->"|\.){identifier})|(\[{array}\]))*
No space possible between ":" and {identifier}.

Excellent. I checked that psql's colon-variable feature behaves the
same. So it looks like the proposed "name: value" syntax would indeed
not break any existing features. Barring better ideas I think we should
go with that one.

+1
"name: value" should be good enough

Show quoted text

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#96Peter Eisentraut
peter_e@gmx.net
In reply to: Tom Lane (#91)
Re: WIP: default values for function parameters

On Friday 12 December 2008 20:05:57 Tom Lane wrote:

Excellent. I checked that psql's colon-variable feature behaves the
same. So it looks like the proposed "name: value" syntax would indeed
not break any existing features. Barring better ideas I think we should
go with that one.

I personally thought that AS was a better idea.

#97Albert Cervera i Areny
albert@nan-tic.com
In reply to: Peter Eisentraut (#96)
Re: WIP: default values for function parameters

A Dissabte 13 Desembre 2008, Peter Eisentraut va escriure:

On Friday 12 December 2008 20:05:57 Tom Lane wrote:

Excellent. I checked that psql's colon-variable feature behaves the
same. So it looks like the proposed "name: value" syntax would indeed
not break any existing features. Barring better ideas I think we should
go with that one.

I personally thought that AS was a better idea.

+1

--
Albert Cervera i Areny
http://www.NaN-tic.com

#98Dimitri Fontaine
dfontaine@hi-media.com
In reply to: Peter Eisentraut (#96)
Re: WIP: default values for function parameters

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

Le 13 déc. 08 à 11:39, Peter Eisentraut a écrit :

On Friday 12 December 2008 20:05:57 Tom Lane wrote:

Excellent. I checked that psql's colon-variable feature behaves the
same. So it looks like the proposed "name: value" syntax would
indeed
not break any existing features. Barring better ideas I think we
should
go with that one.

I personally thought that AS was a better idea.

It seems some people want to be able to overload some default
parameters (but not others) and at the same time alias them to some
new label. I'm not sure I understand it all, but it seems an example
of it would be like:
SELECT xml_function(a, b: 'foo' AS bar);

If this is what some people want when all the spare parts are bound
together, we don't have the option to use AS for both the meanings.

Regards,
- --
dim

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Darwin)

iEYEARECAAYFAklDqg0ACgkQlBXRlnbh1blPKwCfayDs3vFnswOYe7yLRyEaJf00
HvYAn1sfYndeKfI4ac09IxuxUVuUqbdX
=BGDG
-----END PGP SIGNATURE-----

#99Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dimitri Fontaine (#98)
Re: WIP: default values for function parameters

Dimitri Fontaine <dfontaine@hi-media.com> writes:

Le 13 d�c. 08 � 11:39, Peter Eisentraut a �crit :

I personally thought that AS was a better idea.

It seems some people want to be able to overload some default
parameters (but not others) and at the same time alias them to some
new label. I'm not sure I understand it all, but it seems an example
of it would be like:
SELECT xml_function(a, b: 'foo' AS bar);

If this is what some people want when all the spare parts are bound
together, we don't have the option to use AS for both the meanings.

I personally agree that AS seems more SQL-ish, but that's in the eye
of the beholder.

The argument about ambiguity in XMLELEMENT is bogus becase XMLELEMENT
doesn't (and won't) have named parameters. But it is true that
XMLELEMENT is doing something subtly different with the AS clause than
what a named parameter would do; so you could argue that there's a
potential for user confusion there.

However, after looking at the precedent of XMLELEMENT, it's hard to deny
that if the SQL committee ever chose to standardize named parameters,
AS is what they would use. The chances that ":" would become the
standard are negligible --- that's not the sort of syntax they like
to standardize.

regards, tom lane

#100Bruce Momjian
bruce@momjian.us
In reply to: Dimitri Fontaine (#98)
Re: WIP: default values for function parameters

Dimitri Fontaine wrote:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

Le 13 d���c. 08 ��� 11:39, Peter Eisentraut a ���crit :

On Friday 12 December 2008 20:05:57 Tom Lane wrote:

Excellent. I checked that psql's colon-variable feature behaves the
same. So it looks like the proposed "name: value" syntax would
indeed
not break any existing features. Barring better ideas I think we
should
go with that one.

I personally thought that AS was a better idea.

It seems some people want to be able to overload some default
parameters (but not others) and at the same time alias them to some
new label. I'm not sure I understand it all, but it seems an example
of it would be like:
SELECT xml_function(a, b: 'foo' AS bar);

If this is what some people want when all the spare parts are bound
together, we don't have the option to use AS for both the meanings.

I agree "AS" is better. And why would the "AS" above be inside the
parentheses; I assume it would be:

SELECT xml_function(a, b: 'foo') AS bar;

Giving labels to parameters passed into functions makes no sense.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

#101David E. Wheeler
david@kineticode.com
In reply to: Tom Lane (#99)
Re: WIP: default values for function parameters

On Dec 13, 2008, at 5:05 PM, Tom Lane wrote:

However, after looking at the precedent of XMLELEMENT, it's hard to
deny
that if the SQL committee ever chose to standardize named parameters,
AS is what they would use. The chances that ":" would become the
standard are negligible --- that's not the sort of syntax they like
to standardize.

Any chance that both "AS" and ":" could be supported, so that it's at
the discretion of the user?

Best,

David

#102Tom Lane
tgl@sss.pgh.pa.us
In reply to: David E. Wheeler (#101)
Re: WIP: default values for function parameters

"David E. Wheeler" <david@kineticode.com> writes:

On Dec 13, 2008, at 5:05 PM, Tom Lane wrote:

However, after looking at the precedent of XMLELEMENT, it's hard to
deny that if the SQL committee ever chose to standardize named parameters,
AS is what they would use. The chances that ":" would become the
standard are negligible --- that's not the sort of syntax they like
to standardize.

Any chance that both "AS" and ":" could be supported, so that it's at
the discretion of the user?

I'm sure it's technically possible, but I see no redeeming social value
in it ... we should pick one and quit repainting the bike shed.

regards, tom lane

#103David E. Wheeler
david@kineticode.com
In reply to: Tom Lane (#102)
Re: WIP: default values for function parameters

On Dec 13, 2008, at 5:19 PM, Tom Lane wrote:

I'm sure it's technically possible, but I see no redeeming social
value
in it ... we should pick one and quit repainting the bike shed.

Well, as I've said, I'm okay with AS, though it's not my favorite. I
can see the argument that it's more likely to eventually make it into
the SQL standard. I don't suppose that the position of the label and
the value on either side of "AS" could be reversible, could it?

SELECT foo( bar AS 'ick', 6 AS baz );

Probably not, I'm thinking…

Best,

David

#104Tom Lane
tgl@sss.pgh.pa.us
In reply to: David E. Wheeler (#103)
Re: WIP: default values for function parameters

"David E. Wheeler" <david@kineticode.com> writes:

I don't suppose that the position of the label and
the value on either side of "AS" could be reversible, could it?

No. Consider

SELECT foo(bar AS baz) FROM ...

If the from-clause provides columns named both bar and baz, it would
be impossible to decide what is meant.

regards, tom lane

#105Bruce Momjian
bruce@momjian.us
In reply to: David E. Wheeler (#103)
Re: WIP: default values for function parameters

David E. Wheeler wrote:

On Dec 13, 2008, at 5:19 PM, Tom Lane wrote:

I'm sure it's technically possible, but I see no redeeming social
value
in it ... we should pick one and quit repainting the bike shed.

Well, as I've said, I'm okay with AS, though it's not my favorite. I
can see the argument that it's more likely to eventually make it into
the SQL standard. I don't suppose that the position of the label and
the value on either side of "AS" could be reversible, could it?

SELECT foo( bar AS 'ick', 6 AS baz );

Probably not, I'm thinking?

Yea, probably not.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

#106Grzegorz Jaskiewicz
gj@pointblue.com.pl
In reply to: Tom Lane (#102)
Re: WIP: default values for function parameters

On 2008-12-13, at 16:19, Tom Lane wrote:

I'm sure it's technically possible, but I see no redeeming social
value
in it ... we should pick one and quit repainting the bike shed.

+1000

#107Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#99)
Re: WIP: default values for function parameters

I personally agree that AS seems more SQL-ish, but that's in the eye
of the beholder.

The argument about ambiguity in XMLELEMENT is bogus becase XMLELEMENT
doesn't (and won't) have named parameters. But it is true that
XMLELEMENT is doing something subtly different with the AS clause than
what a named parameter would do; so you could argue that there's a
potential for user confusion there.

It's not ambiguous unless for some reason you wanted to support doing
both of those things at the same time, but I'm having a hard time
coming up with a realistic use case for that. Still, I think we
probably do want to at least leave the door open to do both things at
different times. For the XMLELEMENT-type case, "value AS label" seems
far superior to "label: value", so if you're going to pick one syntax
for both things, it should be that one.

Alternatively, using "label: value" for identifying which parameter is
intended to get the value and "value AS label" for relabelling seems
OK too, though your argument about standards-compliance is a valid
one.

...Robert

#108Dimitri Fontaine
dfontaine@hi-media.com
In reply to: Tom Lane (#99)
Re: WIP: default values for function parameters

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 13 déc. 08 à 17:05, Tom Lane a écrit :

I personally agree that AS seems more SQL-ish, but that's in the eye
of the beholder.

So do I, but I fear it's already taken for another meaning.

The argument about ambiguity in XMLELEMENT is bogus becase XMLELEMENT
doesn't (and won't) have named parameters.

My concern is the other way around. This function provides support for
arguments relabeling, but reading some other threads here I think we
don't yet support this feature for user defined function. Or maybe
only for C-language user defined functions.

What if relabeling support were to spread some more?
My point is that we couldn't offer generalization of an existing
feature if we reuse AS for default parameter value. Or the user would
have to choose between having more than one argument with a default
value and relabeling support. That would be awkward.

No it could very well be that the point does not exists, but someone
would have to explain why to me, cause I'm sure not getting it by
myself...

Regards,
- --
dim

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Darwin)

iEYEARECAAYFAklEJyEACgkQlBXRlnbh1bmlgwCfW8PPDh1rIH6Fk/3oEQ0t1+TH
vDYAni0kE4us/AvWuI6HTyaywAgP9Tga
=jB1l
-----END PGP SIGNATURE-----

#109Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dimitri Fontaine (#108)
Re: WIP: default values for function parameters

Dimitri Fontaine <dfontaine@hi-media.com> writes:

What if relabeling support were to spread some more?

Spread to what? AFAICS the way that XMLELEMENT uses AS is a
single-purpose wart (much like a lot of other stuff the SQL committee
invents :-(). I do not see a need to reserve AS in function argument
lists for that purpose. In any case, the proposed meaning here is only
relevant to functions that expose names for their parameters; so in
principle you could still do something like what XMLELEMENT does for any
function that does not create names for its parameters.

regards, tom lane

#110Dimitri Fontaine
dfontaine@hi-media.com
In reply to: Tom Lane (#109)
Re: WIP: default values for function parameters

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 13 déc. 08 à 22:32, Tom Lane a écrit :

Spread to what? AFAICS the way that XMLELEMENT uses AS is a
single-purpose wart

Ok now that explains.
The common lisp inspired syntax is only nice if we're to avoid using
AS, which I thought was the situation. Sorry for some more confusion
here.

Regards,
- --
dim

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Darwin)

iEYEARECAAYFAklEK6sACgkQlBXRlnbh1blNKACgmwZSY1ZpKBhK/SxhPdjZ1F6q
mtcAn3OaNs1jIQOymz/6ex/ghlO+avcO
=dGhM
-----END PGP SIGNATURE-----

#111Robert Haas
robertmhaas@gmail.com
In reply to: Dimitri Fontaine (#108)
Re: WIP: default values for function parameters

What if relabeling support were to spread some more?

The only example I can think of besides XML is JSON. There might be a
few more. Basically, relabelling is a handy shortcut when you are
serializing data and want to avoid specifying a list of columns and an
(almost) identical list of labels. Otherwise, it's not good for much.
I think we should eventually aim to support user-defined functions
that work like this, because people will forever be inventing new ways
to serialize things and it'd be nice not to have to recompile to add
support for a new one.

I suppose you might want to do something like this:

html_input(foo) returns <input name='foo' type='text' value='[...value
of foo...]'>
html_input(foo AS bar) returns <input name='foo' type='text'
value='[...value of foo...]'>
html_input(foo, type: hidden) returns <input name='foo' type='hidden'
value='[...value of foo...]'>

...Robert

#112Greg Stark
stark@enterprisedb.com
In reply to: Robert Haas (#111)
Re: WIP: default values for function parameters

On Sun, Dec 14, 2008 at 1:42 AM, Robert Haas <robertmhaas@gmail.com> wrote:

What if relabeling support were to spread some more?

The only example I can think of besides XML is JSON. There might be a
few more. Basically, relabelling is a handy shortcut when you are
serializing data and want to avoid specifying a list of columns and an
(almost) identical list of labels.

The whole relabeling thing seems like a seriously silly idea. Why is
it at all a shortcut to use "AS" instead of "," ? The relabeling adds
zero actual expressiveness, it just makes a fancy way to pass an
argument.

--
greg

#113Robert Haas
robertmhaas@gmail.com
In reply to: Greg Stark (#112)
Re: WIP: default values for function parameters

The whole relabeling thing seems like a seriously silly idea. Why is
it at all a shortcut to use "AS" instead of "," ?

Because a lot of times you don't want to relabel, so you omit the "AS
label" part altogether, and the label is deduced from the expression
itself. For example, I don't need to write:

SELECT json(r.foo AS foo, r.bar AS bar, r.baz AS baz, r.bletch AS
quux) FROM rel r;

I can just write:

SELECT json(r.foo, r.bar, r.baz, r.bletch AS quux) FROM rel r;

...which is a a lot more compact when the number of arguments is large.

...Robert

#114Tom Lane
tgl@sss.pgh.pa.us
In reply to: Greg Stark (#112)
Re: WIP: default values for function parameters

"Greg Stark" <stark@enterprisedb.com> writes:

On Sun, Dec 14, 2008 at 1:42 AM, Robert Haas <robertmhaas@gmail.com> wrote:

What if relabeling support were to spread some more?

The only example I can think of besides XML is JSON. There might be a
few more. Basically, relabelling is a handy shortcut when you are
serializing data and want to avoid specifying a list of columns and an
(almost) identical list of labels.

The whole relabeling thing seems like a seriously silly idea.

I wouldn't say that it's silly. What I do say is that it makes no sense
to imagine that it would be used at the same time as named parameters.
The entire point of something like XMLELEMENT is that it takes a list of
undifferentiated parameters, which therefore do not need to have names
so far as the function is concerned.

regards, tom lane

#115David E. Wheeler
david@kineticode.com
In reply to: Tom Lane (#114)
Re: WIP: default values for function parameters

On Dec 14, 2008, at 6:55 AM, Tom Lane wrote:

The whole relabeling thing seems like a seriously silly idea.

I wouldn't say that it's silly. What I do say is that it makes no
sense
to imagine that it would be used at the same time as named parameters.
The entire point of something like XMLELEMENT is that it takes a
list of
undifferentiated parameters, which therefore do not need to have names
so far as the function is concerned.

Perhaps not, but I have to say, looking at Robert's JSON example:

SELECT json(r.foo AS foo, r.bar AS bar, r.baz AS baz, r.bletch AS
quux) FROM rel r;

I would be pretty confused. It looks exactly like the proposed syntax
for named parameters. So while syntactically they may never be used
together, there's a semantic mismatch, IMHO.

Best,

David

#116Pavel Stehule
pavel.stehule@gmail.com
In reply to: Greg Stark (#112)
Re: WIP: default values for function parameters

2008/12/14 Greg Stark <stark@enterprisedb.com>:

On Sun, Dec 14, 2008 at 1:42 AM, Robert Haas <robertmhaas@gmail.com> wrote:

What if relabeling support were to spread some more?

The only example I can think of besides XML is JSON. There might be a
few more. Basically, relabelling is a handy shortcut when you are
serializing data and want to avoid specifying a list of columns and an
(almost) identical list of labels.

The whole relabeling thing seems like a seriously silly idea. Why is
it at all a shortcut to use "AS" instead of "," ? The relabeling adds
zero actual expressiveness, it just makes a fancy way to pass an
argument.

Because AS is signal for collecting column (or label) names.

I thing so we should use "AS" as Tom's proposal, together with SQL/XML
functionality.

It's only idea: default behave is using as for param name specification,

seconf with flag maybe labeled allows using AS in SQL/XML behave

But this syntax don't allow use this feature together (it is maybe enought).\

create function json(variadic labeled values int[]) ...

Pavel

#117Zeugswetter Andreas OSB sIT
Andreas.Zeugswetter@s-itsolutions.at
In reply to: Pavel Stehule (#69)
Re: WIP: default values for function parameters

it's look well, but I still prefer some combination with =

name: = ''
name: => '''
:name = ''
$name => ..
$name = ..

I wonder about name := ''.

:= is used in Pascal/Ada to assign a value. Or would that again be an allowed operator in pg ?

Andreas

#118Pavel Stehule
pavel.stehule@gmail.com
In reply to: Zeugswetter Andreas OSB sIT (#117)
Re: WIP: default values for function parameters

2008/12/15 Zeugswetter Andreas OSB sIT <Andreas.Zeugswetter@s-itsolutions.at>:

it's look well, but I still prefer some combination with =

name: = ''
name: => '''
:name = ''
$name => ..
$name = ..

I wonder about name := ''.

:= is used in Pascal/Ada to assign a value. Or would that again be an allowed operator in pg ?

I like it too, but there is problem with possible collision with
custom operator

Pavel

Show quoted text

Andreas

#119Peter Eisentraut
peter_e@gmx.net
In reply to: David E. Wheeler (#115)
Re: WIP: default values for function parameters

David E. Wheeler wrote:

Perhaps not, but I have to say, looking at Robert's JSON example:

SELECT json(r.foo AS foo, r.bar AS bar, r.baz AS baz, r.bletch AS
quux) FROM rel r;

I would be pretty confused. It looks exactly like the proposed syntax
for named parameters. So while syntactically they may never be used
together, there's a semantic mismatch, IMHO.

In my mind, you just have to think about it hard enough to come to
realize that, when viewed from the right angle, the semantic conflict
might not exist after all. It's a bit tricky, but I think it's possible.

#120Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#116)
Re: WIP: default values for function parameters

Pavel Stehule wrote:

Because AS is signal for collecting column (or label) names.

I thing so we should use "AS" as Tom's proposal, together with SQL/XML
functionality.

Yes, please implement that.

It's only idea: default behave is using as for param name specification,

seconf with flag maybe labeled allows using AS in SQL/XML behave

But this syntax don't allow use this feature together (it is maybe enought).\

create function json(variadic labeled values int[]) ...

I didn't get that ... :-(

#121Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#120)
Re: WIP: default values for function parameters

2008/12/15 Peter Eisentraut <peter_e@gmx.net>:

Pavel Stehule wrote:

Because AS is signal for collecting column (or label) names.

I thing so we should use "AS" as Tom's proposal, together with SQL/XML
functionality.

Yes, please implement that.

I'll do it - it's better then nothing,

It's only idea: default behave is using as for param name specification,

seconf with flag maybe labeled allows using AS in SQL/XML behave

But this syntax don't allow use this feature together (it is maybe
enought).\

create function json(variadic labeled values int[]) ...

I didn't get that ... :-(

First I have to look to code, use "AS" means, so there will be one
syntactic role with two meanings.

Pavel

Show quoted text
#122David E. Wheeler
david@kineticode.com
In reply to: Peter Eisentraut (#119)
Re: WIP: default values for function parameters

On Dec 15, 2008, at 11:05 AM, Peter Eisentraut wrote:

In my mind, you just have to think about it hard enough to come to
realize that, when viewed from the right angle, the semantic
conflict might not exist after all. It's a bit tricky, but I think
it's possible.

Better for users not to have to think about it, IMHO. Still, they
will, in the future, more likely be familiar with passing parameters
to functions than with the XML stuff, and so won't have to worry about
it until they use the XML stuff.

Best,

David