pl/perl extension fails on Windows

Started by Sandeep Thakkarover 8 years ago94 messages
#1Sandeep Thakkar
sandeep.thakkar@enterprisedb.com

Hi,

I compiled PG 10 beta1/beta2 with "--with-perl" option on Windows and the
extension crashes the database.
--
postgres=# create extension plperl;
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.
postgres=#

It doesn't produce crashdump (in $DATA/crashdumps) but the log contains the
following error:

*src/pl/plperl/Util.c: loadable library and perl binaries are mismatched
(got handshake key 0A900080, needed 0AC80080)*
--

This is seen with Perl 5.24 but not with 5.20, 5.16. What I found is that
the handshake function is added in Perl 5.21.x and probably that is why we
don't see this issue in earlier versions.

The Perl that is used during compilation and on the target machine is same.
So probably plperl is not able to load the perl library. It works fine on
Linux and MacOS.

--
Sandeep Thakkar
EDB

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Sandeep Thakkar (#1)
Re: pl/perl extension fails on Windows

Sandeep Thakkar <sandeep.thakkar@enterprisedb.com> writes:

I compiled PG 10 beta1/beta2 with "--with-perl" option on Windows and the
extension crashes the database.
*src/pl/plperl/Util.c: loadable library and perl binaries are mismatched
(got handshake key 0A900080, needed 0AC80080)*

This is seen with Perl 5.24 but not with 5.20, 5.16. What I found is that
the handshake function is added in Perl 5.21.x and probably that is why we
don't see this issue in earlier versions.

Well, we have various buildfarm machines running perls newer than that,
eg, crake, with 5.24.1. So I'd say there is something busted about your
perl installation. Perhaps leftover bits of an older version somewhere?

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

#3Dave Page
dpage@pgadmin.org
In reply to: Tom Lane (#2)
Re: pl/perl extension fails on Windows

On Wed, Jul 12, 2017 at 4:35 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Sandeep Thakkar <sandeep.thakkar@enterprisedb.com> writes:

I compiled PG 10 beta1/beta2 with "--with-perl" option on Windows and the
extension crashes the database.
*src/pl/plperl/Util.c: loadable library and perl binaries are mismatched
(got handshake key 0A900080, needed 0AC80080)*

This is seen with Perl 5.24 but not with 5.20, 5.16. What I found is that
the handshake function is added in Perl 5.21.x and probably that is why

we

don't see this issue in earlier versions.

Well, we have various buildfarm machines running perls newer than that,
eg, crake, with 5.24.1. So I'd say there is something busted about your
perl installation. Perhaps leftover bits of an older version somewhere?

Well crake is a Fedora box - and we have no problems on Linux, only on
Windows.

--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

#4Andrew Dunstan
andrew.dunstan@2ndquadrant.com
In reply to: Dave Page (#3)
Re: pl/perl extension fails on Windows

On 07/12/2017 11:49 AM, Dave Page wrote:

On Wed, Jul 12, 2017 at 4:35 PM, Tom Lane <tgl@sss.pgh.pa.us
<mailto:tgl@sss.pgh.pa.us>> wrote:

Sandeep Thakkar <sandeep.thakkar@enterprisedb.com
<mailto:sandeep.thakkar@enterprisedb.com>> writes:

I compiled PG 10 beta1/beta2 with "--with-perl" option on

Windows and the

extension crashes the database.
*src/pl/plperl/Util.c: loadable library and perl binaries are

mismatched

(got handshake key 0A900080, needed 0AC80080)*

This is seen with Perl 5.24 but not with 5.20, 5.16. What I

found is that

the handshake function is added in Perl 5.21.x and probably that

is why we

don't see this issue in earlier versions.

Well, we have various buildfarm machines running perls newer than
that,
eg, crake, with 5.24.1. So I'd say there is something busted
about your
perl installation. Perhaps leftover bits of an older version
somewhere?

Well crake is a Fedora box - and we have no problems on Linux, only on
Windows.

Yeah, I have this on one of my Windows boxes, and haven't had time to
get to the bottom of it yet ;-(

Latest versions of ActivePerl don't ship with library descriptor files,
either, which is unpleasant.

cheers

andrew

--
Andrew Dunstan https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

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

#5Ashutosh Sharma
ashu.coek88@gmail.com
In reply to: Andrew Dunstan (#4)
Re: pl/perl extension fails on Windows

On Thu, Jul 13, 2017 at 12:01 AM, Andrew Dunstan
<andrew.dunstan@2ndquadrant.com> wrote:

On 07/12/2017 11:49 AM, Dave Page wrote:

Well crake is a Fedora box - and we have no problems on Linux, only on
Windows.

Yeah, I have this on one of my Windows boxes, and haven't had time to
get to the bottom of it yet ;-(

I could also see this problem in my Windows machine and I have spent
some time to analyse it. Here are my findings:

The stacktrace where the crash happens is:

perl524.dll!Perl_xs_handshake(const unsigned long key, void
*v_my_perl, const char * file, ...) Line 5569 C
plperl.dll!boot_PostgreSQL__InServer__Util(interpreter * my_perl, cv
* cv) Line 490 + 0x22 bytes C
perl524.dll!Perl_pp_entersub(interpreter * my_perl) Line 3987 + 0xc bytes C
perl524.dll!Perl_runops_standard(interpreter * my_perl) Line 41 + 0x6 bytes C
perl524.dll!S_run_body(interpreter * my_perl, long oldscope) Line 2485 C
perl524.dll!perl_run(interpreter * my_perl) Line 2406 + 0xc bytes C
plperl.dll!plperl_init_interp() Line 829 + 0xb bytes C
plperl.dll!_PG_init() Line 470 + 0x5 bytes C

I couldn't get much out of above bt, but, one thing i could notice is
that the input key passed to 'Perl_xs_handshake()' function is not
matching with the key being generated inside 'Perl_xs_handshake()',
hence, the handshaking is failing.

Please have a look into the following code snippet from 'perl 5.24'
and 'Util.c' file in plperl respectively,

Perl-5.24:
=======
got = INT2PTR(void*, (UV)(key & HSm_KEY_MATCH));
need = (void *)(HS_KEY(FALSE, FALSE, "", "") & HSm_KEY_MATCH);
if (UNLIKELY(got != need))
goto bad_handshake;

Util.c in plperl:
==========
485 XS_EXTERNAL(boot_PostgreSQL__InServer__Util)
486 {
487 #if PERL_VERSION_LE(5, 21, 5)
488 dVAR; dXSARGS;
489 #else
490 dVAR; dXSBOOTARGSAPIVERCHK;

Actually the macro 'dXSBOOTARGSAPIVERCHK' in line #490 gets expanded to,

#define XS_APIVERSION_SETXSUBFN_POPMARK_BOOTCHECK
\
Perl_xs_handshake(HS_KEY(TRUE, TRUE, "v" PERL_API_VERSION_STRING,
""), \
HS_CXT, __FILE__, "v" PERL_API_VERSION_STRING)

And the point to be noted is, the way, the key is being generated in
above macro and in Perl_xs_handshake(). As shown above,
'XS_APIVERSION_SETXSUBFN_POPMARK_BOOTCHECK' macro passes
'PERL_API_VERSION_STRING' as input to HS_KEY() to generate the key and
this key is passed to Perl_xs_handshake function whereas inside
Perl_xs_handshake(), there is no such version string being used to
generate the key. Hence, the key mismatch is seen thereby resulting in
a bad_handshake error.

After doing some study, I could understand that Util.c is generated
from Util.xs by xsubpp compiler at build time. This is being done in
Mkvcbuild.pm file in postgres. If I manually replace
'dXSBOOTARGSAPIVERCHK' macro with 'dXSBOOTARGSNOVERCHK' macro in
src/pl/plperl/Util.c, the things work fine. The diff is as follows,

XS_EXTERNAL(boot_PostgreSQL__InServer__Util)
{
#if PERL_VERSION_LE(5, 21, 5)
dVAR; dXSARGS;
#else
- dVAR; dXSBOOTARGSAPIVERCHK;
+ dVAR; dXSBOOTARGSNOVERCHK;

I need to further investigate, but let me know if you have any ideas.

Latest versions of ActivePerl don't ship with library descriptor files,
either, which is unpleasant.

I too had similar observation and surprisingly, I am seeing
'libperl*.a' file instead of 'perl*.lib' file in most of the
ActiverPerl versions for Windows.

--
With Regards,
Ashutosh Sharma
EnterpriseDB:http://www.enterprisedb.com

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

#6Andrew Dunstan
andrew.dunstan@2ndquadrant.com
In reply to: Ashutosh Sharma (#5)
Re: pl/perl extension fails on Windows

On 07/13/2017 08:08 AM, Ashutosh Sharma wrote:

After doing some study, I could understand that Util.c is generated
from Util.xs by xsubpp compiler at build time. This is being done in
Mkvcbuild.pm file in postgres. If I manually replace
'dXSBOOTARGSAPIVERCHK' macro with 'dXSBOOTARGSNOVERCHK' macro in
src/pl/plperl/Util.c, the things work fine. The diff is as follows,

XS_EXTERNAL(boot_PostgreSQL__InServer__Util)
{
#if PERL_VERSION_LE(5, 21, 5)
dVAR; dXSARGS;
#else
- dVAR; dXSBOOTARGSAPIVERCHK;
+ dVAR; dXSBOOTARGSNOVERCHK;

I need to further investigate, but let me know if you have any ideas.

Good job hunting this down!

One suggestion I saw in a little googling was that we add this to the XS
file after the inclusion of XSUB.h:

#undef dXSBOOTARGSAPIVERCHK
#define dXSBOOTARGSAPIVERCHK dXSBOOTARGSNOVERCHK

cheers

andrew

--
Andrew Dunstan https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

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

#7Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#6)
Re: pl/perl extension fails on Windows

Andrew Dunstan <andrew.dunstan@2ndquadrant.com> writes:

On 07/13/2017 08:08 AM, Ashutosh Sharma wrote:

-    dVAR; dXSBOOTARGSAPIVERCHK;
+    dVAR; dXSBOOTARGSNOVERCHK;

Good job hunting this down!
One suggestion I saw in a little googling was that we add this to the XS
file after the inclusion of XSUB.h:
#undef dXSBOOTARGSAPIVERCHK
#define dXSBOOTARGSAPIVERCHK dXSBOOTARGSNOVERCHK

I don't see anything even vaguely like that in the Util.c file generated
by Perl 5.10.1, which is what I've got on my RHEL machine.

What I do notice is this in Util.xs:

VERSIONCHECK: DISABLE

which leads immediately to two questions:

1. Why is your version of xsubpp apparently ignoring this directive
and generating a version check anyway?

2. Why do we have this directive in the first place? It does not seem
to me like a terribly great idea to ignore low-level version mismatches.

In the same vein, I'm suspicious of proposals to "fix" this problem
by removing the version check, which seems to be where Ashutosh
is headed. In the long run that seems certain to cause huge headaches.

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

#8Andrew Dunstan
andrew.dunstan@2ndquadrant.com
In reply to: Tom Lane (#7)
Re: pl/perl extension fails on Windows

On 07/13/2017 10:36 AM, Tom Lane wrote:

Andrew Dunstan <andrew.dunstan@2ndquadrant.com> writes:

On 07/13/2017 08:08 AM, Ashutosh Sharma wrote:

-    dVAR; dXSBOOTARGSAPIVERCHK;
+    dVAR; dXSBOOTARGSNOVERCHK;

Good job hunting this down!
One suggestion I saw in a little googling was that we add this to the XS
file after the inclusion of XSUB.h:
#undef dXSBOOTARGSAPIVERCHK
#define dXSBOOTARGSAPIVERCHK dXSBOOTARGSNOVERCHK

I don't see anything even vaguely like that in the Util.c file generated
by Perl 5.10.1, which is what I've got on my RHEL machine.

This is all fairly modern, so it's hardly surprising that it doesn't
happen with the ancient perl 5.10.

here's a snippet from the generated Util.c on crake (Fedora 25, perl 5.24):

XS_EXTERNAL(boot_PostgreSQL__InServer__Util); /* prototype to pass
-Wmissing-prototypes */
XS_EXTERNAL(boot_PostgreSQL__InServer__Util)
{
#if PERL_VERSION_LE(5, 21, 5)
dVAR; dXSARGS;
#else
dVAR; dXSBOOTARGSAPIVERCHK;
#endif

What I do notice is this in Util.xs:

VERSIONCHECK: DISABLE

which leads immediately to two questions:

1. Why is your version of xsubpp apparently ignoring this directive
and generating a version check anyway?

2. Why do we have this directive in the first place? It does not seem
to me like a terribly great idea to ignore low-level version mismatches.

In the same vein, I'm suspicious of proposals to "fix" this problem
by removing the version check, which seems to be where Ashutosh
is headed. In the long run that seems certain to cause huge headaches.

That is a different version check. It's the equivalent of xsubpp's
--noversioncheck flag. The versions it would check are the object file
and the corresponding pm file.

In fact the usage I suggested seems to be blessed in XSUB.h in this comment:

/* dXSBOOTARGSNOVERCHK has no API in xsubpp to choose it so do
#undef dXSBOOTARGSXSAPIVERCHK
#define dXSBOOTARGSXSAPIVERCHK dXSBOOTARGSNOVERCHK */

It would be nice to get to the bottom of why we're getting a version
mismatch on Windows, since we're clearly not getting one on Linux. But
since we've got on happily all these years without the API version check
we might well survive a few more going on as we are.

cheers

andrew

--
Andrew Dunstan https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

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

#9Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#8)
Re: pl/perl extension fails on Windows

Andrew Dunstan <andrew.dunstan@2ndquadrant.com> writes:

It would be nice to get to the bottom of why we're getting a version
mismatch on Windows, since we're clearly not getting one on Linux.

Yeah, that's what's bothering me: as long as that remains unexplained,
I don't have any confidence that we're fixing the right thing.

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

#10Christoph Berg
myon@debian.org
In reply to: Dave Page (#3)
Re: pl/perl extension fails on Windows

Re: Dave Page 2017-07-12 <CA+OCxox=h5xftcnyk1AfA_QKSQSruD=Er0qweZakiCEg3U4rcg@mail.gmail.com>

Well, we have various buildfarm machines running perls newer than that,
eg, crake, with 5.24.1. So I'd say there is something busted about your
perl installation. Perhaps leftover bits of an older version somewhere?

Well crake is a Fedora box - and we have no problems on Linux, only on
Windows.

The plperl segfault on Debian's kfreebsd port I reported back in 2013
is also still present:

/messages/by-id/20130515064201.GC704@msgid.df7cb.de

https://buildd.debian.org/status/fetch.php?pkg=postgresql-10&amp;arch=kfreebsd-amd64&amp;ver=10~beta2-1&amp;stamp=1499947011&amp;raw=0

(Arguably, this is a toy architecture, so we can just leave it unfixed
there without any harm...)

Christoph

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

#11Ashutosh Sharma
ashu.coek88@gmail.com
In reply to: Andrew Dunstan (#6)
1 attachment(s)
Re: pl/perl extension fails on Windows

On Thu, Jul 13, 2017 at 6:04 PM, Andrew Dunstan
<andrew.dunstan@2ndquadrant.com> wrote:

On 07/13/2017 08:08 AM, Ashutosh Sharma wrote:

After doing some study, I could understand that Util.c is generated
from Util.xs by xsubpp compiler at build time. This is being done in
Mkvcbuild.pm file in postgres. If I manually replace
'dXSBOOTARGSAPIVERCHK' macro with 'dXSBOOTARGSNOVERCHK' macro in
src/pl/plperl/Util.c, the things work fine. The diff is as follows,

XS_EXTERNAL(boot_PostgreSQL__InServer__Util)
{
#if PERL_VERSION_LE(5, 21, 5)
dVAR; dXSARGS;
#else
- dVAR; dXSBOOTARGSAPIVERCHK;
+ dVAR; dXSBOOTARGSNOVERCHK;

I need to further investigate, but let me know if you have any ideas.

Good job hunting this down!

One suggestion I saw in a little googling was that we add this to the XS
file after the inclusion of XSUB.h:

#undef dXSBOOTARGSAPIVERCHK
#define dXSBOOTARGSAPIVERCHK dXSBOOTARGSNOVERCHK

Thanks for that suggestion. It was really helpful. I think, the point
is, in XSUB.h, the macro 'dXSBOOTARGSXSAPIVERCHK' has been redefined
for novercheck but surprisingly it hasn't been done for
'dXSBOOTARGSAPIVERCHK' macro and that could be the reason why we want
to redefine it in the XS file after including XSUB.h file. Attached is
the patch that redefines 'dXSBOOTARGSAPIVERCHK' in Util.xs and SPI.xs
files. Please have a look into the attached patch and let me know your
comments. Thanks.

--
With Regards,
Ashutosh Sharma
EnterpriseDB:http://www.enterprisedb.com

Attachments:

redefine_dXSBOOTARGSAPIVERCHK_macro.patchapplication/octet-stream; name=redefine_dXSBOOTARGSAPIVERCHK_macro.patchDownload
diff --git a/src/pl/plperl/SPI.xs b/src/pl/plperl/SPI.xs
index 0447c50..1175426 100644
--- a/src/pl/plperl/SPI.xs
+++ b/src/pl/plperl/SPI.xs
@@ -18,6 +18,8 @@
 #include "plperl.h"
 #include "plperl_helpers.h"
 
+#undef dXSBOOTARGSAPIVERCHK
+#define dXSBOOTARGSAPIVERCHK dXSBOOTARGSNOVERCHK
 
 /*
  * Interface routine to catch ereports and punt them to Perl
diff --git a/src/pl/plperl/Util.xs b/src/pl/plperl/Util.xs
index dbba0d7..d642aa5 100644
--- a/src/pl/plperl/Util.xs
+++ b/src/pl/plperl/Util.xs
@@ -23,6 +23,9 @@
 #include "plperl.h"
 #include "plperl_helpers.h"
 
+#undef dXSBOOTARGSAPIVERCHK
+#define dXSBOOTARGSAPIVERCHK dXSBOOTARGSNOVERCHK
+
 /*
  * Implementation of plperl's elog() function
  *
#12Ashutosh Sharma
ashu.coek88@gmail.com
In reply to: Tom Lane (#9)
Re: pl/perl extension fails on Windows

On Thu, Jul 13, 2017 at 10:30 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Andrew Dunstan <andrew.dunstan@2ndquadrant.com> writes:

It would be nice to get to the bottom of why we're getting a version
mismatch on Windows, since we're clearly not getting one on Linux.

Yeah, that's what's bothering me: as long as that remains unexplained,
I don't have any confidence that we're fixing the right thing.

Okay, I tried to explore on this a bit and my findings are as follows.

On Linux, the handshake key being generated in plperl code i.e. inside
XS_EXTERNAL() in Util.c (generated from Util.xs during build time) and perl
code (inside Perl_xs_handshake function) are same which means the following
condition inside Perl_xs_handshake() becomes true and therefore, there is
no mismatch error.

got = INT2PTR(void*, (UV)(key & HSm_KEY_MATCH));
need = (void *)(HS_KEY(FALSE, FALSE, "", "") & HSm_KEY_MATCH);
if (UNLIKELY(got != need))
goto bad_handshake;

However, on Windows, the handshake key generated in plperl code inside
XS_EXTERNAL() and in perl code i.e. inside Perl_xs_handshake() are
different thereby resulting in a mismatch error.

Actually the function used for generation of handshake Key i.e HS_KEYp()
considers 'sizeof(PerlInterpreter)' to generate the key and somehow the
sizeof PerlInterpreter is not uniform in plperl and perl modules incase of
Windows but on Linux it remains same in both the modules.

This is how PerlInterpreter is defined in Perl source,

*typedef struct interpreter PerlInterpreter;struct interpreter {# include
"intrpvar.h"};*

where intrpvar.h has different variables defined inside it and most of the
variables definition are protected with various macros. And there are some
macros that are just defined in perl but not in plperl module which means
the sizeof(PerlInterpreter) on the two modules are going to be different
and thereby resulting in a different key. But, then the point is, why no
such difference is observed on Linux. Well, as of now, i haven't found the
reason behind it and i am still investigating on it.

--
With Regards,
Ashutosh Sharma
EnterpriseDB:http://www.enterprisedb.com

Show quoted text

regards, tom lane

#13Tom Lane
tgl@sss.pgh.pa.us
In reply to: Ashutosh Sharma (#12)
Re: pl/perl extension fails on Windows

Ashutosh Sharma <ashu.coek88@gmail.com> writes:

Actually the function used for generation of handshake Key i.e HS_KEYp()
considers 'sizeof(PerlInterpreter)' to generate the key and somehow the
sizeof PerlInterpreter is not uniform in plperl and perl modules incase of
Windows but on Linux it remains same in both the modules.

Yipes. So actually, this is catching a live ABI problem, which presumably
we've escaped seeing bad effects from only through sheer good luck.
I suppose that the discrepancies in the struct contents only occur after
the last field that plperl happens to touch directly --- but that is
unlikely to be true forever.

*typedef struct interpreter PerlInterpreter;struct interpreter {# include
"intrpvar.h"};*
where intrpvar.h has different variables defined inside it and most of the
variables definition are protected with various macros. And there are some
macros that are just defined in perl but not in plperl module which means
the sizeof(PerlInterpreter) on the two modules are going to be different
and thereby resulting in a different key.

I imagine the route to a solution is to fix things so that the relevant
macros are all defined correctly in both cases. But why they aren't
already is certainly an interesting question. Have you identified just
which fields are added or missing relative to what libperl thinks?

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

#14Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#13)
Re: pl/perl extension fails on Windows

On Wed, Jul 19, 2017 at 12:12 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Ashutosh Sharma <ashu.coek88@gmail.com> writes:

Actually the function used for generation of handshake Key i.e HS_KEYp()
considers 'sizeof(PerlInterpreter)' to generate the key and somehow the
sizeof PerlInterpreter is not uniform in plperl and perl modules incase of
Windows but on Linux it remains same in both the modules.

Yipes.

+1 for "yipes". It sounds like we should really try to fix the
underlying problem, rather than just working around the check.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

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

#15Ashutosh Sharma
ashu.coek88@gmail.com
In reply to: Tom Lane (#13)
Re: pl/perl extension fails on Windows

On Wed, Jul 19, 2017 at 9:42 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Ashutosh Sharma <ashu.coek88@gmail.com> writes:

Actually the function used for generation of handshake Key i.e HS_KEYp()
considers 'sizeof(PerlInterpreter)' to generate the key and somehow the
sizeof PerlInterpreter is not uniform in plperl and perl modules incase of
Windows but on Linux it remains same in both the modules.

Yipes. So actually, this is catching a live ABI problem, which presumably
we've escaped seeing bad effects from only through sheer good luck.
I suppose that the discrepancies in the struct contents only occur after
the last field that plperl happens to touch directly --- but that is
unlikely to be true forever.

*typedef struct interpreter PerlInterpreter;struct interpreter {# include
"intrpvar.h"};*
where intrpvar.h has different variables defined inside it and most of the
variables definition are protected with various macros. And there are some
macros that are just defined in perl but not in plperl module which means
the sizeof(PerlInterpreter) on the two modules are going to be different
and thereby resulting in a different key.

I imagine the route to a solution is to fix things so that the relevant
macros are all defined correctly in both cases. But why they aren't
already is certainly an interesting question. Have you identified just
which fields are added or missing relative to what libperl thinks?

Here are the list of macros and variables from 'intrpvar.h' file that
are just defined in perl module but not in plperl on Windows,

#ifdef PERL_USES_PL_PIDSTATUS
PERLVAR(I, pidstatus, HV *) /* pid-to-status mappings for waitpid */
#endif

#ifdef PERL_SAWAMPERSAND
PERLVAR(I, sawampersand, U8) /* must save all match strings */
#endif

#ifdef FCRYPT
PERLVARI(I, cryptseen, bool, FALSE) /* has fast crypt() been initialized? */
#else
/* One byte hole in the interpreter structure. */
#endif

#ifdef USE_REENTRANT_API
PERLVAR(I, reentrant_buffer, REENTR *) /* here we store the _r buffers */
#endif

#ifdef PERL_GLOBAL_STRUCT_PRIVATE
PERLVARI(I, my_cxt_keys, const char **, NULL) /* per-module array of
pointers to MY_CXT_KEY constants */
# endif

#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
/* File descriptor to talk to the child which dumps scalars. */
PERLVARI(I, dumper_fd, int, -1)
#endif

#ifdef DEBUG_LEAKING_SCALARS
PERLVARI(I, sv_serial, U32, 0) /* SV serial number, used in sv.c */
#endif

#ifdef PERL_TRACE_OPS
PERLVARA(I, op_exec_cnt, OP_max+2, UV)
#endif

--
With Regards,
Ashutosh Sharma
EnterpriseDB:http://www.enterprisedb.com

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

#16Tom Lane
tgl@sss.pgh.pa.us
In reply to: Ashutosh Sharma (#15)
Re: pl/perl extension fails on Windows

Ashutosh Sharma <ashu.coek88@gmail.com> writes:

On Wed, Jul 19, 2017 at 9:42 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

I imagine the route to a solution is to fix things so that the relevant
macros are all defined correctly in both cases. But why they aren't
already is certainly an interesting question. Have you identified just
which fields are added or missing relative to what libperl thinks?

Here are the list of macros and variables from 'intrpvar.h' file that
are just defined in perl module but not in plperl on Windows,

#ifdef PERL_USES_PL_PIDSTATUS
PERLVAR(I, pidstatus, HV *) /* pid-to-status mappings for waitpid */
#endif

#ifdef PERL_SAWAMPERSAND
PERLVAR(I, sawampersand, U8) /* must save all match strings */
#endif

#ifdef FCRYPT
PERLVARI(I, cryptseen, bool, FALSE) /* has fast crypt() been initialized? */
#else
/* One byte hole in the interpreter structure. */
#endif

#ifdef USE_REENTRANT_API
PERLVAR(I, reentrant_buffer, REENTR *) /* here we store the _r buffers */
#endif

#ifdef PERL_GLOBAL_STRUCT_PRIVATE
PERLVARI(I, my_cxt_keys, const char **, NULL) /* per-module array of
pointers to MY_CXT_KEY constants */
# endif

#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
/* File descriptor to talk to the child which dumps scalars. */
PERLVARI(I, dumper_fd, int, -1)
#endif

#ifdef DEBUG_LEAKING_SCALARS
PERLVARI(I, sv_serial, U32, 0) /* SV serial number, used in sv.c */
#endif

#ifdef PERL_TRACE_OPS
PERLVARA(I, op_exec_cnt, OP_max+2, UV)
#endif

Huh. So those seem like symbols that ought to be exposed somewhere in
Perl's headers. Perhaps we're failing to #include some "perl_config.h" or
equivalent file that records these ABI options?

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

#17Tom Lane
tgl@sss.pgh.pa.us
In reply to: Ashutosh Sharma (#15)
Re: pl/perl extension fails on Windows

Ashutosh Sharma <ashu.coek88@gmail.com> writes:

Here are the list of macros and variables from 'intrpvar.h' file that
are just defined in perl module but not in plperl on Windows,

#ifdef PERL_USES_PL_PIDSTATUS
PERLVAR(I, pidstatus, HV *) /* pid-to-status mappings for waitpid */
#endif

#ifdef PERL_SAWAMPERSAND
PERLVAR(I, sawampersand, U8) /* must save all match strings */
#endif

I am really suspicious that this means your libperl was built in an unsafe
fashion, that is, by injecting configuration choices as random -D switches
in the build process rather than making sure the choices were recorded in
perl's config.h. As an example, looking at the perl 5.24.1 headers on
a Fedora box, it looks to me like PERL_SAWAMPERSAND could only get defined
if PERL_COPY_ON_WRITE were not defined, and the only way that that can
happen is if PERL_NO_COW is defined, and there are no references to the
latter anyplace except in this particular #if defined test in perl.h.

Where did your perl installation come from, anyway? Are you sure the .h
files match up with the executables?

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

#18Noah Misch
noah@leadboat.com
In reply to: Tom Lane (#17)
Re: pl/perl extension fails on Windows

On Wed, Jul 19, 2017 at 05:01:31PM -0400, Tom Lane wrote:

Ashutosh Sharma <ashu.coek88@gmail.com> writes:

Here are the list of macros and variables from 'intrpvar.h' file that
are just defined in perl module but not in plperl on Windows,

#ifdef PERL_USES_PL_PIDSTATUS
PERLVAR(I, pidstatus, HV *) /* pid-to-status mappings for waitpid */
#endif

#ifdef PERL_SAWAMPERSAND
PERLVAR(I, sawampersand, U8) /* must save all match strings */
#endif

I am really suspicious that this means your libperl was built in an unsafe
fashion, that is, by injecting configuration choices as random -D switches
in the build process rather than making sure the choices were recorded in
perl's config.h. As an example, looking at the perl 5.24.1 headers on
a Fedora box, it looks to me like PERL_SAWAMPERSAND could only get defined
if PERL_COPY_ON_WRITE were not defined, and the only way that that can
happen is if PERL_NO_COW is defined, and there are no references to the
latter anyplace except in this particular #if defined test in perl.h.

Where did your perl installation come from, anyway? Are you sure the .h
files match up with the executables?

I see corresponding symptoms with the following Perl distributions:

strawberry-perl-5.26.0.1-64bit.msi:
src/pl/plperl/Util.c: loadable library and perl binaries are mismatched (got handshake key 0000000011800080, needed 0000000011c00080)
ActivePerl-5.24.1.2402-MSWin32-x64-401627.exe:
src/pl/plperl/Util.c: loadable library and perl binaries are mismatched (got handshake key 0000000011500080, needed 0000000011900080)

So, this affects each of the two prominent families of Perl Windows binaries.
Notes for anyone trying to reproduce:

- Both of those Perl distributions require the hacks described here:
/messages/by-id/CABcP5fjEjgOsh097cWnQrsK9yCswo4DZxp-V47DKCH-MxY9Gig@mail.gmail.com
- Add PERL_USE_UNSAFE_INC=1 to the environment until we update things to cope
with this Perl 5.26 change:
http://search.cpan.org/~xsawyerx/perl-5.26.0/pod/perldelta.pod#Removal_of_the_current_directory_(%22.%22)_from_@INC

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

#19Amit Kapila
amit.kapila16@gmail.com
In reply to: Noah Misch (#18)
Re: pl/perl extension fails on Windows

On Mon, Jul 24, 2017 at 11:58 AM, Noah Misch <noah@leadboat.com> wrote:

On Wed, Jul 19, 2017 at 05:01:31PM -0400, Tom Lane wrote:

Ashutosh Sharma <ashu.coek88@gmail.com> writes:

Here are the list of macros and variables from 'intrpvar.h' file that
are just defined in perl module but not in plperl on Windows,

#ifdef PERL_USES_PL_PIDSTATUS
PERLVAR(I, pidstatus, HV *) /* pid-to-status mappings for waitpid */
#endif

#ifdef PERL_SAWAMPERSAND
PERLVAR(I, sawampersand, U8) /* must save all match strings */
#endif

I am really suspicious that this means your libperl was built in an unsafe
fashion, that is, by injecting configuration choices as random -D switches
in the build process rather than making sure the choices were recorded in
perl's config.h. As an example, looking at the perl 5.24.1 headers on
a Fedora box, it looks to me like PERL_SAWAMPERSAND could only get defined
if PERL_COPY_ON_WRITE were not defined, and the only way that that can
happen is if PERL_NO_COW is defined, and there are no references to the
latter anyplace except in this particular #if defined test in perl.h.

Where did your perl installation come from, anyway? Are you sure the .h
files match up with the executables?

I see corresponding symptoms with the following Perl distributions:

strawberry-perl-5.26.0.1-64bit.msi:
src/pl/plperl/Util.c: loadable library and perl binaries are mismatched (got handshake key 0000000011800080, needed 0000000011c00080)
ActivePerl-5.24.1.2402-MSWin32-x64-401627.exe:
src/pl/plperl/Util.c: loadable library and perl binaries are mismatched (got handshake key 0000000011500080, needed 0000000011900080)

So, this affects each of the two prominent families of Perl Windows binaries.

I think the real question is where do we go from here. Ashutosh has
proposed a patch up-thread based on a suggestion from Andrew, but it
is not clear if we want to go there as that seems to be bypassing
handshake mechanism. The other tests and analysis seem to indicate
that the new version Perl binaries on Windows are getting built with
flags that are incompatible with what we use for plperl and it is not
clear why perl is using those flags. Do you think we can do something
at our end to make it work or someone should check with Perl community
about it?

--
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com

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

#20Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#17)
Re: pl/perl extension fails on Windows

On Wed, Jul 19, 2017 at 5:01 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

I am really suspicious that this means your libperl was built in an unsafe
fashion, that is, by injecting configuration choices as random -D switches
in the build process rather than making sure the choices were recorded in
perl's config.h. As an example, looking at the perl 5.24.1 headers on
a Fedora box, it looks to me like PERL_SAWAMPERSAND could only get defined
if PERL_COPY_ON_WRITE were not defined, and the only way that that can
happen is if PERL_NO_COW is defined, and there are no references to the
latter anyplace except in this particular #if defined test in perl.h.

Hmm, it might not be so random as all that. Have a look at this
commit log entry:

commit 1a904fc88069e249a4bd0ef196a3f1a7f549e0fe
Author: Father Chrysostomos <sprout@cpan.org>
Date: Sun Nov 25 12:57:04 2012 -0800

Disable PL_sawampersand

PL_sawampersand actually causes bugs (e.g., perl #4289), because the
behaviour changes. eval '$&' after a match will produce different
results depending on whether $& was seen before the match.

Using copy-on-write for the pre-match copy (preceding patches do that)
alleviates the slowdown caused by mentioning $&. The copy doesn’t
happen unless the string is modified after the match. It’s now a
post- match copy. So we no longer need to do things differently
depending on whether $& has been seen.

PL_sawampersand is now #defined to be equal to what it would be if
every program began with $',$&,$`.

I left the PL_sawampersand code in place, in case this commit proves
immature. Running Configure with -Accflags=PERL_SAWAMPERSAND will
reënable the PL_sawampersand mechanism.

Based on a bit of experimentation, that last bit contains a typo: it
should say -Accflags=-DPERL_SAWAMPERSAND; as written, the -D is
missing.[1]Arguably, the umlaut over "reenable" is also a typo, but that's a sort of in a different category. Anyway, the point is that at least in this case, there
seems to have been some idea that somebody might want to reenable this
in their own build even after it was disabled by default.

Perl also has a mechanism for flags added to Configure to be passed
along when building loadable modules; if it didn't, not just plperl
but every Perl module written in C would have this issue if any such
flags where used. Normally, you compile perl modules by running "perl
Makefile.PL" to generate a makefile, and then building from the
makefile. If you do that, then the Makefile ends up with a section in
it that looks like this:

# --- MakeMaker cflags section:

CCFLAGS = -fno-strict-aliasing -pipe -fstack-protector-strong
-I/opt/local/include -DPERL_USE_SAFE_PUTENV -DPERL_SAWAMPERSAND -Wall
-Werror=declaration-after-statement -Wextra -Wc++-compat
-Wwrite-strings
OPTIMIZE = -O3
PERLTYPE =
MPOLLUTE =

...and lo-and-behold, the -DPERL_SAWAMPERSAND flag which I passed to
Configure is there. After a bit of time deciphering how MakeMaker
actually works, I figured out that it gets the value for CFLAGS by
doing "use Config;" and then referencing $Config::Config{'ccflags'};
an alternative way to get it, from the shell, is to run perl
-V:ccflags.

While I'm not sure of the details, I suspect that we need to use one
of those methods to get the CCFLAGS used to build perl, and include
those when SPI.o, Util.o, and plperl.o in src/pl/plperl. Or at least
the -D switches from those CCFLAGS. Here's about the simplest thing
that seems like it might work on Linux; Windows would need something
equivalent:

override CPPFLAGS += $(shell $(PERL) -MConfig -e 'print
$$Config::Config{"ccflags"};')

On my MacBook Pro, with the built-in switches, that produces:

-fno-common -DPERL_DARWIN -mmacosx-version-min=10.12 -pipe -Os
-fno-strict-aliasing -fstack-protector-strong -I/opt/local/include
-DPERL_USE_SAFE_PUTENV

Or we could try to extract just the -D switches:

override CPPFLAGS += $(shell $(PERL) -MConfig -e 'print join " ", grep
{ /^-D/ } split /\s+/, $$Config::Config{"ccflags"};')

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

[1]: Arguably, the umlaut over "reenable" is also a typo, but that's a sort of in a different category.
sort of in a different category.

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

#21Andrew Dunstan
andrew.dunstan@2ndquadrant.com
In reply to: Amit Kapila (#19)
Re: pl/perl extension fails on Windows

On 07/25/2017 08:58 AM, Amit Kapila wrote:

I think the real question is where do we go from here. Ashutosh has
proposed a patch up-thread based on a suggestion from Andrew, but it
is not clear if we want to go there as that seems to be bypassing
handshake mechanism. The other tests and analysis seem to indicate
that the new version Perl binaries on Windows are getting built with
flags that are incompatible with what we use for plperl and it is not
clear why perl is using those flags. Do you think we can do something
at our end to make it work or someone should check with Perl community
about it?

No amount of checking with the Perl community is likely to resolve this
quickly w.r.t. existing releases of Perl.

We seem to have a choice either to abandon, at least temporarily, perl
support on Windows for versions of perl >= 5.20 (I think) or adopt the
suggestion I made. It's not a complete hack - it's something at least
somewhat blessed in perl's XSUB.h:

/* dXSBOOTARGSNOVERCHK has no API in xsubpp to choose it so do
#undef dXSBOOTARGSXSAPIVERCHK
#define dXSBOOTARGSXSAPIVERCHK dXSBOOTARGSNOVERCHK */

Note that on earlier versions of perl we got by without this check for
years without any issue or complaint I recall hearing of. If we don't
adopt this I would not be at all surprised to see Windows packagers
adopt it anyway.

cheers

andrew

--
Andrew Dunstan https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

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

#22Tom Lane
tgl@sss.pgh.pa.us
In reply to: Amit Kapila (#19)
Re: pl/perl extension fails on Windows

Amit Kapila <amit.kapila16@gmail.com> writes:

I think the real question is where do we go from here. Ashutosh has
proposed a patch up-thread based on a suggestion from Andrew, but it
is not clear if we want to go there as that seems to be bypassing
handshake mechanism.

That definitely seems like the wrong route to me. If the resulting
code works, it would at best be accidental.

The other tests and analysis seem to indicate
that the new version Perl binaries on Windows are getting built with
flags that are incompatible with what we use for plperl and it is not
clear why perl is using those flags. Do you think we can do something
at our end to make it work or someone should check with Perl community
about it?

It would be a good idea to find somebody who knows more about how these
Perl distros are built.

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

#23Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#21)
Re: pl/perl extension fails on Windows

Andrew Dunstan <andrew.dunstan@2ndquadrant.com> writes:

No amount of checking with the Perl community is likely to resolve this
quickly w.r.t. existing releases of Perl.

Yes, but if they are shipping broken perl builds that cannot support
building of extension modules, they need to be made aware of that.
If that *isn't* the explanation, then we need to find out what is.

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

#24Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Haas (#20)
Re: pl/perl extension fails on Windows

Robert Haas <robertmhaas@gmail.com> writes:

Perl also has a mechanism for flags added to Configure to be passed
along when building loadable modules; if it didn't, not just plperl
but every Perl module written in C would have this issue if any such
flags where used.
...
While I'm not sure of the details, I suspect that we need to use one
of those methods to get the CCFLAGS used to build perl, and include
those when SPI.o, Util.o, and plperl.o in src/pl/plperl. Or at least
the -D switches from those CCFLAGS.

Hm, I had the idea that we were already asking ExtUtils::Embed for that,
but now I see we only inquire about LDFLAGS not CCFLAGS. Yes, this sounds
like a promising avenue to pursue.

It would be useful to see the results of

perl -MExtUtils::Embed -e ccopts

on one of the affected installations, and compare that to the problematic
field(s).

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

#25Andrew Dunstan
andrew.dunstan@2ndquadrant.com
In reply to: Tom Lane (#24)
Re: pl/perl extension fails on Windows

On 07/25/2017 11:00 AM, Tom Lane wrote:

Robert Haas <robertmhaas@gmail.com> writes:

Perl also has a mechanism for flags added to Configure to be passed
along when building loadable modules; if it didn't, not just plperl
but every Perl module written in C would have this issue if any such
flags where used.
...
While I'm not sure of the details, I suspect that we need to use one
of those methods to get the CCFLAGS used to build perl, and include
those when SPI.o, Util.o, and plperl.o in src/pl/plperl. Or at least
the -D switches from those CCFLAGS.

Hm, I had the idea that we were already asking ExtUtils::Embed for that,
but now I see we only inquire about LDFLAGS not CCFLAGS. Yes, this sounds
like a promising avenue to pursue.

It would be useful to see the results of

perl -MExtUtils::Embed -e ccopts

on one of the affected installations, and compare that to the problematic
field(s).

-s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -DPERL_TEXTMODE_SCRIPTS
-DUSE_SITECUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fwrapv
-fno-strict-aliasing -mms-bitfields -I"C:\Perl64\lib\CORE"

cheers

andrew

--
Andrew Dunstan https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

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

#26Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#24)
Re: pl/perl extension fails on Windows

On Tue, Jul 25, 2017 at 11:00 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Hm, I had the idea that we were already asking ExtUtils::Embed for that,
but now I see we only inquire about LDFLAGS not CCFLAGS. Yes, this sounds
like a promising avenue to pursue.

It would be useful to see the results of

perl -MExtUtils::Embed -e ccopts

on one of the affected installations, and compare that to the problematic
field(s).

Why ccopts rather than ccflags?

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

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

#27Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Haas (#26)
Re: pl/perl extension fails on Windows

Robert Haas <robertmhaas@gmail.com> writes:

On Tue, Jul 25, 2017 at 11:00 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Hm, I had the idea that we were already asking ExtUtils::Embed for that,
but now I see we only inquire about LDFLAGS not CCFLAGS. Yes, this sounds
like a promising avenue to pursue.

It would be useful to see the results of
perl -MExtUtils::Embed -e ccopts
on one of the affected installations, and compare that to the problematic
field(s).

Why ccopts rather than ccflags?

I was looking at the current code which fetches ldopts, and analogizing.
Don't know the difference between ccflags and ccopts.

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

#28Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#27)
Re: pl/perl extension fails on Windows

On Tue, Jul 25, 2017 at 11:32 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Robert Haas <robertmhaas@gmail.com> writes:

On Tue, Jul 25, 2017 at 11:00 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Hm, I had the idea that we were already asking ExtUtils::Embed for that,
but now I see we only inquire about LDFLAGS not CCFLAGS. Yes, this sounds
like a promising avenue to pursue.

It would be useful to see the results of
perl -MExtUtils::Embed -e ccopts
on one of the affected installations, and compare that to the problematic
field(s).

Why ccopts rather than ccflags?

I was looking at the current code which fetches ldopts, and analogizing.
Don't know the difference between ccflags and ccopts.

Oh, here I was thinking you were 3 steps ahead of me. :-)

Per "perldoc ExtUtils::Embed", ccopts() = perl_inc() plus ccflags()
plus ccdlflags().

On my system:

[rhaas pgsql]$ perl -MExtUtils::Embed -e 'for (qw(ccopts ccflags
ccdlflags perl_inc)) { print "==$_==\n"; eval "$_()"; print "\n\n";
};'
==ccopts==
-fno-common -DPERL_DARWIN -mmacosx-version-min=10.12 -pipe -Os
-fno-strict-aliasing -fstack-protector-strong -I/opt/local/include
-DPERL_USE_SAFE_PUTENV
-I/opt/local/lib/perl5/5.24/darwin-thread-multi-2level/CORE

==ccflags==
-fno-common -DPERL_DARWIN -mmacosx-version-min=10.12 -pipe -Os
-fno-strict-aliasing -fstack-protector-strong -I/opt/local/include
-DPERL_USE_SAFE_PUTENV

==ccdlflags==

==perl_inc==
-I/opt/local/lib/perl5/5.24/darwin-thread-multi-2level/CORE

I don't have a clear sense of whether ccopts() or ccflags() is what we
want here, but FWIW ccopts() is more inclusive.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

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

#29Andrew Dunstan
andrew.dunstan@2ndquadrant.com
In reply to: Tom Lane (#27)
Re: pl/perl extension fails on Windows

On 07/25/2017 11:32 AM, Tom Lane wrote:

Robert Haas <robertmhaas@gmail.com> writes:

On Tue, Jul 25, 2017 at 11:00 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Hm, I had the idea that we were already asking ExtUtils::Embed for that,
but now I see we only inquire about LDFLAGS not CCFLAGS. Yes, this sounds
like a promising avenue to pursue.

It would be useful to see the results of
perl -MExtUtils::Embed -e ccopts
on one of the affected installations, and compare that to the problematic
field(s).

Why ccopts rather than ccflags?

I was looking at the current code which fetches ldopts, and analogizing.
Don't know the difference between ccflags and ccopts.

per docs:

ccopts()
This function combines "perl_inc()", "ccflags()" and
"ccdlflags()"
into one.

cheers

andrew

--
Andrew Dunstan https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

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

#30Robert Haas
robertmhaas@gmail.com
In reply to: Robert Haas (#20)
Re: pl/perl extension fails on Windows

On Tue, Jul 25, 2017 at 10:23 AM, Robert Haas <robertmhaas@gmail.com> wrote:

While I'm not sure of the details, I suspect that we need to use one
of those methods to get the CCFLAGS used to build perl, and include
those when SPI.o, Util.o, and plperl.o in src/pl/plperl. Or at least
the -D switches from those CCFLAGS. Here's about the simplest thing
that seems like it might work on Linux; Windows would need something
equivalent:

override CPPFLAGS += $(shell $(PERL) -MConfig -e 'print
$$Config::Config{"ccflags"};')

On my MacBook Pro, with the built-in switches, that produces:

-fno-common -DPERL_DARWIN -mmacosx-version-min=10.12 -pipe -Os
-fno-strict-aliasing -fstack-protector-strong -I/opt/local/include
-DPERL_USE_SAFE_PUTENV

Or we could try to extract just the -D switches:

override CPPFLAGS += $(shell $(PERL) -MConfig -e 'print join " ", grep
{ /^-D/ } split /\s+/, $$Config::Config{"ccflags"};')

Based on discussion downthread, it seems like what we actually need to
do is update perl.m4 to extract CCFLAGS. Turns out somebody proposed
a patch for that back in 2002:

/messages/by-id/Pine.LNX.4.44.0211051045070.16317-200000@wotan.suse.de

It seems to need a rebase. :-)

And maybe some other changes, too. I haven't carefully reviewed that thread.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

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

#31Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Haas (#30)
Re: pl/perl extension fails on Windows

Robert Haas <robertmhaas@gmail.com> writes:

Based on discussion downthread, it seems like what we actually need to
do is update perl.m4 to extract CCFLAGS. Turns out somebody proposed
a patch for that back in 2002:
/messages/by-id/Pine.LNX.4.44.0211051045070.16317-200000@wotan.suse.de
It seems to need a rebase. :-)

Ah-hah, I *thought* we had considered the question once upon a time.
There were some pretty substantial compatibility concerns raised in that
thread, which is doubtless why it's still like that.

My beef about inter-compiler compatibility (if building PG with a
different compiler from that used for Perl) could probably be addressed by
absorbing only -D switches from the Perl flags. But Peter seemed to feel
that even that could break things, and I worry that he's right for cases
like -D_FILE_OFFSET_BITS which affect libc APIs. Usually we'd have made
the same decisions as Perl for that sort of thing, but if we didn't, it's
a mess.

I wonder whether we could adopt some rule like "absorb -D switches
for macros whose names do not begin with an underscore". That's
surely a hack and three-quarters, but it seems safer than just
absorbing everything willy-nilly.

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

#32Ashutosh Sharma
ashu.coek88@gmail.com
In reply to: Tom Lane (#31)
2 attachment(s)
Re: pl/perl extension fails on Windows

On Wed, Jul 26, 2017 at 8:51 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Robert Haas <robertmhaas@gmail.com> writes:

Based on discussion downthread, it seems like what we actually need to
do is update perl.m4 to extract CCFLAGS. Turns out somebody proposed
a patch for that back in 2002:
/messages/by-id/Pine.LNX.4.44.0211051045070.16317-200000@wotan.suse.de
It seems to need a rebase. :-)

Ah-hah, I *thought* we had considered the question once upon a time.
There were some pretty substantial compatibility concerns raised in that
thread, which is doubtless why it's still like that.

My beef about inter-compiler compatibility (if building PG with a
different compiler from that used for Perl) could probably be addressed by
absorbing only -D switches from the Perl flags. But Peter seemed to feel
that even that could break things, and I worry that he's right for cases
like -D_FILE_OFFSET_BITS which affect libc APIs. Usually we'd have made
the same decisions as Perl for that sort of thing, but if we didn't, it's
a mess.

I wonder whether we could adopt some rule like "absorb -D switches
for macros whose names do not begin with an underscore". That's
surely a hack and three-quarters, but it seems safer than just
absorbing everything willy-nilly.

Thanks Robert, Tom, Andrew and Amit for all your inputs. I have tried
to work on the patch shared by Reinhard long time back for Linux. I
had to rebase the patch and also had to do add some more lines of code
to make it work on Linux. For Windows, I had to prepare a separate
patch to replicate similar behaviour. I can see that both these
patches are working as expected i.e they are able import the switches
used by Perl into plperl module during build time. However, on
windows i am still seeing the crash and i am still working to find the
reason for this. Here, I attach the patches that i have prepared for
linux and Windows platforms. Thanks.

Attachments:

plperl_linux.patchapplication/octet-stream; name=plperl_linux.patchDownload
diff --git a/config/perl.m4 b/config/perl.m4
index bed2eae..d2ac2ef 100644
--- a/config/perl.m4
+++ b/config/perl.m4
@@ -49,6 +49,16 @@ AC_DEFUN([PGAC_CHECK_PERL_CONFIGS],
 [m4_foreach([pgac_item], [$1], [PGAC_CHECK_PERL_CONFIG(pgac_item)])])
 
 
+# PGAC_CHECK_PERL_EMBED_CCFLAGS
+# -----------------------------
+AC_DEFUN([PGAC_CHECK_PERL_EMBED_CCFLAGS],
+[AC_REQUIRE([PGAC_PATH_PERL])
+AC_MSG_CHECKING([for CFLAGS to compile embedded Perl])
+perl_ccflags=`$PERL -MConfig -e 'foreach $f (split(" ",$Config{ccflags})) {if ($f =~ /^-D/) {print $f, " "}}'`
+AC_SUBST(perl_ccflags)dnl
+AC_MSG_RESULT([$perl_ccflags])])
+
+
 # PGAC_CHECK_PERL_EMBED_LDFLAGS
 # -----------------------------
 # We are after Embed's ldopts, but without the subset mentioned in
diff --git a/configure b/configure
index aff72eb..1e6bf86 100755
--- a/configure
+++ b/configure
@@ -667,6 +667,7 @@ python_includespec
 python_version
 python_majorversion
 PYTHON
+perl_ccflags
 perl_embed_ldflags
 perl_useshrplib
 perl_privlibexp
@@ -7767,6 +7768,19 @@ documentation for details.  Use --without-perl to disable building
 PL/Perl." "$LINENO" 5
   fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ccflags for embedded Perl" >&5
+$as_echo_n "checking for ccflags for embedded Perl... " >&6; }
+
+perl_ccflags=`$PERL -MConfig -e 'foreach $f (split(" ",$Config{ccflags})) {if ($f =~ /^-D/) {print $f, " "}}'`
+
+if test -z "$perl_ccflags" ; then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+else
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $perl_ccflags" >&5
+$as_echo "$perl_ccflags" >&6; }
+fi
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for flags to link embedded Perl" >&5
 $as_echo_n "checking for flags to link embedded Perl... " >&6; }
 if test "$PORTNAME" = "win32" ; then
diff --git a/configure.in b/configure.in
index 72e5b17..13c69d6 100644
--- a/configure.in
+++ b/configure.in
@@ -938,6 +938,7 @@ You might have to rebuild your Perl installation.  Refer to the
 documentation for details.  Use --without-perl to disable building
 PL/Perl.])
   fi
+  PGAC_CHECK_PERL_EMBED_CCFLAGS
   PGAC_CHECK_PERL_EMBED_LDFLAGS
 fi
 
diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index dc8a89a..ff1c185 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -304,6 +304,7 @@ else
 endif
 perl_archlibexp		= @perl_archlibexp@
 perl_privlibexp		= @perl_privlibexp@
+perl_ccflags		= @perl_ccflags@
 perl_embed_ldflags	= @perl_embed_ldflags@
 
 # Miscellaneous
diff --git a/src/pl/plperl/GNUmakefile b/src/pl/plperl/GNUmakefile
index b8e3585..dce0513 100644
--- a/src/pl/plperl/GNUmakefile
+++ b/src/pl/plperl/GNUmakefile
@@ -12,7 +12,7 @@ override CPPFLAGS += -DPLPERL_HAVE_UID_GID
 override CPPFLAGS += -Wno-comment
 endif
 
-override CPPFLAGS := -I. -I$(srcdir) $(CPPFLAGS) -I$(perl_archlibexp)/CORE
+override CPPFLAGS := -I. -I$(srcdir) $(CPPFLAGS) -I$(perl_archlibexp)/CORE $(perl_ccflags)
 
 rpathdir = $(perl_archlibexp)/CORE
 
plperl_win.patchapplication/octet-stream; name=plperl_win.patchDownload
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index e0bf607..0f50fde 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -518,6 +518,15 @@ sub mkvcbuild
 		  $solution->AddProject('plperl', 'dll', 'PLs', 'src/pl/plperl');
 		$plperl->AddIncludeDir($solution->{options}->{perl} . '/lib/CORE');
 		$plperl->AddDefine('PLPERL_HAVE_UID_GID');
+
+		foreach my $f (split(" ",$Config{ccflags}))
+		{
+			if ($f =~ /^-D/)
+			{
+				$plperl->AddDefine($f);
+			}
+		}
+
 		foreach my $xs ('SPI.xs', 'Util.xs')
 		{
 			(my $xsc = $xs) =~ s/\.xs/.c/;
#33Ashutosh Sharma
ashu.coek88@gmail.com
In reply to: Ashutosh Sharma (#32)
1 attachment(s)
Re: pl/perl extension fails on Windows

Hi All,

On Wed, Jul 26, 2017 at 7:56 PM, Ashutosh Sharma <ashu.coek88@gmail.com> wrote:

On Wed, Jul 26, 2017 at 8:51 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Robert Haas <robertmhaas@gmail.com> writes:

Based on discussion downthread, it seems like what we actually need to
do is update perl.m4 to extract CCFLAGS. Turns out somebody proposed
a patch for that back in 2002:
/messages/by-id/Pine.LNX.4.44.0211051045070.16317-200000@wotan.suse.de
It seems to need a rebase. :-)

Ah-hah, I *thought* we had considered the question once upon a time.
There were some pretty substantial compatibility concerns raised in that
thread, which is doubtless why it's still like that.

My beef about inter-compiler compatibility (if building PG with a
different compiler from that used for Perl) could probably be addressed by
absorbing only -D switches from the Perl flags. But Peter seemed to feel
that even that could break things, and I worry that he's right for cases
like -D_FILE_OFFSET_BITS which affect libc APIs. Usually we'd have made
the same decisions as Perl for that sort of thing, but if we didn't, it's
a mess.

I wonder whether we could adopt some rule like "absorb -D switches
for macros whose names do not begin with an underscore". That's
surely a hack and three-quarters, but it seems safer than just
absorbing everything willy-nilly.

Thanks Robert, Tom, Andrew and Amit for all your inputs. I have tried
to work on the patch shared by Reinhard long time back for Linux. I
had to rebase the patch and also had to do add some more lines of code
to make it work on Linux. For Windows, I had to prepare a separate
patch to replicate similar behaviour. I can see that both these
patches are working as expected i.e they are able import the switches
used by Perl into plperl module during build time. However, on
windows i am still seeing the crash and i am still working to find the
reason for this. Here, I attach the patches that i have prepared for
linux and Windows platforms. Thanks.

There was a small problem with my patch for windows that i had
submitted yesterday. It was reading the switches in '-D*' form and
including those as it is in the plperl build. Infact, it should be
removing '-D' option (from say -DPERL_CORE) and just add the macro
name (PERL_CORE) to the define list using AddDefine('PERL_CORE').
Anyways, attached is the patch that corrects this issue. The patch now
imports all the switches used by perl into plperl module but, after
doing so, i am seeing some compilation errors on Windows. Following is
the error observed,

SPI.obj : error LNK2019: unresolved external symbol PerlProc_setjmp
referenced in function do_plperl_return_next

I did some analysis in order to find the reason for this error and
could see that for Windows, sigsetjmp is defined as setjmp in PG. But,
setjmp is also defined by Perl. Hence, after including perl header
files, setjmp gets redefined as 'PerlProc_setjmp'.

In short, we have 'src/pl/plperl/SPI.c' file including 'perl.h'
followed 'XSUB.h'. perl.h defines PerlProc_setjmp() as,

#define PerlProc_setjmp(b, n) Sigsetjmp((b), (n))

and Sigsetjmp is defined as:

#define Sigsetjmp(buf,save_mask) setjmp((buf))

Then XSUB.h redefines setjmp as:

# define setjmp PerlProc_setjmp

which basically creates a loop in the preprocessor definitions.

Another problem with setjmp() redefinition is that setjmp takes one
argument whereas PerlProc_setjmp takes two arguments.

To fix this compilation error i have removed the setjmp() redefinition
from XSUB.h in perl and after doing that the build succeeds and also
'create language plperl' command is working fine i.e. there is no more
server crash.

--
With Regards,
Ashutosh Sharma
EnterpriseDB:http://www.enterprisedb.com

Attachments:

plperl_win_v2.patchapplication/octet-stream; name=plperl_win_v2.patchDownload
From 518bdc92b619b4d1c906431854e9728ddc955474 Mon Sep 17 00:00:00 2001
From: Ashutosh <ashu.coek@gmail.com>
Date: Thu, 27 Jul 2017 18:24:19 +0530
Subject: [PATCH] Windows fix

---
 src/tools/msvc/Mkvcbuild.pm | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index e0bf607..f1a991b 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -518,6 +518,16 @@ sub mkvcbuild
 		  $solution->AddProject('plperl', 'dll', 'PLs', 'src/pl/plperl');
 		$plperl->AddIncludeDir($solution->{options}->{perl} . '/lib/CORE');
 		$plperl->AddDefine('PLPERL_HAVE_UID_GID');
+
+		foreach my $f (split(" ",$Config{ccflags}))
+		{
+			if ($f =~ /^-D/)
+			{
+				$f =~ s/\-D//;
+				$plperl->AddDefine($f);
+			}
+		}
+
 		foreach my $xs ('SPI.xs', 'Util.xs')
 		{
 			(my $xsc = $xs) =~ s/\.xs/.c/;
-- 
2.10.2.windows.1

#34Tom Lane
tgl@sss.pgh.pa.us
In reply to: Ashutosh Sharma (#33)
Re: pl/perl extension fails on Windows

Ashutosh Sharma <ashu.coek88@gmail.com> writes:

Anyways, attached is the patch that corrects this issue. The patch now
imports all the switches used by perl into plperl module but, after
doing so, i am seeing some compilation errors on Windows. Following is
the error observed,

SPI.obj : error LNK2019: unresolved external symbol PerlProc_setjmp
referenced in function do_plperl_return_next

That's certainly a mess, but how come that wasn't happening before?

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

#35Ashutosh Sharma
ashu.coek88@gmail.com
In reply to: Tom Lane (#34)
Re: pl/perl extension fails on Windows

On Thu, Jul 27, 2017 at 7:51 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Ashutosh Sharma <ashu.coek88@gmail.com> writes:

Anyways, attached is the patch that corrects this issue. The patch now
imports all the switches used by perl into plperl module but, after
doing so, i am seeing some compilation errors on Windows. Following is
the error observed,

SPI.obj : error LNK2019: unresolved external symbol PerlProc_setjmp
referenced in function do_plperl_return_next

That's certainly a mess, but how come that wasn't happening before?

Earlier we were using Perl-5.20 version which i think didn't have
handshaking mechanism. From perl-5.22 onwards, the functions like
Perl_xs_handshake() or HS_KEY were introduced for handshaking purpose and
to ensure that the handshaking between plperl and perl doesn't fail, we are
now trying to import the switches used by perl into plperl. As a result of
this, macros like PERL_IMPLICIT_SYS is getting defined in plperl which
eventually opens the following definitions from XSUB.h resulting in the
compilation error.

499 #if defined(PERL_IMPLICIT_SYS) && !defined(PERL_CORE)
518 # undef ioctl
519 # undef getlogin
520* # undef setjmp*
...........
...........

651 # define times PerlProc_times
652 # define wait PerlProc_wait
653

*# define setjmp PerlProc_setjmp*
--
With Regards,
Ashutosh Sharma
EnterpriseDB:http://www.enterprisedb.com

Show quoted text

regards, tom lane

#36Andrew Dunstan
andrew.dunstan@2ndquadrant.com
In reply to: Ashutosh Sharma (#35)
Re: pl/perl extension fails on Windows

On 07/27/2017 12:34 PM, Ashutosh Sharma wrote:

On Thu, Jul 27, 2017 at 7:51 PM, Tom Lane <tgl@sss.pgh.pa.us
<mailto:tgl@sss.pgh.pa.us>> wrote:

Ashutosh Sharma <ashu.coek88@gmail.com

<mailto:ashu.coek88@gmail.com>> writes:

Anyways, attached is the patch that corrects this issue. The patch now
imports all the switches used by perl into plperl module but, after
doing so, i am seeing some compilation errors on Windows. Following is
the error observed,

SPI.obj : error LNK2019: unresolved external symbol PerlProc_setjmp
referenced in function do_plperl_return_next

That's certainly a mess, but how come that wasn't happening before?

Earlier we were using Perl-5.20 version which i think didn't have
handshaking mechanism. From perl-5.22 onwards, the functions like
Perl_xs_handshake() or HS_KEY were introduced for handshaking purpose
and to ensure that the handshaking between plperl and perl doesn't
fail, we are now trying to import the switches used by perl into
plperl. As a result of this, macros like PERL_IMPLICIT_SYS is getting
defined in plperl which eventually opens the following definitions
from XSUB.h resulting in the compilation error.

499 #if defined(PERL_IMPLICIT_SYS) && !defined(PERL_CORE)
518 # undef ioctl
519 # undef getlogin
520*# undef setjmp*
...........
...........

651 # define times PerlProc_times
652 # define wait PerlProc_wait
653 *# define setjmp PerlProc_setjmp

*

What is the minimal set of extra defines required to sort out the
handshake fingerprint issue?

cheers

andrew

--
Andrew Dunstan https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

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

#37Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#36)
Re: pl/perl extension fails on Windows

Andrew Dunstan <andrew.dunstan@2ndquadrant.com> writes:

What is the minimal set of extra defines required to sort out the
handshake fingerprint issue?

Also, exactly what defines do you end up importing in your test build?

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

#38Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#34)
1 attachment(s)
Re: pl/perl extension fails on Windows

On Thu, Jul 27, 2017 at 10:21 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Ashutosh Sharma <ashu.coek88@gmail.com> writes:

Anyways, attached is the patch that corrects this issue. The patch now
imports all the switches used by perl into plperl module but, after
doing so, i am seeing some compilation errors on Windows. Following is
the error observed,

SPI.obj : error LNK2019: unresolved external symbol PerlProc_setjmp
referenced in function do_plperl_return_next

That's certainly a mess, but how come that wasn't happening before?

How about we fix it like this?

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

Attachments:

pg-sigsetjmp.patchapplication/octet-stream; name=pg-sigsetjmp.patchDownload
diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c
index 00b1e823af..9facfd4ee3 100644
--- a/src/backend/postmaster/autovacuum.c
+++ b/src/backend/postmaster/autovacuum.c
@@ -506,7 +506,7 @@ AutoVacLauncherMain(int argc, char *argv[])
 	 *
 	 * This code is a stripped down version of PostgresMain error recovery.
 	 */
-	if (sigsetjmp(local_sigjmp_buf, 1) != 0)
+	if (pg_sigsetjmp(local_sigjmp_buf, 1) != 0)
 	{
 		/* since not using PG_TRY, must reset error stack by hand */
 		error_context_stack = NULL;
@@ -1576,7 +1576,7 @@ AutoVacWorkerMain(int argc, char *argv[])
 	 *
 	 * See notes in postgres.c about the design of this coding.
 	 */
-	if (sigsetjmp(local_sigjmp_buf, 1) != 0)
+	if (pg_sigsetjmp(local_sigjmp_buf, 1) != 0)
 	{
 		/* Prevents interrupts while cleaning up */
 		HOLD_INTERRUPTS();
diff --git a/src/backend/postmaster/bgworker.c b/src/backend/postmaster/bgworker.c
index 28af6f0f07..8238d721f3 100644
--- a/src/backend/postmaster/bgworker.c
+++ b/src/backend/postmaster/bgworker.c
@@ -767,7 +767,7 @@ StartBackgroundWorker(void)
 	 *
 	 * See notes in postgres.c about the design of this coding.
 	 */
-	if (sigsetjmp(local_sigjmp_buf, 1) != 0)
+	if (pg_sigsetjmp(local_sigjmp_buf, 1) != 0)
 	{
 		/* Since not using PG_TRY, must reset error stack by hand */
 		error_context_stack = NULL;
diff --git a/src/backend/postmaster/bgwriter.c b/src/backend/postmaster/bgwriter.c
index 9ad74ee977..8b1596c658 100644
--- a/src/backend/postmaster/bgwriter.c
+++ b/src/backend/postmaster/bgwriter.c
@@ -171,7 +171,7 @@ BackgroundWriterMain(void)
 	 *
 	 * See notes in postgres.c about the design of this coding.
 	 */
-	if (sigsetjmp(local_sigjmp_buf, 1) != 0)
+	if (pg_sigsetjmp(local_sigjmp_buf, 1) != 0)
 	{
 		/* Since not using PG_TRY, must reset error stack by hand */
 		error_context_stack = NULL;
@@ -268,7 +268,7 @@ BackgroundWriterMain(void)
 		{
 			/*
 			 * From here on, elog(ERROR) should end with exit(1), not send
-			 * control back to the sigsetjmp block above
+			 * control back to the pg_sigsetjmp block above
 			 */
 			ExitOnAnyError = true;
 			/* Normal exit from the bgwriter is here */
diff --git a/src/backend/postmaster/checkpointer.c b/src/backend/postmaster/checkpointer.c
index e48ebd557f..682446e764 100644
--- a/src/backend/postmaster/checkpointer.c
+++ b/src/backend/postmaster/checkpointer.c
@@ -253,7 +253,7 @@ CheckpointerMain(void)
 	 *
 	 * See notes in postgres.c about the design of this coding.
 	 */
-	if (sigsetjmp(local_sigjmp_buf, 1) != 0)
+	if (pg_sigsetjmp(local_sigjmp_buf, 1) != 0)
 	{
 		/* Since not using PG_TRY, must reset error stack by hand */
 		error_context_stack = NULL;
@@ -392,7 +392,7 @@ CheckpointerMain(void)
 		{
 			/*
 			 * From here on, elog(ERROR) should end with exit(1), not send
-			 * control back to the sigsetjmp block above
+			 * control back to the pg_sigsetjmp block above
 			 */
 			ExitOnAnyError = true;
 			/* Close down the database */
diff --git a/src/backend/postmaster/walwriter.c b/src/backend/postmaster/walwriter.c
index 7b89e02428..4394b1e260 100644
--- a/src/backend/postmaster/walwriter.c
+++ b/src/backend/postmaster/walwriter.c
@@ -151,7 +151,7 @@ WalWriterMain(void)
 	 *
 	 * This code is heavily based on bgwriter.c, q.v.
 	 */
-	if (sigsetjmp(local_sigjmp_buf, 1) != 0)
+	if (pg_sigsetjmp(local_sigjmp_buf, 1) != 0)
 	{
 		/* Since not using PG_TRY, must reset error stack by hand */
 		error_context_stack = NULL;
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index b8d860ebdb..67a72769fb 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -3822,15 +3822,15 @@ PostgresMain(int argc, char *argv[],
 	 * during error recovery.  (If we get into an infinite loop thereby, it
 	 * will soon be stopped by overflow of elog.c's internal state stack.)
 	 *
-	 * Note that we use sigsetjmp(..., 1), so that this function's signal mask
-	 * (to wit, UnBlockSig) will be restored when longjmp'ing to here.  This
-	 * is essential in case we longjmp'd out of a signal handler on a platform
-	 * where that leaves the signal blocked.  It's not redundant with the
-	 * unblock in AbortTransaction() because the latter is only called if we
-	 * were inside a transaction.
+	 * Note that we use pg_sigsetjmp(..., 1), so that this function's signal
+	 * mask (to wit, UnBlockSig) will be restored when longjmp'ing to here.
+	 * This is essential in case we longjmp'd out of a signal handler on a
+	 * platform where that leaves the signal blocked.  It's not redundant with
+	 * the unblock in AbortTransaction() because the latter is only called if
+	 * we were inside a transaction.
 	 */
 
-	if (sigsetjmp(local_sigjmp_buf, 1) != 0)
+	if (pg_sigsetjmp(local_sigjmp_buf, 1) != 0)
 	{
 		/*
 		 * NOTE: if you are tempted to add more code in this if-block,
diff --git a/src/backend/utils/misc/guc-file.l b/src/backend/utils/misc/guc-file.l
index f01b814c6e..93caeb3c48 100644
--- a/src/backend/utils/misc/guc-file.l
+++ b/src/backend/utils/misc/guc-file.l
@@ -704,7 +704,7 @@ ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
 	int			errorcount;
 	int			token;
 
-	if (sigsetjmp(flex_fatal_jmp, 1) == 0)
+	if (pg_sigsetjmp(flex_fatal_jmp, 1) == 0)
 		GUC_flex_fatal_jmp = &flex_fatal_jmp;
 	else
 	{
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 4e04459d45..b9f5946e25 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -4423,7 +4423,7 @@ do_watch(PQExpBuffer query_buf, double sleep)
 		 * through the loop since it's conceivable something inside
 		 * PSQLexecWatch could change sigint_interrupt_jmp.
 		 */
-		if (sigsetjmp(sigint_interrupt_jmp, 1) != 0)
+		if (pg_sigsetjmp(sigint_interrupt_jmp, 1) != 0)
 			break;
 
 		/*
diff --git a/src/bin/psql/copy.c b/src/bin/psql/copy.c
index 724ea9211a..ab27c4b5ab 100644
--- a/src/bin/psql/copy.c
+++ b/src/bin/psql/copy.c
@@ -521,7 +521,7 @@ handleCopyIn(PGconn *conn, FILE *copystream, bool isbinary, PGresult **res)
 	 * Establish longjmp destination for exiting from wait-for-input. (This is
 	 * only effective while sigint_interrupt_enabled is TRUE.)
 	 */
-	if (sigsetjmp(sigint_interrupt_jmp, 1) != 0)
+	if (pg_sigsetjmp(sigint_interrupt_jmp, 1) != 0)
 	{
 		/* got here with longjmp */
 
diff --git a/src/bin/psql/mainloop.c b/src/bin/psql/mainloop.c
index 0162ee8d2f..d2ebaaabda 100644
--- a/src/bin/psql/mainloop.c
+++ b/src/bin/psql/mainloop.c
@@ -108,7 +108,7 @@ MainLoop(FILE *source)
 		 * must re-do this each time through the loop for safety, since the
 		 * jmpbuf might get changed during command execution.
 		 */
-		if (sigsetjmp(sigint_interrupt_jmp, 1) != 0)
+		if (pg_sigsetjmp(sigint_interrupt_jmp, 1) != 0)
 		{
 			/* got here with longjmp */
 
diff --git a/src/include/c.h b/src/include/c.h
index 9066e3c578..6a934c7faf 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -1086,8 +1086,10 @@ extern int	vsnprintf(char *str, size_t count, const char *fmt, va_list args);
  */
 #ifdef WIN32
 #define sigjmp_buf jmp_buf
-#define sigsetjmp(x,y) setjmp(x)
+#define pg_sigsetjmp(x,y) setjmp(x)
 #define siglongjmp longjmp
+#else
+#define pg_sigsetjmp(x,y) sigsetjmp(x,y)
 #endif
 
 #if defined(HAVE_FDATASYNC) && !HAVE_DECL_FDATASYNC
diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h
index 7bfd25a9e9..dc666930b4 100644
--- a/src/include/utils/elog.h
+++ b/src/include/utils/elog.h
@@ -286,7 +286,7 @@ extern PGDLLIMPORT ErrorContextCallback *error_context_stack;
 		sigjmp_buf *save_exception_stack = PG_exception_stack; \
 		ErrorContextCallback *save_context_stack = error_context_stack; \
 		sigjmp_buf local_sigjmp_buf; \
-		if (sigsetjmp(local_sigjmp_buf, 0) == 0) \
+		if (pg_sigsetjmp(local_sigjmp_buf, 0) == 0) \
 		{ \
 			PG_exception_stack = &local_sigjmp_buf
 
#39Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Haas (#38)
Re: pl/perl extension fails on Windows

Robert Haas <robertmhaas@gmail.com> writes:

How about we fix it like this?

That seems pretty invasive; I'm not excited about breaking a lot of
unrelated code (particularly third-party extensions) for plperl's benefit.
Even if we wanted to do that in HEAD, it seems like a nonstarter for
released branches.

An even bigger issue is that if Perl feels free to redefine sigsetjmp,
what other libc calls might they decide to horn in on?

So I was trying to figure a way to not include XSUB.h except in a very
limited part of plperl, like ideally just the .xs files. It's looking
like that would take nontrivial refactoring though :-(. Another problem
is that this critical bit of the library API is in XSUB.h:

#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_NO_GET_CONTEXT) && !defined(PERL_CORE)
# undef aTHX
# undef aTHX_
# define aTHX PERL_GET_THX
# define aTHX_ aTHX,
#endif

As best I can tell, that's absolute brain death on the part of the Perl
crew; it means you can't write working calling code at all without
including XSUB.h, or at least copying-and-pasting this bit out of it.

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

#40Andrew Dunstan
andrew.dunstan@2ndquadrant.com
In reply to: Tom Lane (#39)
Re: pl/perl extension fails on Windows

On 07/27/2017 04:33 PM, Tom Lane wrote:

Robert Haas <robertmhaas@gmail.com> writes:

How about we fix it like this?

That seems pretty invasive; I'm not excited about breaking a lot of
unrelated code (particularly third-party extensions) for plperl's benefit.
Even if we wanted to do that in HEAD, it seems like a nonstarter for
released branches.

An even bigger issue is that if Perl feels free to redefine sigsetjmp,
what other libc calls might they decide to horn in on?

So I was trying to figure a way to not include XSUB.h except in a very
limited part of plperl, like ideally just the .xs files. It's looking
like that would take nontrivial refactoring though :-(. Another problem
is that this critical bit of the library API is in XSUB.h:

#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_NO_GET_CONTEXT) && !defined(PERL_CORE)
# undef aTHX
# undef aTHX_
# define aTHX PERL_GET_THX
# define aTHX_ aTHX,
#endif

As best I can tell, that's absolute brain death on the part of the Perl
crew; it means you can't write working calling code at all without
including XSUB.h, or at least copying-and-pasting this bit out of it.

That's the sort of thing that prompted me to ask what was the minimal
set of defines required to fix the original problem (assuming such a
thing exists)

We haven't used PERL_IMPLICIT_CONTEXT to date, and without ill effect.
For example. it's in the ExtUtils::Embed::ccopts for the perl that
jacana and bowerbird happily build and test against.

cheers

andrew

--
Andrew Dunstan https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

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

#41Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#40)
1 attachment(s)
Re: pl/perl extension fails on Windows

Andrew Dunstan <andrew.dunstan@2ndquadrant.com> writes:

On 07/27/2017 04:33 PM, Tom Lane wrote:

So I was trying to figure a way to not include XSUB.h except in a very
limited part of plperl, like ideally just the .xs files. It's looking
like that would take nontrivial refactoring though :-(. Another problem
is that this critical bit of the library API is in XSUB.h:

That's the sort of thing that prompted me to ask what was the minimal
set of defines required to fix the original problem (assuming such a
thing exists)
We haven't used PERL_IMPLICIT_CONTEXT to date, and without ill effect.
For example. it's in the ExtUtils::Embed::ccopts for the perl that
jacana and bowerbird happily build and test against.

Well, actually, PERL_IMPLICIT_CONTEXT is turned on automatically in any
MULTIPLICITY build, and since it changes all the Perl ABIs, we *are*
relying on it. However, after further study of the Perl docs I noticed
that we could dispense with XSUB.h if we defined PERL_NO_GET_CONTEXT
(which turns the quoted stanza into a no-op). That results in needing to
sprinkle plperl.c with "dTHX" declarations, as explained in perlguts.pod.
They're slightly tricky to place correctly, because they load up a pointer
to the current Perl interpreter, so you have to be wary of where to put
them in functions that change interpreters. But I seem to have it working
in the attached patch. (One benefit of doing this extra work is that it
should be a bit more efficient, in that we load up a Perl interpreter
pointer only once per function called, not once per usage therein. We
could remove many of those fetches too, if we wanted to sprinkle the
plperl code with yet more THX droppings; but I left that for another day.)

Armed with that, I got rid of XSUB.h in plperl.c and moved the
PG_TRY-using functions in the .xs files to plperl.c. I think this would
fix Ashutosh's problem, though I am not in a position to try it with a
PERL_IMPLICIT_SYS build here.

regards, tom lane

Attachments:

avoid-XSUB.h-in-plperl.c-v1.patchtext/x-diff; charset=us-ascii; name=avoid-XSUB.h-in-plperl.c-v1.patchDownload
diff --git a/src/pl/plperl/SPI.xs b/src/pl/plperl/SPI.xs
index 0447c50..7651b62 100644
*** a/src/pl/plperl/SPI.xs
--- b/src/pl/plperl/SPI.xs
***************
*** 15,52 ****
  #undef _
  
  /* perl stuff */
  #include "plperl.h"
  #include "plperl_helpers.h"
  
  
- /*
-  * Interface routine to catch ereports and punt them to Perl
-  */
- static void
- do_plperl_return_next(SV *sv)
- {
- 	MemoryContext oldcontext = CurrentMemoryContext;
- 
- 	PG_TRY();
- 	{
- 		plperl_return_next(sv);
- 	}
- 	PG_CATCH();
- 	{
- 		ErrorData  *edata;
- 
- 		/* Must reset elog.c's state */
- 		MemoryContextSwitchTo(oldcontext);
- 		edata = CopyErrorData();
- 		FlushErrorState();
- 
- 		/* Punt the error to Perl */
- 		croak_cstr(edata->message);
- 	}
- 	PG_END_TRY();
- }
- 
- 
  MODULE = PostgreSQL::InServer::SPI PREFIX = spi_
  
  PROTOTYPES: ENABLE
--- 15,25 ----
  #undef _
  
  /* perl stuff */
+ #define PG_NEED_PERL_XSUB_H
  #include "plperl.h"
  #include "plperl_helpers.h"
  
  
  MODULE = PostgreSQL::InServer::SPI PREFIX = spi_
  
  PROTOTYPES: ENABLE
*************** void
*** 76,82 ****
  spi_return_next(rv)
  	SV *rv;
  	CODE:
! 		do_plperl_return_next(rv);
  
  SV *
  spi_spi_query(sv)
--- 49,55 ----
  spi_return_next(rv)
  	SV *rv;
  	CODE:
! 		plperl_return_next(rv);
  
  SV *
  spi_spi_query(sv)
diff --git a/src/pl/plperl/Util.xs b/src/pl/plperl/Util.xs
index dbba0d7..862fec4 100644
*** a/src/pl/plperl/Util.xs
--- b/src/pl/plperl/Util.xs
***************
*** 20,67 ****
  #undef _
  
  /* perl stuff */
  #include "plperl.h"
  #include "plperl_helpers.h"
  
- /*
-  * Implementation of plperl's elog() function
-  *
-  * If the error level is less than ERROR, we'll just emit the message and
-  * return.  When it is ERROR, elog() will longjmp, which we catch and
-  * turn into a Perl croak().  Note we are assuming that elog() can't have
-  * any internal failures that are so bad as to require a transaction abort.
-  *
-  * This is out-of-line to suppress "might be clobbered by longjmp" warnings.
-  */
- static void
- do_util_elog(int level, SV *msg)
- {
- 	MemoryContext oldcontext = CurrentMemoryContext;
- 	char	   * volatile cmsg = NULL;
- 
- 	PG_TRY();
- 	{
- 		cmsg = sv2cstr(msg);
- 		elog(level, "%s", cmsg);
- 		pfree(cmsg);
- 	}
- 	PG_CATCH();
- 	{
- 		ErrorData  *edata;
- 
- 		/* Must reset elog.c's state */
- 		MemoryContextSwitchTo(oldcontext);
- 		edata = CopyErrorData();
- 		FlushErrorState();
- 
- 		if (cmsg)
- 			pfree(cmsg);
- 
- 		/* Punt the error to Perl */
- 		croak_cstr(edata->message);
- 	}
- 	PG_END_TRY();
- }
  
  static text *
  sv2text(SV *sv)
--- 20,29 ----
  #undef _
  
  /* perl stuff */
+ #define PG_NEED_PERL_XSUB_H
  #include "plperl.h"
  #include "plperl_helpers.h"
  
  
  static text *
  sv2text(SV *sv)
*************** util_elog(level, msg)
*** 105,111 ****
              level = ERROR;
          if (level < DEBUG5)
              level = DEBUG5;
!         do_util_elog(level, msg);
  
  SV *
  util_quote_literal(sv)
--- 67,73 ----
              level = ERROR;
          if (level < DEBUG5)
              level = DEBUG5;
!         plperl_util_elog(level, msg);
  
  SV *
  util_quote_literal(sv)
diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c
index 5a45e3e..9a26470 100644
*** a/src/pl/plperl/plperl.c
--- b/src/pl/plperl/plperl.c
*************** static void plperl_init_shared_libs(pTHX
*** 285,290 ****
--- 285,291 ----
  static void plperl_trusted_init(void);
  static void plperl_untrusted_init(void);
  static HV  *plperl_spi_execute_fetch_result(SPITupleTable *, uint64, int);
+ static void plperl_return_next_internal(SV *sv);
  static char *hek2cstr(HE *he);
  static SV **hv_store_string(HV *hv, const char *key, SV *val);
  static SV **hv_fetch_string(HV *hv, const char *key);
*************** static char *setlocale_perl(int category
*** 303,313 ****
--- 304,326 ----
  #endif
  
  /*
+  * Decrement the refcount of the given SV within the active Perl interpreter
+  */
+ static inline void
+ SvREFCNT_dec_current(SV *sv)
+ {
+ 	dTHX;
+ 
+ 	SvREFCNT_dec(sv);
+ }
+ 
+ /*
   * convert a HE (hash entry) key to a cstr in the current database encoding
   */
  static char *
  hek2cstr(HE *he)
  {
+ 	dTHX;
  	char	   *ret;
  	SV		   *sv;
  
*************** select_perl_context(bool trusted)
*** 641,655 ****
  	 * to the database AFTER on_*_init code has run. See
  	 * http://archives.postgresql.org/pgsql-hackers/2010-01/msg02669.php
  	 */
! 	newXS("PostgreSQL::InServer::SPI::bootstrap",
! 		  boot_PostgreSQL__InServer__SPI, __FILE__);
  
! 	eval_pv("PostgreSQL::InServer::SPI::bootstrap()", FALSE);
! 	if (SvTRUE(ERRSV))
! 		ereport(ERROR,
! 				(errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
! 				 errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))),
! 				 errcontext("while executing PostgreSQL::InServer::SPI::bootstrap")));
  
  	/* Fully initialized, so mark the hashtable entry valid */
  	interp_desc->interp = interp;
--- 654,672 ----
  	 * to the database AFTER on_*_init code has run. See
  	 * http://archives.postgresql.org/pgsql-hackers/2010-01/msg02669.php
  	 */
! 	{
! 		dTHX;
  
! 		newXS("PostgreSQL::InServer::SPI::bootstrap",
! 			  boot_PostgreSQL__InServer__SPI, __FILE__);
! 
! 		eval_pv("PostgreSQL::InServer::SPI::bootstrap()", FALSE);
! 		if (SvTRUE(ERRSV))
! 			ereport(ERROR,
! 					(errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
! 					 errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))),
! 					 errcontext("while executing PostgreSQL::InServer::SPI::bootstrap")));
! 	}
  
  	/* Fully initialized, so mark the hashtable entry valid */
  	interp_desc->interp = interp;
*************** plperl_init_interp(void)
*** 792,844 ****
  	PERL_SET_CONTEXT(plperl);
  	perl_construct(plperl);
  
- 	/* run END blocks in perl_destruct instead of perl_run */
- 	PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
- 
  	/*
! 	 * Record the original function for the 'require' and 'dofile' opcodes.
! 	 * (They share the same implementation.) Ensure it's used for new
! 	 * interpreters.
  	 */
- 	if (!pp_require_orig)
- 		pp_require_orig = PL_ppaddr[OP_REQUIRE];
- 	else
  	{
! 		PL_ppaddr[OP_REQUIRE] = pp_require_orig;
! 		PL_ppaddr[OP_DOFILE] = pp_require_orig;
! 	}
  
  #ifdef PLPERL_ENABLE_OPMASK_EARLY
  
! 	/*
! 	 * For regression testing to prove that the PLC_PERLBOOT and PLC_TRUSTED
! 	 * code doesn't even compile any unsafe ops. In future there may be a
! 	 * valid need for them to do so, in which case this could be softened
! 	 * (perhaps moved to plperl_trusted_init()) or removed.
! 	 */
! 	PL_op_mask = plperl_opmask;
  #endif
  
! 	if (perl_parse(plperl, plperl_init_shared_libs,
! 				   nargs, embedding, NULL) != 0)
! 		ereport(ERROR,
! 				(errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
! 				 errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))),
! 				 errcontext("while parsing Perl initialization")));
  
! 	if (perl_run(plperl) != 0)
! 		ereport(ERROR,
! 				(errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
! 				 errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))),
! 				 errcontext("while running Perl initialization")));
  
  #ifdef PLPERL_RESTORE_LOCALE
! 	PLPERL_RESTORE_LOCALE(LC_COLLATE, save_collate);
! 	PLPERL_RESTORE_LOCALE(LC_CTYPE, save_ctype);
! 	PLPERL_RESTORE_LOCALE(LC_MONETARY, save_monetary);
! 	PLPERL_RESTORE_LOCALE(LC_NUMERIC, save_numeric);
! 	PLPERL_RESTORE_LOCALE(LC_TIME, save_time);
  #endif
  
  	return plperl;
  }
--- 809,870 ----
  	PERL_SET_CONTEXT(plperl);
  	perl_construct(plperl);
  
  	/*
! 	 * Run END blocks in perl_destruct instead of perl_run.  Note that dTHX
! 	 * loads up a pointer to the current interpreter, so we have to postpone
! 	 * it to here rather than put it at the function head.
  	 */
  	{
! 		dTHX;
! 
! 		PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
! 
! 		/*
! 		 * Record the original function for the 'require' and 'dofile'
! 		 * opcodes.  (They share the same implementation.)  Ensure it's used
! 		 * for new interpreters.
! 		 */
! 		if (!pp_require_orig)
! 			pp_require_orig = PL_ppaddr[OP_REQUIRE];
! 		else
! 		{
! 			PL_ppaddr[OP_REQUIRE] = pp_require_orig;
! 			PL_ppaddr[OP_DOFILE] = pp_require_orig;
! 		}
  
  #ifdef PLPERL_ENABLE_OPMASK_EARLY
  
! 		/*
! 		 * For regression testing to prove that the PLC_PERLBOOT and
! 		 * PLC_TRUSTED code doesn't even compile any unsafe ops.  In future
! 		 * there may be a valid need for them to do so, in which case this
! 		 * could be softened (perhaps moved to plperl_trusted_init()) or
! 		 * removed.
! 		 */
! 		PL_op_mask = plperl_opmask;
  #endif
  
! 		if (perl_parse(plperl, plperl_init_shared_libs,
! 					   nargs, embedding, NULL) != 0)
! 			ereport(ERROR,
! 					(errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
! 					 errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))),
! 					 errcontext("while parsing Perl initialization")));
  
! 		if (perl_run(plperl) != 0)
! 			ereport(ERROR,
! 					(errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
! 					 errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))),
! 					 errcontext("while running Perl initialization")));
  
  #ifdef PLPERL_RESTORE_LOCALE
! 		PLPERL_RESTORE_LOCALE(LC_COLLATE, save_collate);
! 		PLPERL_RESTORE_LOCALE(LC_CTYPE, save_ctype);
! 		PLPERL_RESTORE_LOCALE(LC_MONETARY, save_monetary);
! 		PLPERL_RESTORE_LOCALE(LC_NUMERIC, save_numeric);
! 		PLPERL_RESTORE_LOCALE(LC_TIME, save_time);
  #endif
+ 	}
  
  	return plperl;
  }
*************** plperl_destroy_interp(PerlInterpreter **
*** 904,909 ****
--- 930,936 ----
  		 * public API so isn't portably available.) Meanwhile END blocks can
  		 * be used to perform manual cleanup.
  		 */
+ 		dTHX;
  
  		/* Run END blocks - based on perl's perl_destruct() */
  		if (PL_exit_flags & PERL_EXIT_DESTRUCT_END)
*************** plperl_destroy_interp(PerlInterpreter **
*** 930,935 ****
--- 957,963 ----
  static void
  plperl_trusted_init(void)
  {
+ 	dTHX;
  	HV		   *stash;
  	SV		   *sv;
  	char	   *key;
*************** plperl_trusted_init(void)
*** 1010,1015 ****
--- 1038,1045 ----
  static void
  plperl_untrusted_init(void)
  {
+ 	dTHX;
+ 
  	/*
  	 * Nothing to do except execute plperl.on_plperlu_init
  	 */
*************** strip_trailing_ws(const char *msg)
*** 1045,1050 ****
--- 1075,1081 ----
  static HeapTuple
  plperl_build_tuple_result(HV *perlhash, TupleDesc td)
  {
+ 	dTHX;
  	Datum	   *values;
  	bool	   *nulls;
  	HE		   *he;
*************** plperl_hash_to_datum(SV *src, TupleDesc 
*** 1106,1111 ****
--- 1137,1144 ----
  static SV  *
  get_perl_array_ref(SV *sv)
  {
+ 	dTHX;
+ 
  	if (SvOK(sv) && SvROK(sv))
  	{
  		if (SvTYPE(SvRV(sv)) == SVt_PVAV)
*************** array_to_datum_internal(AV *av, ArrayBui
*** 1134,1139 ****
--- 1167,1173 ----
  						Oid arraytypid, Oid elemtypid, int32 typmod,
  						FmgrInfo *finfo, Oid typioparam)
  {
+ 	dTHX;
  	int			i;
  	int			len = av_len(av) + 1;
  
*************** array_to_datum_internal(AV *av, ArrayBui
*** 1205,1210 ****
--- 1239,1245 ----
  static Datum
  plperl_array_to_datum(SV *src, Oid typid, int32 typmod)
  {
+ 	dTHX;
  	ArrayBuildState *astate;
  	Oid			elemtypid;
  	FmgrInfo	finfo;
*************** plperl_sv_to_literal(SV *sv, char *fqtyp
*** 1407,1412 ****
--- 1442,1448 ----
  static SV  *
  plperl_ref_from_pg_array(Datum arg, Oid typid)
  {
+ 	dTHX;
  	ArrayType  *ar = DatumGetArrayTypeP(arg);
  	Oid			elementtype = ARR_ELEMTYPE(ar);
  	int16		typlen;
*************** plperl_ref_from_pg_array(Datum arg, Oid 
*** 1485,1490 ****
--- 1521,1527 ----
  static SV  *
  split_array(plperl_array_info *info, int first, int last, int nest)
  {
+ 	dTHX;
  	int			i;
  	AV		   *result;
  
*************** split_array(plperl_array_info *info, int
*** 1518,1523 ****
--- 1555,1561 ----
  static SV  *
  make_array_ref(plperl_array_info *info, int first, int last)
  {
+ 	dTHX;
  	int			i;
  	AV		   *result = newAV();
  
*************** make_array_ref(plperl_array_info *info, 
*** 1555,1560 ****
--- 1593,1599 ----
  static SV  *
  plperl_trigger_build_args(FunctionCallInfo fcinfo)
  {
+ 	dTHX;
  	TriggerData *tdata;
  	TupleDesc	tupdesc;
  	int			i;
*************** plperl_trigger_build_args(FunctionCallIn
*** 1661,1666 ****
--- 1700,1706 ----
  static SV  *
  plperl_event_trigger_build_args(FunctionCallInfo fcinfo)
  {
+ 	dTHX;
  	EventTriggerData *tdata;
  	HV		   *hv;
  
*************** plperl_event_trigger_build_args(Function
*** 1678,1683 ****
--- 1718,1724 ----
  static HeapTuple
  plperl_modify_tuple(HV *hvTD, TriggerData *tdata, HeapTuple otup)
  {
+ 	dTHX;
  	SV		  **svp;
  	HV		   *hvNew;
  	HE		   *he;
*************** plperl_inline_handler(PG_FUNCTION_ARGS)
*** 1874,1880 ****
  
  		perlret = plperl_call_perl_func(&desc, &fake_fcinfo);
  
! 		SvREFCNT_dec(perlret);
  
  		if (SPI_finish() != SPI_OK_FINISH)
  			elog(ERROR, "SPI_finish() failed");
--- 1915,1921 ----
  
  		perlret = plperl_call_perl_func(&desc, &fake_fcinfo);
  
! 		SvREFCNT_dec_current(perlret);
  
  		if (SPI_finish() != SPI_OK_FINISH)
  			elog(ERROR, "SPI_finish() failed");
*************** plperl_inline_handler(PG_FUNCTION_ARGS)
*** 1882,1888 ****
  	PG_CATCH();
  	{
  		if (desc.reference)
! 			SvREFCNT_dec(desc.reference);
  		current_call_data = save_call_data;
  		activate_interpreter(oldinterp);
  		PG_RE_THROW();
--- 1923,1929 ----
  	PG_CATCH();
  	{
  		if (desc.reference)
! 			SvREFCNT_dec_current(desc.reference);
  		current_call_data = save_call_data;
  		activate_interpreter(oldinterp);
  		PG_RE_THROW();
*************** plperl_inline_handler(PG_FUNCTION_ARGS)
*** 1890,1896 ****
  	PG_END_TRY();
  
  	if (desc.reference)
! 		SvREFCNT_dec(desc.reference);
  
  	current_call_data = save_call_data;
  	activate_interpreter(oldinterp);
--- 1931,1937 ----
  	PG_END_TRY();
  
  	if (desc.reference)
! 		SvREFCNT_dec_current(desc.reference);
  
  	current_call_data = save_call_data;
  	activate_interpreter(oldinterp);
*************** plperlu_validator(PG_FUNCTION_ARGS)
*** 2018,2023 ****
--- 2059,2065 ----
  static void
  plperl_create_sub(plperl_proc_desc *prodesc, char *s, Oid fn_oid)
  {
+ 	dTHX;
  	dSP;
  	char		subname[NAMEDATALEN + 40];
  	HV		   *pragma_hv = newHV();
*************** plperl_init_shared_libs(pTHX)
*** 2104,2109 ****
--- 2146,2152 ----
  static SV  *
  plperl_call_perl_func(plperl_proc_desc *desc, FunctionCallInfo fcinfo)
  {
+ 	dTHX;
  	dSP;
  	SV		   *retval;
  	int			i;
*************** static SV  *
*** 2197,2202 ****
--- 2240,2246 ----
  plperl_call_perl_trigger_func(plperl_proc_desc *desc, FunctionCallInfo fcinfo,
  							  SV *td)
  {
+ 	dTHX;
  	dSP;
  	SV		   *retval,
  			   *TDsv;
*************** plperl_call_perl_event_trigger_func(plpe
*** 2265,2270 ****
--- 2309,2315 ----
  									FunctionCallInfo fcinfo,
  									SV *td)
  {
+ 	dTHX;
  	dSP;
  	SV		   *retval,
  			   *TDsv;
*************** plperl_func_handler(PG_FUNCTION_ARGS)
*** 2384,2396 ****
  		sav = get_perl_array_ref(perlret);
  		if (sav)
  		{
  			int			i = 0;
  			SV		  **svp = 0;
  			AV		   *rav = (AV *) SvRV(sav);
  
  			while ((svp = av_fetch(rav, i, FALSE)) != NULL)
  			{
! 				plperl_return_next(*svp);
  				i++;
  			}
  		}
--- 2429,2442 ----
  		sav = get_perl_array_ref(perlret);
  		if (sav)
  		{
+ 			dTHX;
  			int			i = 0;
  			SV		  **svp = 0;
  			AV		   *rav = (AV *) SvRV(sav);
  
  			while ((svp = av_fetch(rav, i, FALSE)) != NULL)
  			{
! 				plperl_return_next_internal(*svp);
  				i++;
  			}
  		}
*************** plperl_func_handler(PG_FUNCTION_ARGS)
*** 2427,2433 ****
  	/* Restore the previous error callback */
  	error_context_stack = pl_error_context.previous;
  
! 	SvREFCNT_dec(perlret);
  
  	return retval;
  }
--- 2473,2479 ----
  	/* Restore the previous error callback */
  	error_context_stack = pl_error_context.previous;
  
! 	SvREFCNT_dec_current(perlret);
  
  	return retval;
  }
*************** plperl_trigger_handler(PG_FUNCTION_ARGS)
*** 2538,2546 ****
  	/* Restore the previous error callback */
  	error_context_stack = pl_error_context.previous;
  
! 	SvREFCNT_dec(svTD);
  	if (perlret)
! 		SvREFCNT_dec(perlret);
  
  	return retval;
  }
--- 2584,2592 ----
  	/* Restore the previous error callback */
  	error_context_stack = pl_error_context.previous;
  
! 	SvREFCNT_dec_current(svTD);
  	if (perlret)
! 		SvREFCNT_dec_current(perlret);
  
  	return retval;
  }
*************** plperl_event_trigger_handler(PG_FUNCTION
*** 2579,2587 ****
  	/* Restore the previous error callback */
  	error_context_stack = pl_error_context.previous;
  
! 	SvREFCNT_dec(svTD);
! 
! 	return;
  }
  
  
--- 2625,2631 ----
  	/* Restore the previous error callback */
  	error_context_stack = pl_error_context.previous;
  
! 	SvREFCNT_dec_current(svTD);
  }
  
  
*************** free_plperl_function(plperl_proc_desc *p
*** 2624,2630 ****
  		plperl_interp_desc *oldinterp = plperl_active_interp;
  
  		activate_interpreter(prodesc->interp);
! 		SvREFCNT_dec(prodesc->reference);
  		activate_interpreter(oldinterp);
  	}
  	/* Release all PG-owned data for this proc */
--- 2668,2674 ----
  		plperl_interp_desc *oldinterp = plperl_active_interp;
  
  		activate_interpreter(prodesc->interp);
! 		SvREFCNT_dec_current(prodesc->reference);
  		activate_interpreter(oldinterp);
  	}
  	/* Release all PG-owned data for this proc */
*************** plperl_hash_from_datum(Datum attr)
*** 2949,2954 ****
--- 2993,2999 ----
  static SV  *
  plperl_hash_from_tuple(HeapTuple tuple, TupleDesc tupdesc)
  {
+ 	dTHX;
  	HV		   *hv;
  	int			i;
  
*************** static HV  *
*** 3094,3099 ****
--- 3139,3145 ----
  plperl_spi_execute_fetch_result(SPITupleTable *tuptable, uint64 processed,
  								int status)
  {
+ 	dTHX;
  	HV		   *result;
  
  	check_spi_usage_allowed();
*************** plperl_spi_execute_fetch_result(SPITuple
*** 3137,3152 ****
  
  
  /*
!  * Note: plperl_return_next is called both in Postgres and Perl contexts.
!  * We report any errors in Postgres fashion (via ereport).  If called in
!  * Perl context, it is SPI.xs's responsibility to catch the error and
!  * convert to a Perl error.  We assume (perhaps without adequate justification)
!  * that we need not abort the current transaction if the Perl code traps the
!  * error.
   */
  void
  plperl_return_next(SV *sv)
  {
  	plperl_proc_desc *prodesc;
  	FunctionCallInfo fcinfo;
  	ReturnSetInfo *rsi;
--- 3183,3223 ----
  
  
  /*
!  * plperl_return_next catches any error and converts it to a Perl error.
!  * We assume (perhaps without adequate justification) that we need not abort
!  * the current transaction if the Perl code traps the error.
   */
  void
  plperl_return_next(SV *sv)
  {
+ 	MemoryContext oldcontext = CurrentMemoryContext;
+ 
+ 	PG_TRY();
+ 	{
+ 		plperl_return_next_internal(sv);
+ 	}
+ 	PG_CATCH();
+ 	{
+ 		ErrorData  *edata;
+ 
+ 		/* Must reset elog.c's state */
+ 		MemoryContextSwitchTo(oldcontext);
+ 		edata = CopyErrorData();
+ 		FlushErrorState();
+ 
+ 		/* Punt the error to Perl */
+ 		croak_cstr(edata->message);
+ 	}
+ 	PG_END_TRY();
+ }
+ 
+ /*
+  * plperl_return_next_internal reports any errors in Postgres fashion
+  * (via ereport).
+  */
+ static void
+ plperl_return_next_internal(SV *sv)
+ {
  	plperl_proc_desc *prodesc;
  	FunctionCallInfo fcinfo;
  	ReturnSetInfo *rsi;
*************** plperl_spi_fetchrow(char *cursor)
*** 3336,3341 ****
--- 3407,3413 ----
  
  	PG_TRY();
  	{
+ 		dTHX;
  		Portal		p = SPI_cursor_find(cursor);
  
  		if (!p)
*************** plperl_spi_exec_prepared(char *query, HV
*** 3577,3582 ****
--- 3649,3656 ----
  
  	PG_TRY();
  	{
+ 		dTHX;
+ 
  		/************************************************************
  		 * Fetch the saved plan descriptor, see if it's o.k.
  		 ************************************************************/
*************** plperl_spi_freeplan(char *query)
*** 3822,3833 ****
--- 3896,3949 ----
  }
  
  /*
+  * Implementation of plperl's elog() function
+  *
+  * If the error level is less than ERROR, we'll just emit the message and
+  * return.  When it is ERROR, elog() will longjmp, which we catch and
+  * turn into a Perl croak().  Note we are assuming that elog() can't have
+  * any internal failures that are so bad as to require a transaction abort.
+  *
+  * The main reason this is out-of-line is to avoid conflicts between XSUB.h
+  * and the PG_TRY macros.
+  */
+ void
+ plperl_util_elog(int level, SV *msg)
+ {
+ 	MemoryContext oldcontext = CurrentMemoryContext;
+ 	char	   *volatile cmsg = NULL;
+ 
+ 	PG_TRY();
+ 	{
+ 		cmsg = sv2cstr(msg);
+ 		elog(level, "%s", cmsg);
+ 		pfree(cmsg);
+ 	}
+ 	PG_CATCH();
+ 	{
+ 		ErrorData  *edata;
+ 
+ 		/* Must reset elog.c's state */
+ 		MemoryContextSwitchTo(oldcontext);
+ 		edata = CopyErrorData();
+ 		FlushErrorState();
+ 
+ 		if (cmsg)
+ 			pfree(cmsg);
+ 
+ 		/* Punt the error to Perl */
+ 		croak_cstr(edata->message);
+ 	}
+ 	PG_END_TRY();
+ }
+ 
+ /*
   * Store an SV into a hash table under a key that is a string assumed to be
   * in the current database's encoding.
   */
  static SV **
  hv_store_string(HV *hv, const char *key, SV *val)
  {
+ 	dTHX;
  	int32		hlen;
  	char	   *hkey;
  	SV		  **ret;
*************** hv_store_string(HV *hv, const char *key,
*** 3854,3859 ****
--- 3970,3976 ----
  static SV **
  hv_fetch_string(HV *hv, const char *key)
  {
+ 	dTHX;
  	int32		hlen;
  	char	   *hkey;
  	SV		  **ret;
diff --git a/src/pl/plperl/plperl.h b/src/pl/plperl/plperl.h
index eecd192..3f3cce9 100644
*** a/src/pl/plperl/plperl.h
--- b/src/pl/plperl/plperl.h
***************
*** 44,52 ****
--- 44,60 ----
  
  
  /* required for perl API */
+ #define PERL_NO_GET_CONTEXT
  #include "EXTERN.h"
  #include "perl.h"
+ 
+ /*
+  * We want to include this only within .xs files, but it must come before
+  * ppport.h, so use a #define flag to control inclusion.
+  */
+ #ifdef PG_NEED_PERL_XSUB_H
  #include "XSUB.h"
+ #endif
  
  /* put back our snprintf and vsnprintf */
  #ifdef USE_REPL_SNPRINTF
*************** SV		   *plperl_spi_query_prepared(char *
*** 106,110 ****
--- 114,119 ----
  void		plperl_spi_freeplan(char *);
  void		plperl_spi_cursor_close(char *);
  char	   *plperl_sv_to_literal(SV *, char *);
+ void		plperl_util_elog(int level, SV *msg);
  
  #endif							/* PL_PERL_H */
diff --git a/src/pl/plperl/plperl_helpers.h b/src/pl/plperl/plperl_helpers.h
index 76124ed..5acac60 100644
*** a/src/pl/plperl/plperl_helpers.h
--- b/src/pl/plperl/plperl_helpers.h
*************** sv2cstr(SV *sv)
*** 54,59 ****
--- 54,61 ----
  			   *res;
  	STRLEN		len;
  
+ 	dTHX;
+ 
  	/*
  	 * get a utf8 encoded char * out of perl. *note* it may not be valid utf8!
  	 */
*************** cstr2sv(const char *str)
*** 110,115 ****
--- 112,119 ----
  	SV		   *sv;
  	char	   *utf8_str;
  
+ 	dTHX;
+ 
  	/* no conversion when SQL_ASCII */
  	if (GetDatabaseEncoding() == PG_SQL_ASCII)
  		return newSVpv(str, 0);
*************** cstr2sv(const char *str)
*** 134,139 ****
--- 138,145 ----
  static inline void
  croak_cstr(const char *str)
  {
+ 	dTHX;
+ 
  #ifdef croak_sv
  	/* Use sv_2mortal() to be sure the transient SV gets freed */
  	croak_sv(sv_2mortal(cstr2sv(str)));
#42Ashutosh Sharma
ashu.coek88@gmail.com
In reply to: Tom Lane (#41)
2 attachment(s)
Re: pl/perl extension fails on Windows

Hi,

On Fri, Jul 28, 2017 at 4:20 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Andrew Dunstan <andrew.dunstan@2ndquadrant.com> writes:

On 07/27/2017 04:33 PM, Tom Lane wrote:

So I was trying to figure a way to not include XSUB.h except in a very
limited part of plperl, like ideally just the .xs files. It's looking
like that would take nontrivial refactoring though :-(. Another problem
is that this critical bit of the library API is in XSUB.h:

That's the sort of thing that prompted me to ask what was the minimal
set of defines required to fix the original problem (assuming such a
thing exists)
We haven't used PERL_IMPLICIT_CONTEXT to date, and without ill effect.
For example. it's in the ExtUtils::Embed::ccopts for the perl that
jacana and bowerbird happily build and test against.

Well, actually, PERL_IMPLICIT_CONTEXT is turned on automatically in any
MULTIPLICITY build, and since it changes all the Perl ABIs, we *are*
relying on it. However, after further study of the Perl docs I noticed
that we could dispense with XSUB.h if we defined PERL_NO_GET_CONTEXT
(which turns the quoted stanza into a no-op). That results in needing to
sprinkle plperl.c with "dTHX" declarations, as explained in perlguts.pod.
They're slightly tricky to place correctly, because they load up a pointer
to the current Perl interpreter, so you have to be wary of where to put
them in functions that change interpreters. But I seem to have it working
in the attached patch. (One benefit of doing this extra work is that it
should be a bit more efficient, in that we load up a Perl interpreter
pointer only once per function called, not once per usage therein. We
could remove many of those fetches too, if we wanted to sprinkle the
plperl code with yet more THX droppings; but I left that for another day.)

Armed with that, I got rid of XSUB.h in plperl.c and moved the
PG_TRY-using functions in the .xs files to plperl.c. I think this would
fix Ashutosh's problem, though I am not in a position to try it with a
PERL_IMPLICIT_SYS build here.

Thanks for the patch. I am seeing some compilation errors on Windows
with the patch. Below are the errors observed,

1>ClCompile:
1> plperl.c
1>src/pl/plperl/plperl.c(4051): error C2065: 'my_perl' : undeclared identifier

2>ClCompile:
2> hstore_plperl.c
2>contrib/hstore_plperl/hstore_plperl.c(77): error C2065: 'my_perl' :
undeclared identifier

I did spent some time to find reason for these compilation errors and
could eventually find that some of the Windows specific functions
inside plperl module are calling Perl APIs without fetching the perl
interpreter's context using dTHX. Please note that, we have now
defined PERL_NO_GET_CONTEXT macro before including the Perl headers in
plperl.h file which means any plperl function calling Perl APIs should
try to fetch the perl interpreter context variable 'my_perl' at the
start of the function using dTHX but, we were not doing that for
'setlocale_perl', 'hstore_to_plperl' and 'plperl_to_hstore' functions.
I have corrected this and attached is the new version of patch.

Moreover, I have also tested this patch along with the patch to import
switches used by perl into plperl and together it fixes the server
crash issue. Also, now, the interpreter size in both perl and plperl
module are the same thereby generating the same key on both plperl and
perl module. Thanks.

--
With Regards,
Ashutosh Sharma
EnterpriseDB:http://www.enterprisedb.com

Attachments:

avoid-XSUB.h-in-plperl.c-v2.patchapplication/octet-stream; name=avoid-XSUB.h-in-plperl.c-v2.patchDownload
diff --git a/contrib/hstore_plperl/hstore_plperl.c b/contrib/hstore_plperl/hstore_plperl.c
index 480212f..3489ece 100644
--- a/contrib/hstore_plperl/hstore_plperl.c
+++ b/contrib/hstore_plperl/hstore_plperl.c
@@ -73,6 +73,7 @@ hstore_to_plperl(PG_FUNCTION_ARGS)
 	char	   *base = STRPTR(in);
 	HEntry	   *entries = ARRPTR(in);
 	HV		   *hv;
+	dTHX;
 
 	hv = newHV();
 
@@ -106,6 +107,7 @@ plperl_to_hstore(PG_FUNCTION_ARGS)
 	int32		pcount;
 	HStore	   *out;
 	Pairs	   *pairs;
+	dTHX;
 
 	hv = (HV *) SvRV((SV *) PG_GETARG_POINTER(0));
 
diff --git a/src/pl/plperl/SPI.xs b/src/pl/plperl/SPI.xs
index 0447c50..7651b62 100644
--- a/src/pl/plperl/SPI.xs
+++ b/src/pl/plperl/SPI.xs
@@ -15,38 +15,11 @@
 #undef _
 
 /* perl stuff */
+#define PG_NEED_PERL_XSUB_H
 #include "plperl.h"
 #include "plperl_helpers.h"
 
 
-/*
- * Interface routine to catch ereports and punt them to Perl
- */
-static void
-do_plperl_return_next(SV *sv)
-{
-	MemoryContext oldcontext = CurrentMemoryContext;
-
-	PG_TRY();
-	{
-		plperl_return_next(sv);
-	}
-	PG_CATCH();
-	{
-		ErrorData  *edata;
-
-		/* Must reset elog.c's state */
-		MemoryContextSwitchTo(oldcontext);
-		edata = CopyErrorData();
-		FlushErrorState();
-
-		/* Punt the error to Perl */
-		croak_cstr(edata->message);
-	}
-	PG_END_TRY();
-}
-
-
 MODULE = PostgreSQL::InServer::SPI PREFIX = spi_
 
 PROTOTYPES: ENABLE
@@ -76,7 +49,7 @@ void
 spi_return_next(rv)
 	SV *rv;
 	CODE:
-		do_plperl_return_next(rv);
+		plperl_return_next(rv);
 
 SV *
 spi_spi_query(sv)
diff --git a/src/pl/plperl/Util.xs b/src/pl/plperl/Util.xs
index dbba0d7..862fec4 100644
--- a/src/pl/plperl/Util.xs
+++ b/src/pl/plperl/Util.xs
@@ -20,48 +20,10 @@
 #undef _
 
 /* perl stuff */
+#define PG_NEED_PERL_XSUB_H
 #include "plperl.h"
 #include "plperl_helpers.h"
 
-/*
- * Implementation of plperl's elog() function
- *
- * If the error level is less than ERROR, we'll just emit the message and
- * return.  When it is ERROR, elog() will longjmp, which we catch and
- * turn into a Perl croak().  Note we are assuming that elog() can't have
- * any internal failures that are so bad as to require a transaction abort.
- *
- * This is out-of-line to suppress "might be clobbered by longjmp" warnings.
- */
-static void
-do_util_elog(int level, SV *msg)
-{
-	MemoryContext oldcontext = CurrentMemoryContext;
-	char	   * volatile cmsg = NULL;
-
-	PG_TRY();
-	{
-		cmsg = sv2cstr(msg);
-		elog(level, "%s", cmsg);
-		pfree(cmsg);
-	}
-	PG_CATCH();
-	{
-		ErrorData  *edata;
-
-		/* Must reset elog.c's state */
-		MemoryContextSwitchTo(oldcontext);
-		edata = CopyErrorData();
-		FlushErrorState();
-
-		if (cmsg)
-			pfree(cmsg);
-
-		/* Punt the error to Perl */
-		croak_cstr(edata->message);
-	}
-	PG_END_TRY();
-}
 
 static text *
 sv2text(SV *sv)
@@ -105,7 +67,7 @@ util_elog(level, msg)
             level = ERROR;
         if (level < DEBUG5)
             level = DEBUG5;
-        do_util_elog(level, msg);
+        plperl_util_elog(level, msg);
 
 SV *
 util_quote_literal(sv)
diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c
index 5a45e3e..cbac1af 100644
--- a/src/pl/plperl/plperl.c
+++ b/src/pl/plperl/plperl.c
@@ -285,6 +285,7 @@ static void plperl_init_shared_libs(pTHX);
 static void plperl_trusted_init(void);
 static void plperl_untrusted_init(void);
 static HV  *plperl_spi_execute_fetch_result(SPITupleTable *, uint64, int);
+static void plperl_return_next_internal(SV *sv);
 static char *hek2cstr(HE *he);
 static SV **hv_store_string(HV *hv, const char *key, SV *val);
 static SV **hv_fetch_string(HV *hv, const char *key);
@@ -303,11 +304,23 @@ static char *setlocale_perl(int category, char *locale);
 #endif
 
 /*
+ * Decrement the refcount of the given SV within the active Perl interpreter
+ */
+static inline void
+SvREFCNT_dec_current(SV *sv)
+{
+	dTHX;
+
+	SvREFCNT_dec(sv);
+}
+
+/*
  * convert a HE (hash entry) key to a cstr in the current database encoding
  */
 static char *
 hek2cstr(HE *he)
 {
+	dTHX;
 	char	   *ret;
 	SV		   *sv;
 
@@ -641,15 +654,19 @@ select_perl_context(bool trusted)
 	 * to the database AFTER on_*_init code has run. See
 	 * http://archives.postgresql.org/pgsql-hackers/2010-01/msg02669.php
 	 */
-	newXS("PostgreSQL::InServer::SPI::bootstrap",
-		  boot_PostgreSQL__InServer__SPI, __FILE__);
+	{
+		dTHX;
 
-	eval_pv("PostgreSQL::InServer::SPI::bootstrap()", FALSE);
-	if (SvTRUE(ERRSV))
-		ereport(ERROR,
-				(errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
-				 errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))),
-				 errcontext("while executing PostgreSQL::InServer::SPI::bootstrap")));
+		newXS("PostgreSQL::InServer::SPI::bootstrap",
+			  boot_PostgreSQL__InServer__SPI, __FILE__);
+
+		eval_pv("PostgreSQL::InServer::SPI::bootstrap()", FALSE);
+		if (SvTRUE(ERRSV))
+			ereport(ERROR,
+					(errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
+					 errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))),
+					 errcontext("while executing PostgreSQL::InServer::SPI::bootstrap")));
+	}
 
 	/* Fully initialized, so mark the hashtable entry valid */
 	interp_desc->interp = interp;
@@ -792,53 +809,62 @@ plperl_init_interp(void)
 	PERL_SET_CONTEXT(plperl);
 	perl_construct(plperl);
 
-	/* run END blocks in perl_destruct instead of perl_run */
-	PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
-
 	/*
-	 * Record the original function for the 'require' and 'dofile' opcodes.
-	 * (They share the same implementation.) Ensure it's used for new
-	 * interpreters.
+	 * Run END blocks in perl_destruct instead of perl_run.  Note that dTHX
+	 * loads up a pointer to the current interpreter, so we have to postpone
+	 * it to here rather than put it at the function head.
 	 */
-	if (!pp_require_orig)
-		pp_require_orig = PL_ppaddr[OP_REQUIRE];
-	else
 	{
-		PL_ppaddr[OP_REQUIRE] = pp_require_orig;
-		PL_ppaddr[OP_DOFILE] = pp_require_orig;
-	}
+		dTHX;
+
+		PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
+
+		/*
+		 * Record the original function for the 'require' and 'dofile'
+		 * opcodes.  (They share the same implementation.)  Ensure it's used
+		 * for new interpreters.
+		 */
+		if (!pp_require_orig)
+			pp_require_orig = PL_ppaddr[OP_REQUIRE];
+		else
+		{
+			PL_ppaddr[OP_REQUIRE] = pp_require_orig;
+			PL_ppaddr[OP_DOFILE] = pp_require_orig;
+		}
 
 #ifdef PLPERL_ENABLE_OPMASK_EARLY
 
-	/*
-	 * For regression testing to prove that the PLC_PERLBOOT and PLC_TRUSTED
-	 * code doesn't even compile any unsafe ops. In future there may be a
-	 * valid need for them to do so, in which case this could be softened
-	 * (perhaps moved to plperl_trusted_init()) or removed.
-	 */
-	PL_op_mask = plperl_opmask;
+		/*
+		 * For regression testing to prove that the PLC_PERLBOOT and
+		 * PLC_TRUSTED code doesn't even compile any unsafe ops.  In future
+		 * there may be a valid need for them to do so, in which case this
+		 * could be softened (perhaps moved to plperl_trusted_init()) or
+		 * removed.
+		 */
+		PL_op_mask = plperl_opmask;
 #endif
 
-	if (perl_parse(plperl, plperl_init_shared_libs,
-				   nargs, embedding, NULL) != 0)
-		ereport(ERROR,
-				(errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
-				 errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))),
-				 errcontext("while parsing Perl initialization")));
+		if (perl_parse(plperl, plperl_init_shared_libs,
+					   nargs, embedding, NULL) != 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
+					 errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))),
+					 errcontext("while parsing Perl initialization")));
 
-	if (perl_run(plperl) != 0)
-		ereport(ERROR,
-				(errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
-				 errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))),
-				 errcontext("while running Perl initialization")));
+		if (perl_run(plperl) != 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
+					 errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))),
+					 errcontext("while running Perl initialization")));
 
 #ifdef PLPERL_RESTORE_LOCALE
-	PLPERL_RESTORE_LOCALE(LC_COLLATE, save_collate);
-	PLPERL_RESTORE_LOCALE(LC_CTYPE, save_ctype);
-	PLPERL_RESTORE_LOCALE(LC_MONETARY, save_monetary);
-	PLPERL_RESTORE_LOCALE(LC_NUMERIC, save_numeric);
-	PLPERL_RESTORE_LOCALE(LC_TIME, save_time);
+		PLPERL_RESTORE_LOCALE(LC_COLLATE, save_collate);
+		PLPERL_RESTORE_LOCALE(LC_CTYPE, save_ctype);
+		PLPERL_RESTORE_LOCALE(LC_MONETARY, save_monetary);
+		PLPERL_RESTORE_LOCALE(LC_NUMERIC, save_numeric);
+		PLPERL_RESTORE_LOCALE(LC_TIME, save_time);
 #endif
+	}
 
 	return plperl;
 }
@@ -904,6 +930,7 @@ plperl_destroy_interp(PerlInterpreter **interp)
 		 * public API so isn't portably available.) Meanwhile END blocks can
 		 * be used to perform manual cleanup.
 		 */
+		dTHX;
 
 		/* Run END blocks - based on perl's perl_destruct() */
 		if (PL_exit_flags & PERL_EXIT_DESTRUCT_END)
@@ -930,6 +957,7 @@ plperl_destroy_interp(PerlInterpreter **interp)
 static void
 plperl_trusted_init(void)
 {
+	dTHX;
 	HV		   *stash;
 	SV		   *sv;
 	char	   *key;
@@ -1010,6 +1038,8 @@ plperl_trusted_init(void)
 static void
 plperl_untrusted_init(void)
 {
+	dTHX;
+
 	/*
 	 * Nothing to do except execute plperl.on_plperlu_init
 	 */
@@ -1045,6 +1075,7 @@ strip_trailing_ws(const char *msg)
 static HeapTuple
 plperl_build_tuple_result(HV *perlhash, TupleDesc td)
 {
+	dTHX;
 	Datum	   *values;
 	bool	   *nulls;
 	HE		   *he;
@@ -1106,6 +1137,8 @@ plperl_hash_to_datum(SV *src, TupleDesc td)
 static SV  *
 get_perl_array_ref(SV *sv)
 {
+	dTHX;
+
 	if (SvOK(sv) && SvROK(sv))
 	{
 		if (SvTYPE(SvRV(sv)) == SVt_PVAV)
@@ -1134,6 +1167,7 @@ array_to_datum_internal(AV *av, ArrayBuildState *astate,
 						Oid arraytypid, Oid elemtypid, int32 typmod,
 						FmgrInfo *finfo, Oid typioparam)
 {
+	dTHX;
 	int			i;
 	int			len = av_len(av) + 1;
 
@@ -1205,6 +1239,7 @@ array_to_datum_internal(AV *av, ArrayBuildState *astate,
 static Datum
 plperl_array_to_datum(SV *src, Oid typid, int32 typmod)
 {
+	dTHX;
 	ArrayBuildState *astate;
 	Oid			elemtypid;
 	FmgrInfo	finfo;
@@ -1407,6 +1442,7 @@ plperl_sv_to_literal(SV *sv, char *fqtypename)
 static SV  *
 plperl_ref_from_pg_array(Datum arg, Oid typid)
 {
+	dTHX;
 	ArrayType  *ar = DatumGetArrayTypeP(arg);
 	Oid			elementtype = ARR_ELEMTYPE(ar);
 	int16		typlen;
@@ -1485,6 +1521,7 @@ plperl_ref_from_pg_array(Datum arg, Oid typid)
 static SV  *
 split_array(plperl_array_info *info, int first, int last, int nest)
 {
+	dTHX;
 	int			i;
 	AV		   *result;
 
@@ -1518,6 +1555,7 @@ split_array(plperl_array_info *info, int first, int last, int nest)
 static SV  *
 make_array_ref(plperl_array_info *info, int first, int last)
 {
+	dTHX;
 	int			i;
 	AV		   *result = newAV();
 
@@ -1555,6 +1593,7 @@ make_array_ref(plperl_array_info *info, int first, int last)
 static SV  *
 plperl_trigger_build_args(FunctionCallInfo fcinfo)
 {
+	dTHX;
 	TriggerData *tdata;
 	TupleDesc	tupdesc;
 	int			i;
@@ -1661,6 +1700,7 @@ plperl_trigger_build_args(FunctionCallInfo fcinfo)
 static SV  *
 plperl_event_trigger_build_args(FunctionCallInfo fcinfo)
 {
+	dTHX;
 	EventTriggerData *tdata;
 	HV		   *hv;
 
@@ -1678,6 +1718,7 @@ plperl_event_trigger_build_args(FunctionCallInfo fcinfo)
 static HeapTuple
 plperl_modify_tuple(HV *hvTD, TriggerData *tdata, HeapTuple otup)
 {
+	dTHX;
 	SV		  **svp;
 	HV		   *hvNew;
 	HE		   *he;
@@ -1874,7 +1915,7 @@ plperl_inline_handler(PG_FUNCTION_ARGS)
 
 		perlret = plperl_call_perl_func(&desc, &fake_fcinfo);
 
-		SvREFCNT_dec(perlret);
+		SvREFCNT_dec_current(perlret);
 
 		if (SPI_finish() != SPI_OK_FINISH)
 			elog(ERROR, "SPI_finish() failed");
@@ -1882,7 +1923,7 @@ plperl_inline_handler(PG_FUNCTION_ARGS)
 	PG_CATCH();
 	{
 		if (desc.reference)
-			SvREFCNT_dec(desc.reference);
+			SvREFCNT_dec_current(desc.reference);
 		current_call_data = save_call_data;
 		activate_interpreter(oldinterp);
 		PG_RE_THROW();
@@ -1890,7 +1931,7 @@ plperl_inline_handler(PG_FUNCTION_ARGS)
 	PG_END_TRY();
 
 	if (desc.reference)
-		SvREFCNT_dec(desc.reference);
+		SvREFCNT_dec_current(desc.reference);
 
 	current_call_data = save_call_data;
 	activate_interpreter(oldinterp);
@@ -2018,6 +2059,7 @@ plperlu_validator(PG_FUNCTION_ARGS)
 static void
 plperl_create_sub(plperl_proc_desc *prodesc, char *s, Oid fn_oid)
 {
+	dTHX;
 	dSP;
 	char		subname[NAMEDATALEN + 40];
 	HV		   *pragma_hv = newHV();
@@ -2104,6 +2146,7 @@ plperl_init_shared_libs(pTHX)
 static SV  *
 plperl_call_perl_func(plperl_proc_desc *desc, FunctionCallInfo fcinfo)
 {
+	dTHX;
 	dSP;
 	SV		   *retval;
 	int			i;
@@ -2197,6 +2240,7 @@ static SV  *
 plperl_call_perl_trigger_func(plperl_proc_desc *desc, FunctionCallInfo fcinfo,
 							  SV *td)
 {
+	dTHX;
 	dSP;
 	SV		   *retval,
 			   *TDsv;
@@ -2265,6 +2309,7 @@ plperl_call_perl_event_trigger_func(plperl_proc_desc *desc,
 									FunctionCallInfo fcinfo,
 									SV *td)
 {
+	dTHX;
 	dSP;
 	SV		   *retval,
 			   *TDsv;
@@ -2384,13 +2429,14 @@ plperl_func_handler(PG_FUNCTION_ARGS)
 		sav = get_perl_array_ref(perlret);
 		if (sav)
 		{
+			dTHX;
 			int			i = 0;
 			SV		  **svp = 0;
 			AV		   *rav = (AV *) SvRV(sav);
 
 			while ((svp = av_fetch(rav, i, FALSE)) != NULL)
 			{
-				plperl_return_next(*svp);
+				plperl_return_next_internal(*svp);
 				i++;
 			}
 		}
@@ -2427,7 +2473,7 @@ plperl_func_handler(PG_FUNCTION_ARGS)
 	/* Restore the previous error callback */
 	error_context_stack = pl_error_context.previous;
 
-	SvREFCNT_dec(perlret);
+	SvREFCNT_dec_current(perlret);
 
 	return retval;
 }
@@ -2538,9 +2584,9 @@ plperl_trigger_handler(PG_FUNCTION_ARGS)
 	/* Restore the previous error callback */
 	error_context_stack = pl_error_context.previous;
 
-	SvREFCNT_dec(svTD);
+	SvREFCNT_dec_current(svTD);
 	if (perlret)
-		SvREFCNT_dec(perlret);
+		SvREFCNT_dec_current(perlret);
 
 	return retval;
 }
@@ -2579,9 +2625,7 @@ plperl_event_trigger_handler(PG_FUNCTION_ARGS)
 	/* Restore the previous error callback */
 	error_context_stack = pl_error_context.previous;
 
-	SvREFCNT_dec(svTD);
-
-	return;
+	SvREFCNT_dec_current(svTD);
 }
 
 
@@ -2624,7 +2668,7 @@ free_plperl_function(plperl_proc_desc *prodesc)
 		plperl_interp_desc *oldinterp = plperl_active_interp;
 
 		activate_interpreter(prodesc->interp);
-		SvREFCNT_dec(prodesc->reference);
+		SvREFCNT_dec_current(prodesc->reference);
 		activate_interpreter(oldinterp);
 	}
 	/* Release all PG-owned data for this proc */
@@ -2949,6 +2993,7 @@ plperl_hash_from_datum(Datum attr)
 static SV  *
 plperl_hash_from_tuple(HeapTuple tuple, TupleDesc tupdesc)
 {
+	dTHX;
 	HV		   *hv;
 	int			i;
 
@@ -3094,6 +3139,7 @@ static HV  *
 plperl_spi_execute_fetch_result(SPITupleTable *tuptable, uint64 processed,
 								int status)
 {
+	dTHX;
 	HV		   *result;
 
 	check_spi_usage_allowed();
@@ -3137,16 +3183,41 @@ plperl_spi_execute_fetch_result(SPITupleTable *tuptable, uint64 processed,
 
 
 /*
- * Note: plperl_return_next is called both in Postgres and Perl contexts.
- * We report any errors in Postgres fashion (via ereport).  If called in
- * Perl context, it is SPI.xs's responsibility to catch the error and
- * convert to a Perl error.  We assume (perhaps without adequate justification)
- * that we need not abort the current transaction if the Perl code traps the
- * error.
+ * plperl_return_next catches any error and converts it to a Perl error.
+ * We assume (perhaps without adequate justification) that we need not abort
+ * the current transaction if the Perl code traps the error.
  */
 void
 plperl_return_next(SV *sv)
 {
+	MemoryContext oldcontext = CurrentMemoryContext;
+
+	PG_TRY();
+	{
+		plperl_return_next_internal(sv);
+	}
+	PG_CATCH();
+	{
+		ErrorData  *edata;
+
+		/* Must reset elog.c's state */
+		MemoryContextSwitchTo(oldcontext);
+		edata = CopyErrorData();
+		FlushErrorState();
+
+		/* Punt the error to Perl */
+		croak_cstr(edata->message);
+	}
+	PG_END_TRY();
+}
+
+/*
+ * plperl_return_next_internal reports any errors in Postgres fashion
+ * (via ereport).
+ */
+static void
+plperl_return_next_internal(SV *sv)
+{
 	plperl_proc_desc *prodesc;
 	FunctionCallInfo fcinfo;
 	ReturnSetInfo *rsi;
@@ -3336,6 +3407,7 @@ plperl_spi_fetchrow(char *cursor)
 
 	PG_TRY();
 	{
+		dTHX;
 		Portal		p = SPI_cursor_find(cursor);
 
 		if (!p)
@@ -3577,6 +3649,8 @@ plperl_spi_exec_prepared(char *query, HV *attr, int argc, SV **argv)
 
 	PG_TRY();
 	{
+		dTHX;
+
 		/************************************************************
 		 * Fetch the saved plan descriptor, see if it's o.k.
 		 ************************************************************/
@@ -3822,12 +3896,54 @@ plperl_spi_freeplan(char *query)
 }
 
 /*
+ * Implementation of plperl's elog() function
+ *
+ * If the error level is less than ERROR, we'll just emit the message and
+ * return.  When it is ERROR, elog() will longjmp, which we catch and
+ * turn into a Perl croak().  Note we are assuming that elog() can't have
+ * any internal failures that are so bad as to require a transaction abort.
+ *
+ * The main reason this is out-of-line is to avoid conflicts between XSUB.h
+ * and the PG_TRY macros.
+ */
+void
+plperl_util_elog(int level, SV *msg)
+{
+	MemoryContext oldcontext = CurrentMemoryContext;
+	char	   *volatile cmsg = NULL;
+
+	PG_TRY();
+	{
+		cmsg = sv2cstr(msg);
+		elog(level, "%s", cmsg);
+		pfree(cmsg);
+	}
+	PG_CATCH();
+	{
+		ErrorData  *edata;
+
+		/* Must reset elog.c's state */
+		MemoryContextSwitchTo(oldcontext);
+		edata = CopyErrorData();
+		FlushErrorState();
+
+		if (cmsg)
+			pfree(cmsg);
+
+		/* Punt the error to Perl */
+		croak_cstr(edata->message);
+	}
+	PG_END_TRY();
+}
+
+/*
  * Store an SV into a hash table under a key that is a string assumed to be
  * in the current database's encoding.
  */
 static SV **
 hv_store_string(HV *hv, const char *key, SV *val)
 {
+	dTHX;
 	int32		hlen;
 	char	   *hkey;
 	SV		  **ret;
@@ -3854,6 +3970,7 @@ hv_store_string(HV *hv, const char *key, SV *val)
 static SV **
 hv_fetch_string(HV *hv, const char *key)
 {
+	dTHX;
 	int32		hlen;
 	char	   *hkey;
 	SV		  **ret;
@@ -3913,6 +4030,7 @@ static char *
 setlocale_perl(int category, char *locale)
 {
 	char	   *RETVAL = setlocale(category, locale);
+	dTHX;
 
 	if (RETVAL)
 	{
diff --git a/src/pl/plperl/plperl.h b/src/pl/plperl/plperl.h
index eecd192..3f3cce9 100644
--- a/src/pl/plperl/plperl.h
+++ b/src/pl/plperl/plperl.h
@@ -44,9 +44,17 @@
 
 
 /* required for perl API */
+#define PERL_NO_GET_CONTEXT
 #include "EXTERN.h"
 #include "perl.h"
+
+/*
+ * We want to include this only within .xs files, but it must come before
+ * ppport.h, so use a #define flag to control inclusion.
+ */
+#ifdef PG_NEED_PERL_XSUB_H
 #include "XSUB.h"
+#endif
 
 /* put back our snprintf and vsnprintf */
 #ifdef USE_REPL_SNPRINTF
@@ -106,5 +114,6 @@ SV		   *plperl_spi_query_prepared(char *, int, SV **);
 void		plperl_spi_freeplan(char *);
 void		plperl_spi_cursor_close(char *);
 char	   *plperl_sv_to_literal(SV *, char *);
+void		plperl_util_elog(int level, SV *msg);
 
 #endif							/* PL_PERL_H */
diff --git a/src/pl/plperl/plperl_helpers.h b/src/pl/plperl/plperl_helpers.h
index 76124ed..5acac60 100644
--- a/src/pl/plperl/plperl_helpers.h
+++ b/src/pl/plperl/plperl_helpers.h
@@ -54,6 +54,8 @@ sv2cstr(SV *sv)
 			   *res;
 	STRLEN		len;
 
+	dTHX;
+
 	/*
 	 * get a utf8 encoded char * out of perl. *note* it may not be valid utf8!
 	 */
@@ -110,6 +112,8 @@ cstr2sv(const char *str)
 	SV		   *sv;
 	char	   *utf8_str;
 
+	dTHX;
+
 	/* no conversion when SQL_ASCII */
 	if (GetDatabaseEncoding() == PG_SQL_ASCII)
 		return newSVpv(str, 0);
@@ -134,6 +138,8 @@ cstr2sv(const char *str)
 static inline void
 croak_cstr(const char *str)
 {
+	dTHX;
+
 #ifdef croak_sv
 	/* Use sv_2mortal() to be sure the transient SV gets freed */
 	croak_sv(sv_2mortal(cstr2sv(str)));
plperl_win_v2.patchapplication/octet-stream; name=plperl_win_v2.patchDownload
From 518bdc92b619b4d1c906431854e9728ddc955474 Mon Sep 17 00:00:00 2001
From: Ashutosh <ashu.coek@gmail.com>
Date: Thu, 27 Jul 2017 18:24:19 +0530
Subject: [PATCH] Windows fix

---
 src/tools/msvc/Mkvcbuild.pm | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index e0bf607..f1a991b 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -518,6 +518,16 @@ sub mkvcbuild
 		  $solution->AddProject('plperl', 'dll', 'PLs', 'src/pl/plperl');
 		$plperl->AddIncludeDir($solution->{options}->{perl} . '/lib/CORE');
 		$plperl->AddDefine('PLPERL_HAVE_UID_GID');
+
+		foreach my $f (split(" ",$Config{ccflags}))
+		{
+			if ($f =~ /^-D/)
+			{
+				$f =~ s/\-D//;
+				$plperl->AddDefine($f);
+			}
+		}
+
 		foreach my $xs ('SPI.xs', 'Util.xs')
 		{
 			(my $xsc = $xs) =~ s/\.xs/.c/;
-- 
2.10.2.windows.1

#43Tom Lane
tgl@sss.pgh.pa.us
In reply to: Ashutosh Sharma (#42)
Re: pl/perl extension fails on Windows

Ashutosh Sharma <ashu.coek88@gmail.com> writes:

Thanks for the patch. I am seeing some compilation errors on Windows
with the patch. Below are the errors observed,
...
I did spent some time to find reason for these compilation errors and
could eventually find that some of the Windows specific functions
inside plperl module are calling Perl APIs without fetching the perl
interpreter's context using dTHX.

Ah, thanks. I just stuck that in where compiler errors were telling
me to, so I didn't realize there were Windows-specific functions to
worry about.

Moreover, I have also tested this patch along with the patch to import
switches used by perl into plperl and together it fixes the server
crash issue. Also, now, the interpreter size in both perl and plperl
module are the same thereby generating the same key on both plperl and
perl module. Thanks.

Excellent. So this looks like the avenue to pursue.

As far as the question of which symbols to import goes: on my own
machines I'm seeing a lot of things like

$ perl -MConfig -e 'print $Config{ccflags}'
-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64

$ perl -MConfig -e 'print $Config{ccflags}'
-Ae -D_HPUX_SOURCE -Wl,+vnocompatwarnings -DDEBUGGING -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64

I'm really quite afraid to import symbols like _LARGEFILE_SOURCE and
_FILE_OFFSET_BITS into plperl; those *will* break things if they
are different from what core Postgres is built with. Moreover,
I came across a relevant data structure in perl.h:

/* These are all the compile time options that affect binary compatibility.
Other compile time options that are binary compatible are in perl.c
Both are combined for the output of perl -V
However, this string will be embedded in any shared perl library, which will
allow us add a comparison check in perlmain.c in the near future. */
#ifdef DOINIT
EXTCONST char PL_bincompat_options[] =
# ifdef DEBUG_LEAKING_SCALARS
" DEBUG_LEAKING_SCALARS"
# endif
# ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
" DEBUG_LEAKING_SCALARS_FORK_DUMP"
# endif
# ifdef FAKE_THREADS
" FAKE_THREADS"
# endif
# ifdef MULTIPLICITY
" MULTIPLICITY"
# endif
... lots more ...

Assuming that the Perl crew know what they're doing and this list is
complete, I notice that not one of the symbols they show as relevant
starts with an underscore. So I'm thinking that my previous semi-
joking idea of absorbing only -D switches for names that *don't*
start with an underscore was actually a good solution. If that
turns out to not be enough of a filter, we could consider looking
into perl.h to extract the set of symbols tested in building
PL_bincompat_options and then intersecting that with what we get
from Perl's ccflags. But that would be a lot more complex, so
I'd rather go with the simpler filter rule for now.

(BTW, you never did tell us exactly what defines you're getting
out of Perl's flags on the problem installation.)

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

#44Ashutosh Sharma
ashu.coek88@gmail.com
In reply to: Tom Lane (#43)
2 attachment(s)
Re: pl/perl extension fails on Windows

On Fri, Jul 28, 2017 at 7:22 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Ashutosh Sharma <ashu.coek88@gmail.com> writes:

Thanks for the patch. I am seeing some compilation errors on Windows
with the patch. Below are the errors observed,
...
I did spent some time to find reason for these compilation errors and
could eventually find that some of the Windows specific functions
inside plperl module are calling Perl APIs without fetching the perl
interpreter's context using dTHX.

Ah, thanks. I just stuck that in where compiler errors were telling
me to, so I didn't realize there were Windows-specific functions to
worry about.

Moreover, I have also tested this patch along with the patch to import
switches used by perl into plperl and together it fixes the server
crash issue. Also, now, the interpreter size in both perl and plperl
module are the same thereby generating the same key on both plperl and
perl module. Thanks.

Excellent. So this looks like the avenue to pursue.

As far as the question of which symbols to import goes: on my own
machines I'm seeing a lot of things like

$ perl -MConfig -e 'print $Config{ccflags}'
-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64

$ perl -MConfig -e 'print $Config{ccflags}'
-Ae -D_HPUX_SOURCE -Wl,+vnocompatwarnings -DDEBUGGING -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64

I'm really quite afraid to import symbols like _LARGEFILE_SOURCE and
_FILE_OFFSET_BITS into plperl; those *will* break things if they
are different from what core Postgres is built with. Moreover,
I came across a relevant data structure in perl.h:

/* These are all the compile time options that affect binary compatibility.
Other compile time options that are binary compatible are in perl.c
Both are combined for the output of perl -V
However, this string will be embedded in any shared perl library, which will
allow us add a comparison check in perlmain.c in the near future. */
#ifdef DOINIT
EXTCONST char PL_bincompat_options[] =
# ifdef DEBUG_LEAKING_SCALARS
" DEBUG_LEAKING_SCALARS"
# endif
# ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
" DEBUG_LEAKING_SCALARS_FORK_DUMP"
# endif
# ifdef FAKE_THREADS
" FAKE_THREADS"
# endif
# ifdef MULTIPLICITY
" MULTIPLICITY"
# endif
... lots more ...

Thanks for sharing this information. I too had a look into
'PL_bincompat_options' data structure in perl.h and i didn't see any
macro name starting with underscore. Based on this information, we can
now confidently say that we do not need any -D switches starting with
underscore for binary compatibility purpose.

Assuming that the Perl crew know what they're doing and this list is
complete, I notice that not one of the symbols they show as relevant
starts with an underscore. So I'm thinking that my previous semi-
joking idea of absorbing only -D switches for names that *don't*
start with an underscore was actually a good solution.

Yes, it was a good solution indeed.

If that

turns out to not be enough of a filter, we could consider looking
into perl.h to extract the set of symbols tested in building
PL_bincompat_options and then intersecting that with what we get
from Perl's ccflags. But that would be a lot more complex, so
I'd rather go with the simpler filter rule for now.

Okay, as per your suggestion, I have modified my earlier patches that
imports the -D switches used by perl into plperl accordingly i.e. it
now ignores the switches whose name starts with underscore. Please
find plperl_win_v3 and plperl_linux_v2 patches attached with this
email.

(BTW, you never did tell us exactly what defines you're getting
out of Perl's flags on the problem installation.)

I am really sorry about that. I just missed that in my earlier email.
Here are the defines used in the perl where i could reproduce the
issue,

C:\Users\ashu>perl -MConfig -e "print $Config{ccflags}"
-nologo -GF -W3 -O1 -MD -Zi -DNDEBUG -GL -fp:precise -DWIN32
-D_CONSOLE -DNO_STRICT -DWIN64 -DCONSERVATIVE -DUSE_SITECUSTOMIZE
-DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS

--
With Regards,
Ashutosh Sharma
EnterpriseDB:http://www.enterprisedb.com

Attachments:

plperl_win_v3.patchtext/x-patch; charset=US-ASCII; name=plperl_win_v3.patchDownload
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index e0bf607..f0ada1b 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -518,6 +518,16 @@ sub mkvcbuild
 		  $solution->AddProject('plperl', 'dll', 'PLs', 'src/pl/plperl');
 		$plperl->AddIncludeDir($solution->{options}->{perl} . '/lib/CORE');
 		$plperl->AddDefine('PLPERL_HAVE_UID_GID');
+
+		foreach my $f (split(" ",$Config{ccflags}))
+		{
+			if ($f =~ /^-D/ && $f !~ /^-D_/)
+			{
+				$f =~ s/\-D//;
+				$plperl->AddDefine($f);
+			}
+		}
+
 		foreach my $xs ('SPI.xs', 'Util.xs')
 		{
 			(my $xsc = $xs) =~ s/\.xs/.c/;
plperl_linux_v2.patchtext/x-patch; charset=US-ASCII; name=plperl_linux_v2.patchDownload
diff --git a/config/perl.m4 b/config/perl.m4
index bed2eae..d4ec25f 100644
--- a/config/perl.m4
+++ b/config/perl.m4
@@ -49,6 +49,16 @@ AC_DEFUN([PGAC_CHECK_PERL_CONFIGS],
 [m4_foreach([pgac_item], [$1], [PGAC_CHECK_PERL_CONFIG(pgac_item)])])
 
 
+# PGAC_CHECK_PERL_EMBED_CCFLAGS
+# -----------------------------
+AC_DEFUN([PGAC_CHECK_PERL_EMBED_CCFLAGS],
+[AC_REQUIRE([PGAC_PATH_PERL])
+AC_MSG_CHECKING([for CFLAGS to compile embedded Perl])
+perl_ccflags=`$PERL -MConfig -e 'foreach $f (split(" ",$Config{ccflags})) {if ($f =~ /^-D/ && $f !~ /^-D_/) {print $f, " "}}'`
+AC_SUBST(perl_ccflags)dnl
+AC_MSG_RESULT([$perl_ccflags])])
+
+
 # PGAC_CHECK_PERL_EMBED_LDFLAGS
 # -----------------------------
 # We are after Embed's ldopts, but without the subset mentioned in
diff --git a/configure b/configure
index aff72eb..ddff4ef 100755
--- a/configure
+++ b/configure
@@ -667,6 +667,7 @@ python_includespec
 python_version
 python_majorversion
 PYTHON
+perl_ccflags
 perl_embed_ldflags
 perl_useshrplib
 perl_privlibexp
@@ -7767,6 +7768,18 @@ documentation for details.  Use --without-perl to disable building
 PL/Perl." "$LINENO" 5
   fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Perl ccflags" >&5
+$as_echo_n "checking for Perl ccflags... " >&6; }
+perl_ccflags=`$PERL -MConfig -e 'foreach $f (split(" ",$Config{ccflags})) {if ($f =~ /^-D/ && $f !~ /^-D_/) {print $f, " "}}'`
+
+if test -z "$perl_ccflags" ; then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+else
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $perl_ccflags" >&5
+$as_echo "$perl_ccflags" >&6; }
+fi
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for flags to link embedded Perl" >&5
 $as_echo_n "checking for flags to link embedded Perl... " >&6; }
 if test "$PORTNAME" = "win32" ; then
diff --git a/configure.in b/configure.in
index 72e5b17..13c69d6 100644
--- a/configure.in
+++ b/configure.in
@@ -938,6 +938,7 @@ You might have to rebuild your Perl installation.  Refer to the
 documentation for details.  Use --without-perl to disable building
 PL/Perl.])
   fi
+  PGAC_CHECK_PERL_EMBED_CCFLAGS
   PGAC_CHECK_PERL_EMBED_LDFLAGS
 fi
 
diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index dc8a89a..ff1c185 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -304,6 +304,7 @@ else
 endif
 perl_archlibexp		= @perl_archlibexp@
 perl_privlibexp		= @perl_privlibexp@
+perl_ccflags		= @perl_ccflags@
 perl_embed_ldflags	= @perl_embed_ldflags@
 
 # Miscellaneous
diff --git a/src/pl/plperl/GNUmakefile b/src/pl/plperl/GNUmakefile
index b8e3585..dce0513 100644
--- a/src/pl/plperl/GNUmakefile
+++ b/src/pl/plperl/GNUmakefile
@@ -12,7 +12,7 @@ override CPPFLAGS += -DPLPERL_HAVE_UID_GID
 override CPPFLAGS += -Wno-comment
 endif
 
-override CPPFLAGS := -I. -I$(srcdir) $(CPPFLAGS) -I$(perl_archlibexp)/CORE
+override CPPFLAGS := -I. -I$(srcdir) $(CPPFLAGS) -I$(perl_archlibexp)/CORE $(perl_ccflags)
 
 rpathdir = $(perl_archlibexp)/CORE
 
#45Tom Lane
tgl@sss.pgh.pa.us
In reply to: Ashutosh Sharma (#44)
Re: pl/perl extension fails on Windows

Ashutosh Sharma <ashu.coek88@gmail.com> writes:

On Fri, Jul 28, 2017 at 7:22 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Assuming that the Perl crew know what they're doing and this list is
complete, I notice that not one of the symbols they show as relevant
starts with an underscore. So I'm thinking that my previous semi-
joking idea of absorbing only -D switches for names that *don't*
start with an underscore was actually a good solution.

Okay, as per your suggestion, I have modified my earlier patches that
imports the -D switches used by perl into plperl accordingly i.e. it
now ignores the switches whose name starts with underscore. Please
find plperl_win_v3 and plperl_linux_v2 patches attached with this
email.

OK, thanks. I've pushed the XSUB/dTHX patch after another round of
code-reading and some minor comment improvements; we'll soon see
what the buildfarm thinks of it. In the meantime I'll work on these
two patches.

(BTW, you never did tell us exactly what defines you're getting
out of Perl's flags on the problem installation.)

I am really sorry about that. I just missed that in my earlier email.
Here are the defines used in the perl where i could reproduce the
issue,

C:\Users\ashu>perl -MConfig -e "print $Config{ccflags}"
-nologo -GF -W3 -O1 -MD -Zi -DNDEBUG -GL -fp:precise -DWIN32
-D_CONSOLE -DNO_STRICT -DWIN64 -DCONSERVATIVE -DUSE_SITECUSTOMIZE
-DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS

Uh-huh. So the issue is indeed that they're injecting PERL_IMPLICIT_SYS
via a command-line #define rather than putting it into perl's config.h,
and that results in a change in the apparent size of the PerlInterp
struct (because of IMem and friends). We'd expected as much, but it's
good to have clear confirmation.

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

#46Ashutosh Sharma
ashu.coek88@gmail.com
In reply to: Tom Lane (#45)
Re: pl/perl extension fails on Windows

On Fri, Jul 28, 2017 at 10:05 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Ashutosh Sharma <ashu.coek88@gmail.com> writes:

On Fri, Jul 28, 2017 at 7:22 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Assuming that the Perl crew know what they're doing and this list is
complete, I notice that not one of the symbols they show as relevant
starts with an underscore. So I'm thinking that my previous semi-
joking idea of absorbing only -D switches for names that *don't*
start with an underscore was actually a good solution.

Okay, as per your suggestion, I have modified my earlier patches that
imports the -D switches used by perl into plperl accordingly i.e. it
now ignores the switches whose name starts with underscore. Please
find plperl_win_v3 and plperl_linux_v2 patches attached with this
email.

OK, thanks. I've pushed the XSUB/dTHX patch after another round of
code-reading and some minor comment improvements; we'll soon see
what the buildfarm thinks of it. In the meantime I'll work on these
two patches.

Sure, Thanks a lot.

(BTW, you never did tell us exactly what defines you're getting
out of Perl's flags on the problem installation.)

I am really sorry about that. I just missed that in my earlier email.
Here are the defines used in the perl where i could reproduce the
issue,

C:\Users\ashu>perl -MConfig -e "print $Config{ccflags}"
-nologo -GF -W3 -O1 -MD -Zi -DNDEBUG -GL -fp:precise -DWIN32
-D_CONSOLE -DNO_STRICT -DWIN64 -DCONSERVATIVE -DUSE_SITECUSTOMIZE
-DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS

Uh-huh. So the issue is indeed that they're injecting PERL_IMPLICIT_SYS
via a command-line #define rather than putting it into perl's config.h,
and that results in a change in the apparent size of the PerlInterp
struct (because of IMem and friends).

Yes, That's right. We would have seen different result if the
PERL_IMPLICIT_SYS would not have been defined globally.

We'd expected as much, but it's

good to have clear confirmation.

That's right. It is always good to have a clear confirmation. Thanks.

--
With Regards,
Ashutosh Sharma
EnterpriseDB:http://www.enterprisedb.com

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

#47Tom Lane
tgl@sss.pgh.pa.us
In reply to: Ashutosh Sharma (#46)
Re: pl/perl extension fails on Windows

Ashutosh Sharma <ashu.coek88@gmail.com> writes:

On Fri, Jul 28, 2017 at 10:05 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Uh-huh. So the issue is indeed that they're injecting PERL_IMPLICIT_SYS
via a command-line #define rather than putting it into perl's config.h,
and that results in a change in the apparent size of the PerlInterp
struct (because of IMem and friends).

Yes, That's right. We would have seen different result if the
PERL_IMPLICIT_SYS would not have been defined globally.

I've pushed the changes to the build scripts now. I had to revise the
Mkvcbuild.pm part a bit, because you'd forgotten to propagate the extra
defines into hstore_plperl. So that code is untested; please confirm
that HEAD works in your problem environment now.

I notice that Mkvcbuild.pm is artificially injecting a define for
PLPERL_HAVE_UID_GID. I strongly suspect that that was a hack meant
to work around the lack of this mechanism, and that we could now
get rid of it or clean it up. But there's no evidence in the commit
log about the reason for it --- it seems to go back to the original
addition of MSVC support. Anybody remember?

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

#48Ashutosh Sharma
ashu.coek88@gmail.com
In reply to: Tom Lane (#47)
Re: pl/perl extension fails on Windows

On Sat, Jul 29, 2017 at 12:05 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Ashutosh Sharma <ashu.coek88@gmail.com> writes:

On Fri, Jul 28, 2017 at 10:05 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Uh-huh. So the issue is indeed that they're injecting PERL_IMPLICIT_SYS
via a command-line #define rather than putting it into perl's config.h,
and that results in a change in the apparent size of the PerlInterp
struct (because of IMem and friends).

Yes, That's right. We would have seen different result if the
PERL_IMPLICIT_SYS would not have been defined globally.

I've pushed the changes to the build scripts now. I had to revise the
Mkvcbuild.pm part a bit, because you'd forgotten to propagate the extra
defines into hstore_plperl.

Thanks for that.

So that code is untested; please confirm

that HEAD works in your problem environment now.

I quickly ran the some basic test-cases on my Windows machine (machine
where i have been regenerating the issue) and they are all passing.
Also, all the automated test-cases for contrib module hstore_plperl
are passing.

I notice that Mkvcbuild.pm is artificially injecting a define for
PLPERL_HAVE_UID_GID. I strongly suspect that that was a hack meant
to work around the lack of this mechanism, and that we could now
get rid of it or clean it up. But there's no evidence in the commit
log about the reason for it --- it seems to go back to the original
addition of MSVC support. Anybody remember?

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

#49Tom Lane
tgl@sss.pgh.pa.us
In reply to: Christoph Berg (#10)
Re: pl/perl extension fails on Windows

Christoph Berg <myon@debian.org> writes:

The plperl segfault on Debian's kfreebsd port I reported back in 2013
is also still present:
/messages/by-id/20130515064201.GC704@msgid.df7cb.de
https://buildd.debian.org/status/fetch.php?pkg=postgresql-10&amp;arch=kfreebsd-amd64&amp;ver=10~beta2-1&amp;stamp=1499947011&amp;raw=0

So it'd be interesting to know if it's any better with HEAD ...

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

#50Tom Lane
tgl@sss.pgh.pa.us
In reply to: Ashutosh Sharma (#48)
Re: pl/perl extension fails on Windows

Ashutosh Sharma <ashu.coek88@gmail.com> writes:

I quickly ran the some basic test-cases on my Windows machine (machine
where i have been regenerating the issue) and they are all passing.
Also, all the automated test-cases for contrib module hstore_plperl
are passing.

Cool, thanks. I hope people will set up some buildfarm machines with
the formerly-broken configurations.

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

#51Christoph Berg
myon@debian.org
In reply to: Tom Lane (#49)
Re: pl/perl extension fails on Windows

Re: Tom Lane 2017-07-28 <3254.1501276475@sss.pgh.pa.us>

Christoph Berg <myon@debian.org> writes:

The plperl segfault on Debian's kfreebsd port I reported back in 2013
is also still present:
/messages/by-id/20130515064201.GC704@msgid.df7cb.de
https://buildd.debian.org/status/fetch.php?pkg=postgresql-10&amp;arch=kfreebsd-amd64&amp;ver=10~beta2-1&amp;stamp=1499947011&amp;raw=0

So it'd be interesting to know if it's any better with HEAD ...

Unfortunately not:

============== creating database "pl_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== installing plperl ==============
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
connection to server was lost

The only interesting line in log/postmaster.log is a log_line_prefix-less
Util.c: loadable library and perl binaries are mismatched (got handshake key 0xd500080, needed 0xd600080)
... which is unchanged from the beta2 output.

Christoph

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

#52Tom Lane
tgl@sss.pgh.pa.us
In reply to: Christoph Berg (#51)
Re: pl/perl extension fails on Windows

Christoph Berg <myon@debian.org> writes:

Re: Tom Lane 2017-07-28 <3254.1501276475@sss.pgh.pa.us>

Christoph Berg <myon@debian.org> writes:

The plperl segfault on Debian's kfreebsd port I reported back in 2013
is also still present:

So it'd be interesting to know if it's any better with HEAD ...

Unfortunately not:
The only interesting line in log/postmaster.log is a log_line_prefix-less
Util.c: loadable library and perl binaries are mismatched (got handshake key 0xd500080, needed 0xd600080)
... which is unchanged from the beta2 output.

Well, that's quite interesting, because it implies that this is indeed
the same type of problem. I wonder why the patch didn't fix it?

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

#53Ashutosh Sharma
ashu.coek88@gmail.com
In reply to: Christoph Berg (#51)
Re: pl/perl extension fails on Windows

Hi Christoph,

On Mon, Jul 31, 2017 at 2:44 AM, Christoph Berg <myon@debian.org> wrote:

Re: Tom Lane 2017-07-28 <3254.1501276475@sss.pgh.pa.us>

Christoph Berg <myon@debian.org> writes:

The plperl segfault on Debian's kfreebsd port I reported back in 2013
is also still present:
/messages/by-id/20130515064201.GC704@msgid.df7cb.de
https://buildd.debian.org/status/fetch.php?pkg=postgresql-10&amp;arch=kfreebsd-amd64&amp;ver=10~beta2-1&amp;stamp=1499947011&amp;raw=0

So it'd be interesting to know if it's any better with HEAD ...

Unfortunately not:

============== creating database "pl_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== installing plperl ==============
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
connection to server was lost

The only interesting line in log/postmaster.log is a log_line_prefix-less
Util.c: loadable library and perl binaries are mismatched (got handshake key 0xd500080, needed 0xd600080)
... which is unchanged from the beta2 output.

I am not able to reproduce this issue on my Windows or Linux box. Have
you deleted Util.c and SPI.c files before starting with the build? The
point is, these files are generated during build time and if they
already exist then i think. they are not re generated. I would suggest
to delete both the .c files and rebuild your source and then give a
try.

Here are the results i got on Windows and Linux respectively on HEAD,

On Windows:

C:\Users\ashu\git-clone-postgresql\postgresql\src\tools\msvc>vcregress.bat
PLCHECK
============================================================
Checking plperl
(using postmaster on localhost, default port)
============== dropping database "pl_regression" ==============
NOTICE: database "pl_regression" does not exist, skipping
DROP DATABASE
============== creating database "pl_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== installing plperl ==============
CREATE EXTENSION
============== installing plperlu ==============
CREATE EXTENSION
============== running regression test queries ==============
test plperl ... ok
test plperl_lc ... ok
test plperl_trigger ... ok
test plperl_shared ... ok
test plperl_elog ... ok
test plperl_util ... ok
test plperl_init ... ok
test plperlu ... ok
test plperl_array ... ok
test plperl_plperlu ... ok

======================
All 10 tests passed.
======================

On Linux:

LD_LIBRARY_PATH="/home/ashu/git-clone-postgresql/postgresql/tmp_install/home/ashu/git-clone-postgresql/postgresql/TMP/postgres/lib"
../../../src/test/regress/pg_regress --temp-instance=./tmp_check
--inputdir=. --bindir= --dbname=pl_regression
--load-extension=plperl --load-extension=plperlu plperl plperl_lc
plperl_trigger plperl_shared plperl_elog plperl_util plperl_init
plperlu plperl_array
============== creating temporary instance ==============
============== initializing database system ==============
============== starting postmaster ==============
running on port 50848 with PID 18140
============== creating database "pl_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== installing plperl ==============
CREATE EXTENSION
============== installing plperlu ==============
CREATE EXTENSION
============== running regression test queries ==============
test plperl ... ok
test plperl_lc ... ok
test plperl_trigger ... ok
test plperl_shared ... ok
test plperl_elog ... ok
test plperl_util ... ok
test plperl_init ... ok
test plperlu ... ok
test plperl_array ... ok
============== shutting down postmaster ==============
============== removing temporary instance ==============

--
With Regards,
Ashutosh Sharma
EnterpriseDB:http://www.enterprisedb.com

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

#54Ashutosh Sharma
ashu.coek88@gmail.com
In reply to: Ashutosh Sharma (#53)
Re: pl/perl extension fails on Windows

Hi Christoph,

On Mon, Jul 31, 2017 at 9:18 AM, Ashutosh Sharma <ashu.coek88@gmail.com> wrote:

Hi Christoph,

On Mon, Jul 31, 2017 at 2:44 AM, Christoph Berg <myon@debian.org> wrote:

Re: Tom Lane 2017-07-28 <3254.1501276475@sss.pgh.pa.us>

Christoph Berg <myon@debian.org> writes:

The plperl segfault on Debian's kfreebsd port I reported back in 2013
is also still present:
/messages/by-id/20130515064201.GC704@msgid.df7cb.de
https://buildd.debian.org/status/fetch.php?pkg=postgresql-10&amp;arch=kfreebsd-amd64&amp;ver=10~beta2-1&amp;stamp=1499947011&amp;raw=0

So it'd be interesting to know if it's any better with HEAD ...

Unfortunately not:

============== creating database "pl_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== installing plperl ==============
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
connection to server was lost

The only interesting line in log/postmaster.log is a log_line_prefix-less
Util.c: loadable library and perl binaries are mismatched (got handshake key 0xd500080, needed 0xd600080)
... which is unchanged from the beta2 output.

It seems like you are observing this crash on kFreeBSD OS. Well, me or
any of my colleague is not having this OS hence, i can't comment on
that. But, we do have Ubuntu OS (another Debian based OS) and I am not
seeing any server crash here as well,

edb@ubuntu:~/PGsources/postgresql/src/pl/plperl$ make check
make -C ../../../src/test/regress pg_regress
.....
/bin/mkdir -p '/home/edb/PGsources/postgresql'/tmp_install/log
make -C '../../..'
DESTDIR='/home/edb/PGsources/postgresql'/tmp_install install

'/home/edb/PGsources/postgresql'/tmp_install/log/install.log 2>&1

PATH="/home/edb/PGsources/postgresql/tmp_install/home/edb/PGsources/postgresql/inst/bin:$PATH"
LD_LIBRARY_PATH="/home/edb/PGsources/postgresql/tmp_install/home/edb/PGsources/postgresql/inst/lib:$LD_LIBRARY_PATH"
../../../src/test/regress/pg_regress --temp-instance=./tmp_check
--inputdir=. --bindir= --dbname=pl_regression
--load-extension=plperl --load-extension=plperlu plperl plperl_lc
plperl_trigger plperl_shared plperl_elog plperl_util plperl_init
plperlu plperl_array plperl_plperlu
============== creating temporary instance ==============
============== initializing database system ==============
============== starting postmaster ==============
running on port 50848 with PID 43441
============== creating database "pl_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== installing plperl ==============
CREATE EXTENSION
============== installing plperlu ==============
CREATE EXTENSION
============== running regression test queries ==============
test plperl ... ok
test plperl_lc ... ok
test plperl_trigger ... ok
test plperl_shared ... ok
test plperl_elog ... ok
test plperl_util ... ok
test plperl_init ... ok
test plperlu ... ok
test plperl_array ... ok
test plperl_plperlu ... ok
============== shutting down postmaster ==============
============== removing temporary instance ==============

As i mentioned in my earlier email, could you please delete the Utilc.
and SPI.c files from src/pl/plperl directory, rebuild the source code
and then let us know the results. Thanks.

I am not able to reproduce this issue on my Windows or Linux box. Have
you deleted Util.c and SPI.c files before starting with the build? The
point is, these files are generated during build time and if they
already exist then i think. they are not re generated. I would suggest
to delete both the .c files and rebuild your source and then give a
try.

Here are the results i got on Windows and Linux respectively on HEAD,

On Windows:

C:\Users\ashu\git-clone-postgresql\postgresql\src\tools\msvc>vcregress.bat
PLCHECK
============================================================
Checking plperl
(using postmaster on localhost, default port)
============== dropping database "pl_regression" ==============
NOTICE: database "pl_regression" does not exist, skipping
DROP DATABASE
============== creating database "pl_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== installing plperl ==============
CREATE EXTENSION
============== installing plperlu ==============
CREATE EXTENSION
============== running regression test queries ==============
test plperl ... ok
test plperl_lc ... ok
test plperl_trigger ... ok
test plperl_shared ... ok
test plperl_elog ... ok
test plperl_util ... ok
test plperl_init ... ok
test plperlu ... ok
test plperl_array ... ok
test plperl_plperlu ... ok

======================
All 10 tests passed.
======================

On Linux:

LD_LIBRARY_PATH="/home/ashu/git-clone-postgresql/postgresql/tmp_install/home/ashu/git-clone-postgresql/postgresql/TMP/postgres/lib"
../../../src/test/regress/pg_regress --temp-instance=./tmp_check
--inputdir=. --bindir= --dbname=pl_regression
--load-extension=plperl --load-extension=plperlu plperl plperl_lc
plperl_trigger plperl_shared plperl_elog plperl_util plperl_init
plperlu plperl_array
============== creating temporary instance ==============
============== initializing database system ==============
============== starting postmaster ==============
running on port 50848 with PID 18140
============== creating database "pl_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== installing plperl ==============
CREATE EXTENSION
============== installing plperlu ==============
CREATE EXTENSION
============== running regression test queries ==============
test plperl ... ok
test plperl_lc ... ok
test plperl_trigger ... ok
test plperl_shared ... ok
test plperl_elog ... ok
test plperl_util ... ok
test plperl_init ... ok
test plperlu ... ok
test plperl_array ... ok
============== shutting down postmaster ==============
============== removing temporary instance ==============

--
With Regards,
Ashutosh Sharma
EnterpriseDB:http://www.enterprisedb.com

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

#55Christoph Berg
myon@debian.org
In reply to: Ashutosh Sharma (#53)
4 attachment(s)
Re: pl/perl extension fails on Windows

Re: Ashutosh Sharma 2017-07-31 <CAE9k0PnzYxyKHuwJonUEDt2xunPUc8VUVPWsd0BScRd3u+j8_A@mail.gmail.com>

The only interesting line in log/postmaster.log is a log_line_prefix-less
Util.c: loadable library and perl binaries are mismatched (got handshake key 0xd500080, needed 0xd600080)
... which is unchanged from the beta2 output.

I am not able to reproduce this issue on my Windows or Linux box. Have
you deleted Util.c and SPI.c files before starting with the build?

That was from a git checkout which didn't contain the files.
Retrying anyway:

[127]: 10:28 myon@experimental_k-a-dchroot.falla:~/po/po/src/pl/plperl $ make clean rm -f plperl.so libplperl.a libplperl.pc rm -f SPI.c Util.c plperl.o SPI.o Util.o perlchunks.h plperl_opmask.h rm -rf results/ regression.diffs regression.out tmp_check/ tmp_check_iso/ log/ output_iso/
rm -f plperl.so libplperl.a libplperl.pc
rm -f SPI.c Util.c plperl.o SPI.o Util.o perlchunks.h plperl_opmask.h
rm -rf results/ regression.diffs regression.out tmp_check/ tmp_check_iso/ log/ output_iso/
[0]: 10:29 myon@experimental_k-a-dchroot.falla:~/po/po/src/pl/plperl $ make check make -C ../../../src/test/regress pg_regress make[1]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/test/regress“ wird betreten make -C ../../../src/port all make[2]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/port“ wird betreten make -C ../backend submake-errcodes make[3]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/backend“ wird betreten make[3]: Für das Ziel „submake-errcodes“ ist nichts zu tun. make[3]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/backend“ wird verlassen make[2]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/port“ wird verlassen make -C ../../../src/common all make[2]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/common“ wird betreten make -C ../backend submake-errcodes make[3]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/backend“ wird betreten make[3]: Für das Ziel „submake-errcodes“ ist nichts zu tun. make[3]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/backend“ wird verlassen make[2]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/common“ wird verlassen make[1]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/test/regress“ wird verlassen rm -rf '/home/myon/postgresql-10/postgresql-10-10~beta2'/tmp_install /bin/mkdir -p '/home/myon/postgresql-10/postgresql-10-10~beta2'/tmp_install/log make -C '../../..' DESTDIR='/home/myon/postgresql-10/postgresql-10-10~beta2'/tmp_install install >'/home/myon/postgresql-10/postgresql-10-10~beta2'/tmp_install/log/install.log 2>&1 PATH="/home/myon/postgresql-10/postgresql-10-10~beta2/tmp_install/usr/local/pgsql/bin:$PATH" LD_LIBRARY_PATH="/home/myon/postgresql-10/postgresql-10-10~beta2/tmp_install/usr/local/pgsql/lib" ../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir= --dbname=pl_regression --load-extension=plperl --load-extension=plperlu plperl plperl_lc plperl_trigger plperl_shared plperl_elog plperl_util plperl_init plperlu plperl_array plperl_plperlu ============== creating temporary instance ============== ============== initializing database system ============== ============== starting postmaster ============== running on port 50848 with PID 17713 ============== creating database "pl_regression" ============== CREATE DATABASE ALTER DATABASE ============== installing plperl ============== server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. connection to server was lost command failed: "psql" -X -c "CREATE EXTENSION IF NOT EXISTS \"plperl\"" "pl_regression" GNUmakefile:108: die Regel für Ziel „check“ scheiterte make: *** [check] Fehler 2
'/usr/bin/perl' ./text2macro.pl --strip='^(\#.*|\s*)$' plc_perlboot.pl plc_trusted.pl > perlchunks.h
'/usr/bin/perl' plperl_opmask.pl plperl_opmask.h
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -I. -I. -I../../../src/include -D_GNU_SOURCE -I/usr/lib/x86_64-kfreebsd-gnu/perl/5.26/CORE -c -o plperl.o plperl.c
'/usr/bin/perl' /usr/share/perl/5.26/ExtUtils/xsubpp -typemap /usr/share/perl/5.26/ExtUtils/typemap SPI.xs >SPI.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -I. -I. -I../../../src/include -D_GNU_SOURCE -I/usr/lib/x86_64-kfreebsd-gnu/perl/5.26/CORE -c -o SPI.o SPI.c
'/usr/bin/perl' /usr/share/perl/5.26/ExtUtils/xsubpp -typemap /usr/share/perl/5.26/ExtUtils/typemap Util.xs >Util.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -I. -I. -I../../../src/include -D_GNU_SOURCE -I/usr/lib/x86_64-kfreebsd-gnu/perl/5.26/CORE -c -o Util.o Util.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -shared -o plperl.so plperl.o SPI.o Util.o -L../../../src/port -L../../../src/common -Wl,--as-needed -Wl,-rpath,'/usr/lib/x86_64-kfreebsd-gnu/perl/5.26/CORE',--enable-new-dtags -fstack-protector-strong -L/usr/local/lib -L/usr/lib/x86_64-kfreebsd-gnu/perl/5.26/CORE -lperl -ldl -lm -lpthread -lc -lcrypt
[0]: 10:29 myon@experimental_k-a-dchroot.falla:~/po/po/src/pl/plperl $ make check make -C ../../../src/test/regress pg_regress make[1]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/test/regress“ wird betreten make -C ../../../src/port all make[2]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/port“ wird betreten make -C ../backend submake-errcodes make[3]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/backend“ wird betreten make[3]: Für das Ziel „submake-errcodes“ ist nichts zu tun. make[3]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/backend“ wird verlassen make[2]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/port“ wird verlassen make -C ../../../src/common all make[2]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/common“ wird betreten make -C ../backend submake-errcodes make[3]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/backend“ wird betreten make[3]: Für das Ziel „submake-errcodes“ ist nichts zu tun. make[3]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/backend“ wird verlassen make[2]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/common“ wird verlassen make[1]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/test/regress“ wird verlassen rm -rf '/home/myon/postgresql-10/postgresql-10-10~beta2'/tmp_install /bin/mkdir -p '/home/myon/postgresql-10/postgresql-10-10~beta2'/tmp_install/log make -C '../../..' DESTDIR='/home/myon/postgresql-10/postgresql-10-10~beta2'/tmp_install install >'/home/myon/postgresql-10/postgresql-10-10~beta2'/tmp_install/log/install.log 2>&1 PATH="/home/myon/postgresql-10/postgresql-10-10~beta2/tmp_install/usr/local/pgsql/bin:$PATH" LD_LIBRARY_PATH="/home/myon/postgresql-10/postgresql-10-10~beta2/tmp_install/usr/local/pgsql/lib" ../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir= --dbname=pl_regression --load-extension=plperl --load-extension=plperlu plperl plperl_lc plperl_trigger plperl_shared plperl_elog plperl_util plperl_init plperlu plperl_array plperl_plperlu ============== creating temporary instance ============== ============== initializing database system ============== ============== starting postmaster ============== running on port 50848 with PID 17713 ============== creating database "pl_regression" ============== CREATE DATABASE ALTER DATABASE ============== installing plperl ============== server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. connection to server was lost command failed: "psql" -X -c "CREATE EXTENSION IF NOT EXISTS \"plperl\"" "pl_regression" GNUmakefile:108: die Regel für Ziel „check“ scheiterte make: *** [check] Fehler 2
make -C ../../../src/test/regress pg_regress
make[1]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/test/regress“ wird betreten
make -C ../../../src/port all
make[2]10:29 myon@experimental_k-a-dchroot.falla:~/po/po/src/pl/plperl $ cat log/postmaster.log 2017-07-31 10:29:54.995 CEST [17713] LOG: listening on Unix socket "/tmp/pg_regress-JaWXuT/.s.PGSQL.50848" 2017-07-31 10:29:55.015 CEST [17716] LOG: database system was shut down at 2017-07-31 10:29:54 CEST 2017-07-31 10:29:55.023 CEST [17713] LOG: database system is ready to accept connections 2017-07-31 10:29:56.068 CEST [17717] LOG: checkpoint starting: immediate force wait flush-all 2017-07-31 10:29:56.071 CEST [17717] LOG: checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.000 s, sync=0.000 s, total=0.002 s; sync files=0, longest=0.000 s, average=0.000 s; distance=1 kB, estimate=1 kB 2017-07-31 10:29:56.303 CEST [17717] LOG: checkpoint starting: immediate force wait 2017-07-31 10:29:56.305 CEST [17717] LOG: checkpoint complete: wrote 0 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.000 s, sync=0.000 s, total=0.001 s; sync files=0, longest=0.000 s, average=0.000 s; distance=0 kB, estimate=1 kB Util.c: loadable library and perl binaries are mismatched (got handshake key 0xd500080, needed 0xd600080) 2017-07-31 10:29:56.478 CEST [17713] LOG: received fast shutdown request 2017-07-31 10:29:56.478 CEST [17713] LOG: aborting any active transactions 2017-07-31 10:29:56.480 CEST [17713] LOG: worker process: logical replication launcher (PID 17722) exited with exit code 1 2017-07-31 10:29:56.481 CEST [17717] LOG: shutting down 2017-07-31 10:29:56.481 CEST [17717] LOG: checkpoint starting: shutdown immediate 2017-07-31 10:29:56.484 CEST [17717] LOG: checkpoint complete: wrote 19 buffers (0.1%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.001 s, sync=0.000 s, total=0.003 s; sync files=0, longest=0.000 s, average=0.000 s; distance=47 kB, estimate=47 kB 2017-07-31 10:29:56.494 CEST [17713] LOG: database system is shut down: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/port“ wird betreten
make -C ../backend submake-errcodes
make[3]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/backend“ wird betreten
make[3]: Für das Ziel „submake-errcodes“ ist nichts zu tun.
make[3]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/backend“ wird verlassen
make[2]10:29 myon@experimental_k-a-dchroot.falla:~/po/po/src/pl/plperl $ cat log/postmaster.log 2017-07-31 10:29:54.995 CEST [17713] LOG: listening on Unix socket "/tmp/pg_regress-JaWXuT/.s.PGSQL.50848" 2017-07-31 10:29:55.015 CEST [17716] LOG: database system was shut down at 2017-07-31 10:29:54 CEST 2017-07-31 10:29:55.023 CEST [17713] LOG: database system is ready to accept connections 2017-07-31 10:29:56.068 CEST [17717] LOG: checkpoint starting: immediate force wait flush-all 2017-07-31 10:29:56.071 CEST [17717] LOG: checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.000 s, sync=0.000 s, total=0.002 s; sync files=0, longest=0.000 s, average=0.000 s; distance=1 kB, estimate=1 kB 2017-07-31 10:29:56.303 CEST [17717] LOG: checkpoint starting: immediate force wait 2017-07-31 10:29:56.305 CEST [17717] LOG: checkpoint complete: wrote 0 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.000 s, sync=0.000 s, total=0.001 s; sync files=0, longest=0.000 s, average=0.000 s; distance=0 kB, estimate=1 kB Util.c: loadable library and perl binaries are mismatched (got handshake key 0xd500080, needed 0xd600080) 2017-07-31 10:29:56.478 CEST [17713] LOG: received fast shutdown request 2017-07-31 10:29:56.478 CEST [17713] LOG: aborting any active transactions 2017-07-31 10:29:56.480 CEST [17713] LOG: worker process: logical replication launcher (PID 17722) exited with exit code 1 2017-07-31 10:29:56.481 CEST [17717] LOG: shutting down 2017-07-31 10:29:56.481 CEST [17717] LOG: checkpoint starting: shutdown immediate 2017-07-31 10:29:56.484 CEST [17717] LOG: checkpoint complete: wrote 19 buffers (0.1%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.001 s, sync=0.000 s, total=0.003 s; sync files=0, longest=0.000 s, average=0.000 s; distance=47 kB, estimate=47 kB 2017-07-31 10:29:56.494 CEST [17713] LOG: database system is shut down: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/port“ wird verlassen
make -C ../../../src/common all
make[2]10:29 myon@experimental_k-a-dchroot.falla:~/po/po/src/pl/plperl $ cat log/postmaster.log 2017-07-31 10:29:54.995 CEST [17713] LOG: listening on Unix socket "/tmp/pg_regress-JaWXuT/.s.PGSQL.50848" 2017-07-31 10:29:55.015 CEST [17716] LOG: database system was shut down at 2017-07-31 10:29:54 CEST 2017-07-31 10:29:55.023 CEST [17713] LOG: database system is ready to accept connections 2017-07-31 10:29:56.068 CEST [17717] LOG: checkpoint starting: immediate force wait flush-all 2017-07-31 10:29:56.071 CEST [17717] LOG: checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.000 s, sync=0.000 s, total=0.002 s; sync files=0, longest=0.000 s, average=0.000 s; distance=1 kB, estimate=1 kB 2017-07-31 10:29:56.303 CEST [17717] LOG: checkpoint starting: immediate force wait 2017-07-31 10:29:56.305 CEST [17717] LOG: checkpoint complete: wrote 0 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.000 s, sync=0.000 s, total=0.001 s; sync files=0, longest=0.000 s, average=0.000 s; distance=0 kB, estimate=1 kB Util.c: loadable library and perl binaries are mismatched (got handshake key 0xd500080, needed 0xd600080) 2017-07-31 10:29:56.478 CEST [17713] LOG: received fast shutdown request 2017-07-31 10:29:56.478 CEST [17713] LOG: aborting any active transactions 2017-07-31 10:29:56.480 CEST [17713] LOG: worker process: logical replication launcher (PID 17722) exited with exit code 1 2017-07-31 10:29:56.481 CEST [17717] LOG: shutting down 2017-07-31 10:29:56.481 CEST [17717] LOG: checkpoint starting: shutdown immediate 2017-07-31 10:29:56.484 CEST [17717] LOG: checkpoint complete: wrote 19 buffers (0.1%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.001 s, sync=0.000 s, total=0.003 s; sync files=0, longest=0.000 s, average=0.000 s; distance=47 kB, estimate=47 kB 2017-07-31 10:29:56.494 CEST [17713] LOG: database system is shut down: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/common“ wird betreten
make -C ../backend submake-errcodes
make[3]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/backend“ wird betreten
make[3]: Für das Ziel „submake-errcodes“ ist nichts zu tun.
make[3]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/backend“ wird verlassen
make[2]10:29 myon@experimental_k-a-dchroot.falla:~/po/po/src/pl/plperl $ cat log/postmaster.log 2017-07-31 10:29:54.995 CEST [17713] LOG: listening on Unix socket "/tmp/pg_regress-JaWXuT/.s.PGSQL.50848" 2017-07-31 10:29:55.015 CEST [17716] LOG: database system was shut down at 2017-07-31 10:29:54 CEST 2017-07-31 10:29:55.023 CEST [17713] LOG: database system is ready to accept connections 2017-07-31 10:29:56.068 CEST [17717] LOG: checkpoint starting: immediate force wait flush-all 2017-07-31 10:29:56.071 CEST [17717] LOG: checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.000 s, sync=0.000 s, total=0.002 s; sync files=0, longest=0.000 s, average=0.000 s; distance=1 kB, estimate=1 kB 2017-07-31 10:29:56.303 CEST [17717] LOG: checkpoint starting: immediate force wait 2017-07-31 10:29:56.305 CEST [17717] LOG: checkpoint complete: wrote 0 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.000 s, sync=0.000 s, total=0.001 s; sync files=0, longest=0.000 s, average=0.000 s; distance=0 kB, estimate=1 kB Util.c: loadable library and perl binaries are mismatched (got handshake key 0xd500080, needed 0xd600080) 2017-07-31 10:29:56.478 CEST [17713] LOG: received fast shutdown request 2017-07-31 10:29:56.478 CEST [17713] LOG: aborting any active transactions 2017-07-31 10:29:56.480 CEST [17713] LOG: worker process: logical replication launcher (PID 17722) exited with exit code 1 2017-07-31 10:29:56.481 CEST [17717] LOG: shutting down 2017-07-31 10:29:56.481 CEST [17717] LOG: checkpoint starting: shutdown immediate 2017-07-31 10:29:56.484 CEST [17717] LOG: checkpoint complete: wrote 19 buffers (0.1%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.001 s, sync=0.000 s, total=0.003 s; sync files=0, longest=0.000 s, average=0.000 s; distance=47 kB, estimate=47 kB 2017-07-31 10:29:56.494 CEST [17713] LOG: database system is shut down: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/common“ wird verlassen
make[1]: Verzeichnis „/home/myon/postgresql-10/postgresql-10-10~beta2/src/test/regress“ wird verlassen
rm -rf '/home/myon/postgresql-10/postgresql-10-10~beta2'/tmp_install
/bin/mkdir -p '/home/myon/postgresql-10/postgresql-10-10~beta2'/tmp_install/log
make -C '../../..' DESTDIR='/home/myon/postgresql-10/postgresql-10-10~beta2'/tmp_install install >'/home/myon/postgresql-10/postgresql-10-10~beta2'/tmp_install/log/install.log 2>&1
PATH="/home/myon/postgresql-10/postgresql-10-10~beta2/tmp_install/usr/local/pgsql/bin:$PATH" LD_LIBRARY_PATH="/home/myon/postgresql-10/postgresql-10-10~beta2/tmp_install/usr/local/pgsql/lib" ../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir= --dbname=pl_regression --load-extension=plperl --load-extension=plperlu plperl plperl_lc plperl_trigger plperl_shared plperl_elog plperl_util plperl_init plperlu plperl_array plperl_plperlu
============== creating temporary instance ==============
============== initializing database system ==============
============== starting postmaster ==============
running on port 50848 with PID 17713
============== creating database "pl_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== installing plperl ==============
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
connection to server was lost
command failed: "psql" -X -c "CREATE EXTENSION IF NOT EXISTS \"plperl\"" "pl_regression"
GNUmakefile:108: die Regel für Ziel „check“ scheiterte
make: *** [check] Fehler 2
[2]: 10:29 myon@experimental_k-a-dchroot.falla:~/po/po/src/pl/plperl $ cat log/postmaster.log 2017-07-31 10:29:54.995 CEST [17713] LOG: listening on Unix socket "/tmp/pg_regress-JaWXuT/.s.PGSQL.50848" 2017-07-31 10:29:55.015 CEST [17716] LOG: database system was shut down at 2017-07-31 10:29:54 CEST 2017-07-31 10:29:55.023 CEST [17713] LOG: database system is ready to accept connections 2017-07-31 10:29:56.068 CEST [17717] LOG: checkpoint starting: immediate force wait flush-all 2017-07-31 10:29:56.071 CEST [17717] LOG: checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.000 s, sync=0.000 s, total=0.002 s; sync files=0, longest=0.000 s, average=0.000 s; distance=1 kB, estimate=1 kB 2017-07-31 10:29:56.303 CEST [17717] LOG: checkpoint starting: immediate force wait 2017-07-31 10:29:56.305 CEST [17717] LOG: checkpoint complete: wrote 0 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.000 s, sync=0.000 s, total=0.001 s; sync files=0, longest=0.000 s, average=0.000 s; distance=0 kB, estimate=1 kB Util.c: loadable library and perl binaries are mismatched (got handshake key 0xd500080, needed 0xd600080) 2017-07-31 10:29:56.478 CEST [17713] LOG: received fast shutdown request 2017-07-31 10:29:56.478 CEST [17713] LOG: aborting any active transactions 2017-07-31 10:29:56.480 CEST [17713] LOG: worker process: logical replication launcher (PID 17722) exited with exit code 1 2017-07-31 10:29:56.481 CEST [17717] LOG: shutting down 2017-07-31 10:29:56.481 CEST [17717] LOG: checkpoint starting: shutdown immediate 2017-07-31 10:29:56.484 CEST [17717] LOG: checkpoint complete: wrote 19 buffers (0.1%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.001 s, sync=0.000 s, total=0.003 s; sync files=0, longest=0.000 s, average=0.000 s; distance=47 kB, estimate=47 kB 2017-07-31 10:29:56.494 CEST [17713] LOG: database system is shut down
2017-07-31 10:29:54.995 CEST [17713] LOG: listening on Unix socket "/tmp/pg_regress-JaWXuT/.s.PGSQL.50848"
2017-07-31 10:29:55.015 CEST [17716] LOG: database system was shut down at 2017-07-31 10:29:54 CEST
2017-07-31 10:29:55.023 CEST [17713] LOG: database system is ready to accept connections
2017-07-31 10:29:56.068 CEST [17717] LOG: checkpoint starting: immediate force wait flush-all
2017-07-31 10:29:56.071 CEST [17717] LOG: checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.000 s, sync=0.000 s, total=0.002 s; sync files=0, longest=0.000 s, average=0.000 s; distance=1 kB, estimate=1 kB
2017-07-31 10:29:56.303 CEST [17717] LOG: checkpoint starting: immediate force wait
2017-07-31 10:29:56.305 CEST [17717] LOG: checkpoint complete: wrote 0 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.000 s, sync=0.000 s, total=0.001 s; sync files=0, longest=0.000 s, average=0.000 s; distance=0 kB, estimate=1 kB
Util.c: loadable library and perl binaries are mismatched (got handshake key 0xd500080, needed 0xd600080)
2017-07-31 10:29:56.478 CEST [17713] LOG: received fast shutdown request
2017-07-31 10:29:56.478 CEST [17713] LOG: aborting any active transactions
2017-07-31 10:29:56.480 CEST [17713] LOG: worker process: logical replication launcher (PID 17722) exited with exit code 1
2017-07-31 10:29:56.481 CEST [17717] LOG: shutting down
2017-07-31 10:29:56.481 CEST [17717] LOG: checkpoint starting: shutdown immediate
2017-07-31 10:29:56.484 CEST [17717] LOG: checkpoint complete: wrote 19 buffers (0.1%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.001 s, sync=0.000 s, total=0.003 s; sync files=0, longest=0.000 s, average=0.000 s; distance=47 kB, estimate=47 kB
2017-07-31 10:29:56.494 CEST [17713] LOG: database system is shut down

Christoph

Attachments:

plperl_opmask.htext/x-chdr; charset=us-asciiDownload
perlchunks.htext/x-chdr; charset=us-asciiDownload
SPI.ctext/x-csrc; charset=us-asciiDownload
/*
 * This file was generated automatically by ExtUtils::ParseXS version 3.34 from the
 * contents of SPI.xs. Do not edit this file, edit SPI.xs instead.
 *
 *    ANY CHANGES MADE HERE WILL BE LOST!
 *
 */

#line 1 "SPI.xs"
/**********************************************************************
 * PostgreSQL::InServer::SPI
 *
 * SPI interface for plperl.
 *
 *    src/pl/plperl/SPI.xs
 *
 **********************************************************************/

/* this must be first: */
#include "postgres.h"
#include "mb/pg_wchar.h"       /* for GetDatabaseEncoding */

/* Defined by Perl */
#undef _

/* perl stuff */
#include "plperl.h"
#include "plperl_helpers.h"


/*
 * Interface routine to catch ereports and punt them to Perl
 */
static void
do_plperl_return_next(SV *sv)
{
	MemoryContext oldcontext = CurrentMemoryContext;

	PG_TRY();
	{
		plperl_return_next(sv);
	}
	PG_CATCH();
	{
		ErrorData  *edata;

		/* Must reset elog.c's state */
		MemoryContextSwitchTo(oldcontext);
		edata = CopyErrorData();
		FlushErrorState();

		/* Punt the error to Perl */
		croak_cstr(edata->message);
	}
	PG_END_TRY();
}


#line 60 "SPI.c"
#ifndef PERL_UNUSED_VAR
#  define PERL_UNUSED_VAR(var) if (0) var = var
#endif

#ifndef dVAR
#  define dVAR		dNOOP
#endif


/* This stuff is not part of the API! You have been warned. */
#ifndef PERL_VERSION_DECIMAL
#  define PERL_VERSION_DECIMAL(r,v,s) (r*1000000 + v*1000 + s)
#endif
#ifndef PERL_DECIMAL_VERSION
#  define PERL_DECIMAL_VERSION \
	  PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)
#endif
#ifndef PERL_VERSION_GE
#  define PERL_VERSION_GE(r,v,s) \
	  (PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s))
#endif
#ifndef PERL_VERSION_LE
#  define PERL_VERSION_LE(r,v,s) \
	  (PERL_DECIMAL_VERSION <= PERL_VERSION_DECIMAL(r,v,s))
#endif

/* XS_INTERNAL is the explicit static-linkage variant of the default
 * XS macro.
 *
 * XS_EXTERNAL is the same as XS_INTERNAL except it does not include
 * "STATIC", ie. it exports XSUB symbols. You probably don't want that
 * for anything but the BOOT XSUB.
 *
 * See XSUB.h in core!
 */


/* TODO: This might be compatible further back than 5.10.0. */
#if PERL_VERSION_GE(5, 10, 0) && PERL_VERSION_LE(5, 15, 1)
#  undef XS_EXTERNAL
#  undef XS_INTERNAL
#  if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
#    define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name)
#    define XS_INTERNAL(name) STATIC XSPROTO(name)
#  endif
#  if defined(__SYMBIAN32__)
#    define XS_EXTERNAL(name) EXPORT_C XSPROTO(name)
#    define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name)
#  endif
#  ifndef XS_EXTERNAL
#    if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus)
#      define XS_EXTERNAL(name) void name(pTHX_ CV* cv __attribute__unused__)
#      define XS_INTERNAL(name) STATIC void name(pTHX_ CV* cv __attribute__unused__)
#    else
#      ifdef __cplusplus
#        define XS_EXTERNAL(name) extern "C" XSPROTO(name)
#        define XS_INTERNAL(name) static XSPROTO(name)
#      else
#        define XS_EXTERNAL(name) XSPROTO(name)
#        define XS_INTERNAL(name) STATIC XSPROTO(name)
#      endif
#    endif
#  endif
#endif

/* perl >= 5.10.0 && perl <= 5.15.1 */


/* The XS_EXTERNAL macro is used for functions that must not be static
 * like the boot XSUB of a module. If perl didn't have an XS_EXTERNAL
 * macro defined, the best we can do is assume XS is the same.
 * Dito for XS_INTERNAL.
 */
#ifndef XS_EXTERNAL
#  define XS_EXTERNAL(name) XS(name)
#endif
#ifndef XS_INTERNAL
#  define XS_INTERNAL(name) XS(name)
#endif

/* Now, finally, after all this mess, we want an ExtUtils::ParseXS
 * internal macro that we're free to redefine for varying linkage due
 * to the EXPORT_XSUB_SYMBOLS XS keyword. This is internal, use
 * XS_EXTERNAL(name) or XS_INTERNAL(name) in your code if you need to!
 */

#undef XS_EUPXS
#if defined(PERL_EUPXS_ALWAYS_EXPORT)
#  define XS_EUPXS(name) XS_EXTERNAL(name)
#else
   /* default to internal */
#  define XS_EUPXS(name) XS_INTERNAL(name)
#endif

#ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE
#define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params)

/* prototype to pass -Wmissing-prototypes */
STATIC void
S_croak_xs_usage(const CV *const cv, const char *const params);

STATIC void
S_croak_xs_usage(const CV *const cv, const char *const params)
{
    const GV *const gv = CvGV(cv);

    PERL_ARGS_ASSERT_CROAK_XS_USAGE;

    if (gv) {
        const char *const gvname = GvNAME(gv);
        const HV *const stash = GvSTASH(gv);
        const char *const hvname = stash ? HvNAME(stash) : NULL;

        if (hvname)
	    Perl_croak_nocontext("Usage: %s::%s(%s)", hvname, gvname, params);
        else
	    Perl_croak_nocontext("Usage: %s(%s)", gvname, params);
    } else {
        /* Pants. I don't think that it should be possible to get here. */
	Perl_croak_nocontext("Usage: CODE(0x%" UVxf ")(%s)", PTR2UV(cv), params);
    }
}
#undef  PERL_ARGS_ASSERT_CROAK_XS_USAGE

#define croak_xs_usage        S_croak_xs_usage

#endif

/* NOTE: the prototype of newXSproto() is different in versions of perls,
 * so we define a portable version of newXSproto()
 */
#ifdef newXS_flags
#define newXSproto_portable(name, c_impl, file, proto) newXS_flags(name, c_impl, file, proto, 0)
#else
#define newXSproto_portable(name, c_impl, file, proto) (PL_Sv=(SV*)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV*)PL_Sv)
#endif /* !defined(newXS_flags) */

#if PERL_VERSION_LE(5, 21, 5)
#  define newXS_deffile(a,b) Perl_newXS(aTHX_ a,b,file)
#else
#  define newXS_deffile(a,b) Perl_newXS_deffile(aTHX_ a,b)
#endif

#line 204 "SPI.c"

XS_EUPXS(XS__spi_exec_query); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS__spi_exec_query)
{
    dVAR; dXSARGS;
    if (items < 1)
       croak_xs_usage(cv,  "sv, ...");
    {
	SV*	sv = ST(0)
;
#line 59 "SPI.xs"
		HV *ret_hash;
		int limit = 0;
		char *query;
#line 219 "SPI.c"
	SV *	RETVAL;
#line 63 "SPI.xs"
		if (items > 2)
			croak("Usage: spi_exec_query(query, limit) "
				  "or spi_exec_query(query)");
		if (items == 2)
			limit = SvIV(ST(1));
		query = sv2cstr(sv);
		ret_hash = plperl_spi_exec(query, limit);
		pfree(query);
		RETVAL = newRV_noinc((SV*) ret_hash);
#line 231 "SPI.c"
	RETVAL = sv_2mortal(RETVAL);
	ST(0) = RETVAL;
    }
    XSRETURN(1);
}


XS_EUPXS(XS__return_next); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS__return_next)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "rv");
    {
	SV *	rv = ST(0)
;
#line 79 "SPI.xs"
		do_plperl_return_next(rv);
#line 250 "SPI.c"
    }
    XSRETURN_EMPTY;
}


XS_EUPXS(XS__spi_query); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS__spi_query)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "sv");
    {
	SV *	sv = ST(0)
;
	SV *	RETVAL;
#line 85 "SPI.xs"
		char* query = sv2cstr(sv);
		RETVAL = plperl_spi_query(query);
		pfree(query);
#line 270 "SPI.c"
	RETVAL = sv_2mortal(RETVAL);
	ST(0) = RETVAL;
    }
    XSRETURN(1);
}


XS_EUPXS(XS__spi_fetchrow); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS__spi_fetchrow)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "sv");
    {
	SV*	sv = ST(0)
;
	SV *	RETVAL;
#line 95 "SPI.xs"
		char* cursor = sv2cstr(sv);
		RETVAL = plperl_spi_fetchrow(cursor);
		pfree(cursor);
#line 292 "SPI.c"
	RETVAL = sv_2mortal(RETVAL);
	ST(0) = RETVAL;
    }
    XSRETURN(1);
}


XS_EUPXS(XS__spi_prepare); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS__spi_prepare)
{
    dVAR; dXSARGS;
    if (items < 1)
       croak_xs_usage(cv,  "sv, ...");
    {
	SV*	sv = ST(0)
;
	SV *	RETVAL;
#line 105 "SPI.xs"
		int i;
		SV** argv;
		char* query = sv2cstr(sv);
		if (items < 1)
			Perl_croak(aTHX_ "Usage: spi_prepare(query, ...)");
		argv = ( SV**) palloc(( items - 1) * sizeof(SV*));
		for ( i = 1; i < items; i++)
			argv[i - 1] = ST(i);
		RETVAL = plperl_spi_prepare(query, items - 1, argv);
		pfree( argv);
		pfree(query);
#line 322 "SPI.c"
	RETVAL = sv_2mortal(RETVAL);
	ST(0) = RETVAL;
    }
    XSRETURN(1);
}


XS_EUPXS(XS__spi_exec_prepared); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS__spi_exec_prepared)
{
    dVAR; dXSARGS;
    if (items < 1)
       croak_xs_usage(cv,  "sv, ...");
    {
	SV*	sv = ST(0)
;
#line 123 "SPI.xs"
		HV *ret_hash;
#line 341 "SPI.c"
	SV *	RETVAL;
#line 125 "SPI.xs"
		HV *attr = NULL;
		int i, offset = 1, argc;
		SV ** argv;
		char *query = sv2cstr(sv);
		if ( items < 1)
			Perl_croak(aTHX_ "Usage: spi_exec_prepared(query, [\\%%attr,] "
					   "[\\@bind_values])");
		if ( items > 1 && SvROK( ST( 1)) && SvTYPE( SvRV( ST( 1))) == SVt_PVHV)
		{
			attr = ( HV*) SvRV(ST(1));
			offset++;
		}
		argc = items - offset;
		argv = ( SV**) palloc( argc * sizeof(SV*));
		for ( i = 0; offset < items; offset++, i++)
			argv[i] = ST(offset);
		ret_hash = plperl_spi_exec_prepared(query, attr, argc, argv);
		RETVAL = newRV_noinc((SV*)ret_hash);
		pfree( argv);
		pfree(query);
#line 364 "SPI.c"
	RETVAL = sv_2mortal(RETVAL);
	ST(0) = RETVAL;
    }
    XSRETURN(1);
}


XS_EUPXS(XS__spi_query_prepared); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS__spi_query_prepared)
{
    dVAR; dXSARGS;
    if (items < 1)
       croak_xs_usage(cv,  "sv, ...");
    {
	SV *	sv = ST(0)
;
	SV *	RETVAL;
#line 152 "SPI.xs"
		int i;
		SV ** argv;
		char *query = sv2cstr(sv);
		if ( items < 1)
			Perl_croak(aTHX_ "Usage: spi_query_prepared(query, "
					   "[\\@bind_values])");
		argv = ( SV**) palloc(( items - 1) * sizeof(SV*));
		for ( i = 1; i < items; i++)
			argv[i - 1] = ST(i);
		RETVAL = plperl_spi_query_prepared(query, items - 1, argv);
		pfree( argv);
		pfree(query);
#line 395 "SPI.c"
	RETVAL = sv_2mortal(RETVAL);
	ST(0) = RETVAL;
    }
    XSRETURN(1);
}


XS_EUPXS(XS__spi_freeplan); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS__spi_freeplan)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "sv");
    {
	SV *	sv = ST(0)
;
#line 171 "SPI.xs"
		char *query = sv2cstr(sv);
		plperl_spi_freeplan(query);
		pfree(query);
#line 416 "SPI.c"
    }
    XSRETURN_EMPTY;
}


XS_EUPXS(XS__spi_cursor_close); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS__spi_cursor_close)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "sv");
    {
	SV *	sv = ST(0)
;
#line 179 "SPI.xs"
		char *cursor = sv2cstr(sv);
		plperl_spi_cursor_close(cursor);
		pfree(cursor);
#line 435 "SPI.c"
    }
    XSRETURN_EMPTY;
}

#ifdef __cplusplus
extern "C"
#endif
XS_EXTERNAL(boot_PostgreSQL__InServer__SPI); /* prototype to pass -Wmissing-prototypes */
XS_EXTERNAL(boot_PostgreSQL__InServer__SPI)
{
#if PERL_VERSION_LE(5, 21, 5)
    dVAR; dXSARGS;
#else
    dVAR; dXSBOOTARGSAPIVERCHK;
#endif
#if (PERL_REVISION == 5 && PERL_VERSION < 9)
    char* file = __FILE__;
#else
    const char* file = __FILE__;
#endif

    PERL_UNUSED_VAR(file);

    PERL_UNUSED_VAR(cv); /* -W */
    PERL_UNUSED_VAR(items); /* -W */
#if PERL_VERSION_LE(5, 21, 5) && defined(XS_APIVERSION_BOOTCHECK)
  XS_APIVERSION_BOOTCHECK;
#endif

        (void)newXSproto_portable("spi_exec_query", XS__spi_exec_query, file, "$;@");
        (void)newXSproto_portable("return_next", XS__return_next, file, "$");
        (void)newXSproto_portable("spi_query", XS__spi_query, file, "$");
        (void)newXSproto_portable("spi_fetchrow", XS__spi_fetchrow, file, "$");
        (void)newXSproto_portable("spi_prepare", XS__spi_prepare, file, "$;@");
        (void)newXSproto_portable("spi_exec_prepared", XS__spi_exec_prepared, file, "$;@");
        (void)newXSproto_portable("spi_query_prepared", XS__spi_query_prepared, file, "$;@");
        (void)newXSproto_portable("spi_freeplan", XS__spi_freeplan, file, "$");
        (void)newXSproto_portable("spi_cursor_close", XS__spi_cursor_close, file, "$");

    /* Initialisation Section */

#line 185 "SPI.xs"
    items = 0;  /* avoid 'unused variable' warning */

#line 480 "SPI.c"

    /* End of Initialisation Section */

#if PERL_VERSION_LE(5, 21, 5)
#  if PERL_VERSION_GE(5, 9, 0)
    if (PL_unitcheckav)
        call_list(PL_scopestack_ix, PL_unitcheckav);
#  endif
    XSRETURN_YES;
#else
    Perl_xs_boot_epilog(aTHX_ ax);
#endif
}

Util.ctext/x-csrc; charset=us-asciiDownload
/*
 * This file was generated automatically by ExtUtils::ParseXS version 3.34 from the
 * contents of Util.xs. Do not edit this file, edit Util.xs instead.
 *
 *    ANY CHANGES MADE HERE WILL BE LOST!
 *
 */

#line 1 "Util.xs"
/**********************************************************************
 * PostgreSQL::InServer::Util
 *
 * src/pl/plperl/Util.xs
 *
 * Defines plperl interfaces for general-purpose utilities.
 * This module is bootstrapped as soon as an interpreter is initialized.
 * Currently doesn't define a PACKAGE= so all subs are in main:: to avoid
 * the need for explicit importing.
 *
 **********************************************************************/

/* this must be first: */
#include "postgres.h"
#include "fmgr.h"
#include "utils/builtins.h"
#include "utils/bytea.h"       /* for byteain & byteaout */
#include "mb/pg_wchar.h"       /* for GetDatabaseEncoding */
/* Defined by Perl */
#undef _

/* perl stuff */
#include "plperl.h"
#include "plperl_helpers.h"

/*
 * Implementation of plperl's elog() function
 *
 * If the error level is less than ERROR, we'll just emit the message and
 * return.  When it is ERROR, elog() will longjmp, which we catch and
 * turn into a Perl croak().  Note we are assuming that elog() can't have
 * any internal failures that are so bad as to require a transaction abort.
 *
 * This is out-of-line to suppress "might be clobbered by longjmp" warnings.
 */
static void
do_util_elog(int level, SV *msg)
{
	MemoryContext oldcontext = CurrentMemoryContext;
	char	   * volatile cmsg = NULL;

	PG_TRY();
	{
		cmsg = sv2cstr(msg);
		elog(level, "%s", cmsg);
		pfree(cmsg);
	}
	PG_CATCH();
	{
		ErrorData  *edata;

		/* Must reset elog.c's state */
		MemoryContextSwitchTo(oldcontext);
		edata = CopyErrorData();
		FlushErrorState();

		if (cmsg)
			pfree(cmsg);

		/* Punt the error to Perl */
		croak_cstr(edata->message);
	}
	PG_END_TRY();
}

static text *
sv2text(SV *sv)
{
	char	   *str = sv2cstr(sv);
	text	   *text;

	text = cstring_to_text(str);
	pfree(str);
	return text;
}

#line 87 "Util.c"
#ifndef PERL_UNUSED_VAR
#  define PERL_UNUSED_VAR(var) if (0) var = var
#endif

#ifndef dVAR
#  define dVAR		dNOOP
#endif


/* This stuff is not part of the API! You have been warned. */
#ifndef PERL_VERSION_DECIMAL
#  define PERL_VERSION_DECIMAL(r,v,s) (r*1000000 + v*1000 + s)
#endif
#ifndef PERL_DECIMAL_VERSION
#  define PERL_DECIMAL_VERSION \
	  PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)
#endif
#ifndef PERL_VERSION_GE
#  define PERL_VERSION_GE(r,v,s) \
	  (PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s))
#endif
#ifndef PERL_VERSION_LE
#  define PERL_VERSION_LE(r,v,s) \
	  (PERL_DECIMAL_VERSION <= PERL_VERSION_DECIMAL(r,v,s))
#endif

/* XS_INTERNAL is the explicit static-linkage variant of the default
 * XS macro.
 *
 * XS_EXTERNAL is the same as XS_INTERNAL except it does not include
 * "STATIC", ie. it exports XSUB symbols. You probably don't want that
 * for anything but the BOOT XSUB.
 *
 * See XSUB.h in core!
 */


/* TODO: This might be compatible further back than 5.10.0. */
#if PERL_VERSION_GE(5, 10, 0) && PERL_VERSION_LE(5, 15, 1)
#  undef XS_EXTERNAL
#  undef XS_INTERNAL
#  if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
#    define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name)
#    define XS_INTERNAL(name) STATIC XSPROTO(name)
#  endif
#  if defined(__SYMBIAN32__)
#    define XS_EXTERNAL(name) EXPORT_C XSPROTO(name)
#    define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name)
#  endif
#  ifndef XS_EXTERNAL
#    if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus)
#      define XS_EXTERNAL(name) void name(pTHX_ CV* cv __attribute__unused__)
#      define XS_INTERNAL(name) STATIC void name(pTHX_ CV* cv __attribute__unused__)
#    else
#      ifdef __cplusplus
#        define XS_EXTERNAL(name) extern "C" XSPROTO(name)
#        define XS_INTERNAL(name) static XSPROTO(name)
#      else
#        define XS_EXTERNAL(name) XSPROTO(name)
#        define XS_INTERNAL(name) STATIC XSPROTO(name)
#      endif
#    endif
#  endif
#endif

/* perl >= 5.10.0 && perl <= 5.15.1 */


/* The XS_EXTERNAL macro is used for functions that must not be static
 * like the boot XSUB of a module. If perl didn't have an XS_EXTERNAL
 * macro defined, the best we can do is assume XS is the same.
 * Dito for XS_INTERNAL.
 */
#ifndef XS_EXTERNAL
#  define XS_EXTERNAL(name) XS(name)
#endif
#ifndef XS_INTERNAL
#  define XS_INTERNAL(name) XS(name)
#endif

/* Now, finally, after all this mess, we want an ExtUtils::ParseXS
 * internal macro that we're free to redefine for varying linkage due
 * to the EXPORT_XSUB_SYMBOLS XS keyword. This is internal, use
 * XS_EXTERNAL(name) or XS_INTERNAL(name) in your code if you need to!
 */

#undef XS_EUPXS
#if defined(PERL_EUPXS_ALWAYS_EXPORT)
#  define XS_EUPXS(name) XS_EXTERNAL(name)
#else
   /* default to internal */
#  define XS_EUPXS(name) XS_INTERNAL(name)
#endif

#ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE
#define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params)

/* prototype to pass -Wmissing-prototypes */
STATIC void
S_croak_xs_usage(const CV *const cv, const char *const params);

STATIC void
S_croak_xs_usage(const CV *const cv, const char *const params)
{
    const GV *const gv = CvGV(cv);

    PERL_ARGS_ASSERT_CROAK_XS_USAGE;

    if (gv) {
        const char *const gvname = GvNAME(gv);
        const HV *const stash = GvSTASH(gv);
        const char *const hvname = stash ? HvNAME(stash) : NULL;

        if (hvname)
	    Perl_croak_nocontext("Usage: %s::%s(%s)", hvname, gvname, params);
        else
	    Perl_croak_nocontext("Usage: %s(%s)", gvname, params);
    } else {
        /* Pants. I don't think that it should be possible to get here. */
	Perl_croak_nocontext("Usage: CODE(0x%" UVxf ")(%s)", PTR2UV(cv), params);
    }
}
#undef  PERL_ARGS_ASSERT_CROAK_XS_USAGE

#define croak_xs_usage        S_croak_xs_usage

#endif

/* NOTE: the prototype of newXSproto() is different in versions of perls,
 * so we define a portable version of newXSproto()
 */
#ifdef newXS_flags
#define newXSproto_portable(name, c_impl, file, proto) newXS_flags(name, c_impl, file, proto, 0)
#else
#define newXSproto_portable(name, c_impl, file, proto) (PL_Sv=(SV*)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV*)PL_Sv)
#endif /* !defined(newXS_flags) */

#if PERL_VERSION_LE(5, 21, 5)
#  define newXS_deffile(a,b) Perl_newXS(aTHX_ a,b,file)
#else
#  define newXS_deffile(a,b) Perl_newXS_deffile(aTHX_ a,b)
#endif

#line 231 "Util.c"

XS_EUPXS(XS___aliased_constants); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS___aliased_constants)
{
    dVAR; dXSARGS;
    dXSI32;
    if (items != 0)
       croak_xs_usage(cv,  "");
    {
	int	RETVAL;
	dXSTARG;
#line 93 "Util.xs"
    /* uses the ALIAS value as the return value */
    RETVAL = ix;
#line 246 "Util.c"
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}


XS_EUPXS(XS__elog); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS__elog)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "level, msg");
    {
	int	level = (int)SvIV(ST(0))
;
	SV *	msg = ST(1)
;
#line 104 "Util.xs"
        if (level > ERROR)      /* no PANIC allowed thanks */
            level = ERROR;
        if (level < DEBUG5)
            level = DEBUG5;
        do_util_elog(level, msg);
#line 270 "Util.c"
    }
    XSRETURN_EMPTY;
}


XS_EUPXS(XS__quote_literal); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS__quote_literal)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "sv");
    {
	SV *	sv = ST(0)
;
	SV *	RETVAL;
#line 114 "Util.xs"
    if (!sv || !SvOK(sv)) {
        RETVAL = &PL_sv_undef;
    }
    else {
        text *arg = sv2text(sv);
		text *quoted = DatumGetTextPP(DirectFunctionCall1(quote_literal, PointerGetDatum(arg)));
		char *str;

		pfree(arg);
		str = text_to_cstring(quoted);
		RETVAL = cstr2sv(str);
		pfree(str);
    }
#line 300 "Util.c"
	RETVAL = sv_2mortal(RETVAL);
	ST(0) = RETVAL;
    }
    XSRETURN(1);
}


XS_EUPXS(XS__quote_nullable); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS__quote_nullable)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "sv");
    {
	SV *	sv = ST(0)
;
	SV *	RETVAL;
#line 134 "Util.xs"
    if (!sv || !SvOK(sv))
	{
        RETVAL = cstr2sv("NULL");
    }
    else
	{
        text *arg = sv2text(sv);
		text *quoted = DatumGetTextPP(DirectFunctionCall1(quote_nullable, PointerGetDatum(arg)));
		char *str;

		pfree(arg);
		str = text_to_cstring(quoted);
		RETVAL = cstr2sv(str);
		pfree(str);
    }
#line 334 "Util.c"
	RETVAL = sv_2mortal(RETVAL);
	ST(0) = RETVAL;
    }
    XSRETURN(1);
}


XS_EUPXS(XS__quote_ident); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS__quote_ident)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "sv");
    {
	SV *	sv = ST(0)
;
#line 156 "Util.xs"
        text *arg;
		text *quoted;
		char *str;
#line 355 "Util.c"
	SV *	RETVAL;
#line 160 "Util.xs"
        arg = sv2text(sv);
		quoted = DatumGetTextPP(DirectFunctionCall1(quote_ident, PointerGetDatum(arg)));

		pfree(arg);
		str = text_to_cstring(quoted);
		RETVAL = cstr2sv(str);
		pfree(str);
#line 365 "Util.c"
	RETVAL = sv_2mortal(RETVAL);
	ST(0) = RETVAL;
    }
    XSRETURN(1);
}


XS_EUPXS(XS__decode_bytea); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS__decode_bytea)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "sv");
    {
	SV *	sv = ST(0)
;
#line 174 "Util.xs"
        char *arg;
        text *ret;
#line 385 "Util.c"
	SV *	RETVAL;
#line 177 "Util.xs"
        arg = SvPVbyte_nolen(sv);
        ret = DatumGetTextPP(DirectFunctionCall1(byteain, PointerGetDatum(arg)));
        /* not cstr2sv because this is raw bytes not utf8'able */
        RETVAL = newSVpvn(VARDATA_ANY(ret), VARSIZE_ANY_EXHDR(ret));
#line 392 "Util.c"
	RETVAL = sv_2mortal(RETVAL);
	ST(0) = RETVAL;
    }
    XSRETURN(1);
}


XS_EUPXS(XS__encode_bytea); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS__encode_bytea)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "sv");
    {
	SV *	sv = ST(0)
;
#line 188 "Util.xs"
        text *arg;
        char *ret;
		STRLEN len;
#line 413 "Util.c"
	SV *	RETVAL;
#line 192 "Util.xs"
        /* not sv2text because this is raw bytes not utf8'able */
        ret = SvPVbyte(sv, len);
		arg = cstring_to_text_with_len(ret, len);
        ret = DatumGetCString(DirectFunctionCall1(byteaout, PointerGetDatum(arg)));
        RETVAL = cstr2sv(ret);
#line 421 "Util.c"
	RETVAL = sv_2mortal(RETVAL);
	ST(0) = RETVAL;
    }
    XSRETURN(1);
}


XS_EUPXS(XS__looks_like_number); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS__looks_like_number)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "sv");
    {
	SV *	sv = ST(0)
;
	SV *	RETVAL;
#line 204 "Util.xs"
    if (!SvOK(sv))
        RETVAL = &PL_sv_undef;
    else if ( looks_like_number(sv) )
        RETVAL = &PL_sv_yes;
    else
        RETVAL = &PL_sv_no;
#line 446 "Util.c"
	RETVAL = sv_2mortal(RETVAL);
	ST(0) = RETVAL;
    }
    XSRETURN(1);
}


XS_EUPXS(XS__encode_typed_literal); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS__encode_typed_literal)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "sv, typname");
    {
	SV *	sv = ST(0)
;
	char *	typname = (char *)SvPV_nolen(ST(1))
;
#line 218 "Util.xs"
		char 	*outstr;
#line 467 "Util.c"
	SV *	RETVAL;
#line 220 "Util.xs"
		outstr = plperl_sv_to_literal(sv, typname);
		if (outstr == NULL)
			RETVAL = &PL_sv_undef;
		else
			RETVAL = cstr2sv(outstr);
#line 475 "Util.c"
	RETVAL = sv_2mortal(RETVAL);
	ST(0) = RETVAL;
    }
    XSRETURN(1);
}

#ifdef __cplusplus
extern "C"
#endif
XS_EXTERNAL(boot_PostgreSQL__InServer__Util); /* prototype to pass -Wmissing-prototypes */
XS_EXTERNAL(boot_PostgreSQL__InServer__Util)
{
#if PERL_VERSION_LE(5, 21, 5)
    dVAR; dXSARGS;
#else
    dVAR; dXSBOOTARGSAPIVERCHK;
#endif
#if (PERL_REVISION == 5 && PERL_VERSION < 9)
    char* file = __FILE__;
#else
    const char* file = __FILE__;
#endif

    PERL_UNUSED_VAR(file);

    PERL_UNUSED_VAR(cv); /* -W */
    PERL_UNUSED_VAR(items); /* -W */
#if PERL_VERSION_LE(5, 21, 5) && defined(XS_APIVERSION_BOOTCHECK)
  XS_APIVERSION_BOOTCHECK;
#endif

        cv = newXSproto_portable("DEBUG", XS___aliased_constants, file, "");
        XSANY.any_i32 = DEBUG2;
        cv = newXSproto_portable("ERROR", XS___aliased_constants, file, "");
        XSANY.any_i32 = ERROR;
        cv = newXSproto_portable("INFO", XS___aliased_constants, file, "");
        XSANY.any_i32 = INFO;
        cv = newXSproto_portable("LOG", XS___aliased_constants, file, "");
        XSANY.any_i32 = LOG;
        cv = newXSproto_portable("NOTICE", XS___aliased_constants, file, "");
        XSANY.any_i32 = NOTICE;
        cv = newXSproto_portable("WARNING", XS___aliased_constants, file, "");
        XSANY.any_i32 = WARNING;
        cv = newXSproto_portable("_aliased_constants", XS___aliased_constants, file, "");
        XSANY.any_i32 = 0;
        (void)newXSproto_portable("elog", XS__elog, file, "$$");
        (void)newXSproto_portable("quote_literal", XS__quote_literal, file, "$");
        (void)newXSproto_portable("quote_nullable", XS__quote_nullable, file, "$");
        (void)newXSproto_portable("quote_ident", XS__quote_ident, file, "$");
        (void)newXSproto_portable("decode_bytea", XS__decode_bytea, file, "$");
        (void)newXSproto_portable("encode_bytea", XS__encode_bytea, file, "$");
        (void)newXSproto_portable("looks_like_number", XS__looks_like_number, file, "$");
        (void)newXSproto_portable("encode_typed_literal", XS__encode_typed_literal, file, "$$");

    /* Initialisation Section */

#line 229 "Util.xs"
    items = 0;  /* avoid 'unused variable' warning */

#line 535 "Util.c"

    /* End of Initialisation Section */

#if PERL_VERSION_LE(5, 21, 5)
#  if PERL_VERSION_GE(5, 9, 0)
    if (PL_unitcheckav)
        call_list(PL_scopestack_ix, PL_unitcheckav);
#  endif
    XSRETURN_YES;
#else
    Perl_xs_boot_epilog(aTHX_ ax);
#endif
}

#56Tom Lane
tgl@sss.pgh.pa.us
In reply to: Christoph Berg (#55)
Re: pl/perl extension fails on Windows

Christoph Berg <myon@debian.org> writes:

The only interesting line in log/postmaster.log is a log_line_prefix-less
Util.c: loadable library and perl binaries are mismatched (got handshake key 0xd500080, needed 0xd600080)

Can we see the Perl-related output from configure, particularly the new
lines about CFLAGS?

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

#57Christoph Berg
myon@debian.org
In reply to: Tom Lane (#56)
Re: pl/perl extension fails on Windows

Re: Tom Lane 2017-07-31 <30582.1501508356@sss.pgh.pa.us>

Christoph Berg <myon@debian.org> writes:

The only interesting line in log/postmaster.log is a log_line_prefix-less
Util.c: loadable library and perl binaries are mismatched (got handshake key 0xd500080, needed 0xd600080)

Can we see the Perl-related output from configure, particularly the new
lines about CFLAGS?

$ ./configure --with-perl

checking whether to build Perl modules... yes

checking for perl... /usr/bin/perl
configure: using perl 5.26.0
checking for Perl archlibexp... /usr/lib/x86_64-kfreebsd-gnu/perl/5.26
checking for Perl privlibexp... /usr/share/perl/5.26
checking for Perl useshrplib... true
checking for CFLAGS recommended by Perl... -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fwrapv -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
checking for CFLAGS to compile embedded Perl... -DDEBIAN
checking for flags to link embedded Perl... -fstack-protector-strong -L/usr/local/lib -L/usr/lib/x86_64-kfreebsd-gnu/perl/5.26/CORE -lperl -ldl -lm -lpthread -lc -lcrypt

checking for perl.h... yes
checking for libperl... yes

Christoph

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

#58Sandeep Thakkar
sandeep.thakkar@enterprisedb.com
In reply to: Christoph Berg (#57)
Re: pl/perl extension fails on Windows

Hi

An update from beta3 build: We are no longer seeing this issue (handshake
failure) on Windows 64bit, but on Windows 32bit it still persists.

On Mon, Jul 31, 2017 at 10:15 PM, Christoph Berg <myon@debian.org> wrote:

Re: Tom Lane 2017-07-31 <30582.1501508356@sss.pgh.pa.us>

Christoph Berg <myon@debian.org> writes:

The only interesting line in log/postmaster.log is a

log_line_prefix-less

Util.c: loadable library and perl binaries are mismatched (got

handshake key 0xd500080, needed 0xd600080)

Can we see the Perl-related output from configure, particularly the new
lines about CFLAGS?

$ ./configure --with-perl

checking whether to build Perl modules... yes

checking for perl... /usr/bin/perl
configure: using perl 5.26.0
checking for Perl archlibexp... /usr/lib/x86_64-kfreebsd-gnu/perl/5.26
checking for Perl privlibexp... /usr/share/perl/5.26
checking for Perl useshrplib... true
checking for CFLAGS recommended by Perl... -D_REENTRANT -D_GNU_SOURCE
-DDEBIAN -fwrapv -fno-strict-aliasing -pipe -I/usr/local/include
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
checking for CFLAGS to compile embedded Perl... -DDEBIAN
checking for flags to link embedded Perl... -fstack-protector-strong
-L/usr/local/lib -L/usr/lib/x86_64-kfreebsd-gnu/perl/5.26/CORE -lperl
-ldl -lm -lpthread -lc -lcrypt

checking for perl.h... yes
checking for libperl... yes

Christoph

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

--
Sandeep Thakkar
EDB

#59Robert Haas
robertmhaas@gmail.com
In reply to: Sandeep Thakkar (#58)
Re: pl/perl extension fails on Windows

On Tue, Aug 8, 2017 at 8:37 AM, Sandeep Thakkar
<sandeep.thakkar@enterprisedb.com> wrote:

An update from beta3 build: We are no longer seeing this issue (handshake
failure) on Windows 64bit, but on Windows 32bit it still persists.

Hmm, maybe you should've reported it sooner, so we could've tried to
fix this before beta3 went out.

What was the exact message you saw, including the hex values?

Is the Perl you were building against for plperl the same Perl that
was being used for the build itself?

Do you have the portion of the build log where src/pl/plperl was being built?

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

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

#60Sandeep Thakkar
sandeep.thakkar@enterprisedb.com
In reply to: Robert Haas (#59)
2 attachment(s)
Re: pl/perl extension fails on Windows

On Tue, Aug 8, 2017 at 8:19 PM, Robert Haas <robertmhaas@gmail.com> wrote:

On Tue, Aug 8, 2017 at 8:37 AM, Sandeep Thakkar
<sandeep.thakkar@enterprisedb.com> wrote:

An update from beta3 build: We are no longer seeing this issue (handshake
failure) on Windows 64bit, but on Windows 32bit it still persists.

Hmm, maybe you should've reported it sooner, so we could've tried to
fix this before beta3 went out.

Yes, that would have been better. The patch was tested only on Windows

64bit and we never thought that it won't work on 32bit.

What was the exact message you saw, including the hex values?

Attach is the screenshot of the contents of the postmaster log that was

sent to me by one of my team members who was testing this.

Is the Perl you were building against for plperl the same Perl that
was being used for the build itself?

Yes.

Do you have the portion of the build log where src/pl/plperl was being
built?

I copied and pasted that portion of the build log into file build.log

(attached) for Windows 32bit and Windows 64bit.

Thanks.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

--
Sandeep Thakkar
EDB

Attachments:

handshare_win32.pngimage/png; name=handshare_win32.pngDownload
�PNG


IHDR�7��iCCPICC ProfileH���T����+)������� �J��`#$B�!T����kAEEEW@\ ����E��**+�b����$�>��y��9�}�����&3��@��%d�
d�s���^���D&��@��#0c�s�!��������s���-�n$r2'����:[ ���
�z�rb~YY@$�9U�bN����':��d*�%L@N����N�y��-��N�n�4r/�)YYs!�S!'�'�?r&O�d�R'X:I!��r����t����)�CVj�0 R<f8o�s���#m���p�J���81�M����s���(��|�!��D���1�f	%��
��F�q�pn�X~4���5�i��������a�\����Wz$?-:N������A�����<��0?�;l�G(�k���6E�)��T�r���Y�Y
��=r����X<7'>d\���+��q���1�\]^�c�E���1����)�g�`N^�x��\�����=JgEH�c���Rm8B�7�L �5����5�<I[�A*��1�xD����Q �	�r&��$�\��_&���9H���I"2�S�Y�:����!���5��;��1��{%�}�D?���6T�	���n�IxJ�!<"� ���`���c+�O�,<�d�=�W �A9��^�76�d=0��B�v��
�C�8W��-�'��f��+M��6�?�'�����r�rvc*�'�{Ox�����9��w����*�0v;�]���f��Nb-�e���'V��J�-R�-����X�[X~�[��1B��
r��s��{�`��������_d.3��������r@�}�~>�0$�m�q��-��bhL�fc�p�)�w�lz���Z��n�H�'���P�<�j@�c8&k`\��A D�0�z�����E`9(%`=�*�����hm�8.�np��k��C�A���:��h#�b�8"n�/�D"	H����Y�� �H��C~E�!��Hr�C���'C��2���SQG�
F��Yh*������Z��F��M�)�z�E_���d1���c��7�%b)�[�ceX5��������
bq"N���9\�x����%������N����_	4����L$�R	�E�2�^�Q����	��D"�hDt�{3��N\H\C�Nl$�{����$I�dFr%��X�\Ri+i?�$�*����,K�&[����d>��\F�G>A�J~F�Q�1�q�	���,�Y'�G�U��L��E�bDq�DS�)�)����}�YYY]Y'���<�e���e����~�*QM����Tu-���N�C}C��i�DZ.m-��v����A�.g!(��[*W)�$wU���������l�|�2���W�d�X
K*�)�RV�+Z)�+f)�Q��xA��I�P�W��T��[���c:F��{����=�3�~e���r�r�r���.�!%[�X��*�*�Uz����d�cb�d|��9�sw��I
��Nz�:Y�C��Z���zC��S�W-Cm�Z��u\�T}��<�*�3����'�LfO.�|h�]
T�T#Rc��n����Z�������5�ZZ�Z��Nh
h����y���Oj��Taz23���N����N��Hg�N�����n�n�n��=���^��&��!}m�P�E���w
d
���3xohdg��������Q�Q�Q��}c���q�q��u���I��v�nS���4�����jfo�3�n�3�0�i
J��[�TsO�<�z�>�E�E�E�����S�n�zn�WK;�L�=�������
�Z�^[�Z��+����l�l������5���V������������b�`/�o�p�wHr��p�Q�1�q��y'����R�6����������r1w�p���|��4��=�����\w���1���v���������y�yp<�z<�4�L�������K�u������b�v�������W�7�������_�_������B��B@p���[�������� ���A��������G!�!���P44(tc��0�0~Xs8�� �(";������+�?���\y.�5'j_��h��u��b�cD1���3c�b��������O�_)A=����HJ�M��8<�w���3�f��9�h��Yf����}|�����I����}I�Y��j�pr`���!�7{�����3�u��r������<OuM��:���V�6���U�^���H��Q�1����E�J�:�W�g�;�j��?�G`&(�f;go��� 9�rZr��Q���X���/�-�2����y��+������t������Y�/d/�X��h������w-A�$/�X���pi�2�e��)�3��^`YPZ�vE���B��e������H�HXtk�����U�U]�mVo]���S|����������?[�\������]���U�'������}Cm�bi~�����617oz�y��e�e;�P��������l���~������^���4����~;g��*����;Jv|���y{����j������y�����s��_����-����_�[Y�Y�PW�Oc��z�^T?����>Z�v52K���������C��:;n8bpd�Q���&�iA�PsZsoKBK���c�.�G����M������u'('
O���?9�.h<�z�q���{��O_����u&����~gO��<w�������]t��|��R�e��G���h�}W��+-�N��=�zN\u�z�������_�v��f����f�������N��Ww����[v�p���������e���^���}>}�E=��������'������=�~V���y���@�3��!x12X�����^�<���_�����_	_��^�F�M�[�����e�y_�A�C�G���>�}z62�3�s��/�_������,�Q�MI�u
�xv��8����%)���(!�O,��I�=5�, �Q�`5�L�o��;��66u����XKsQ�-��at��&�V�GGG���~����=[z�"<���Sw������oX�l���	pHYs%%IR$��iTXtXML:com.adobe.xmp<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.4.0">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about=""
            xmlns:exif="http://ns.adobe.com/exif/1.0/">
         <exif:PixelXDimension>1428</exif:PixelXDimension>
         <exif:PixelYDimension>286</exif:PixelYDimension>
      </rdf:Description>
   </rdf:RDF>
</x:xmpmeta>
�=d�@IDATx�}`���w��N�K���q��b\0���Z��� ���$ I��CBo�l\��q7�E���b��I���foN��dSl�7��������7����[��%�)��a��.{;�}C������L[���2�s�����>�8���[�ae�6��m�vZ�kmL;�[>�nm�1�����������=���������l����>�����������:����s�/��*�c}Yw���6{��V����m{k�n�.������������n��w��Z[����u�#��.G[�mK��s�������]�m_k�n[V7������[����i��6��5�h]�}�6��h������.�h?�M�{L���nm,+�����s�J�q�����k�O�������#�R��vnNO�o��[O���-ou�����d�m[9i���m���=����ms�q��Vo���c�Z��c������5y+m[��u����}�ui�b�q����r��=Z�����imG��v;N��5i�r�.G���(������>)�?+�n�m"g��_��X��n�e������c�w����}+m���u�m�M'���qZ��nk�Gk��:���}Rw�G����)uw��rt�h�����Z�G�;����k��m����m�����(�v�.�his�/�n��num]��_�������>{nmF�_J[�N��o�v<�'G������r"�Z�����#u)V��uZ9w���r���=��Y�zk6�=��be�����]{�:�9�6�L�Mk;�h���nv�h9+#z�uis�����w����"g�m��������]���mO�l�����~�+���G�[���n��s��
w_k�n?�|����l�=oMO��r�2V��c�on[��-{�~����������b#��5��������v.�6m��}���OJ�-�������}n��>����>�c[[��m���nw�Efoc[n[�zV���g[cH��q���~[��v�}+k��2��V��U������.2�6m�[���E.�X�n����nY;���u�������/�V��v������-c�r���.Et�D�;�M��yk����F���{��>�][���v���K���6���rnmI��kllDl\,<��,s� ZE�����l�C��]����(��~B@���	H5�(��"�(��"pH#��q�-X�����:�(��"�(��"�(��"�(��"�(��"p�`�����g��-�|��V���"�(��"�(��"�(��"�(��"��H�r\\<�(�|(����(��"�(��"�(��"�(��"�(��AB�'|�������������e��
�L�����*2�ft��Z�Hd,�I]����f��&��t�mF�R��=��6k�[��G�b������������S��[=�Z�<.��V����������}i���]�K�<"�����M����>6�������L><o��q��
����������%�W�������\\s0�.���A`p�e=�B��l�a�fmQX�y��������r��&3/������/��f{��c��k-
,v����������n����1,v���Y����a��|���X���M�omH�+#�����D�G�Y�n���~��=���5����������ud=b�8�4W95E��:��H�T�6�j���M�6x���������WDG���YSxn�WN��8
���N�c��b���>G�
�e���c���
-l��d;~��i�s����/]����5���S(R��=J������[����"���rn�c�r��se����G��m��-��j��~��<Z������f��F���v�mUO\	���
��9)���-&�}#�R��6�Q�l�#m���}����}�'�S���T�=�5'�����%��>1���{72��hl�v�p��[Y{����bd���~�1��$`j���"cu���W��������[����������a��={�j!#��7s�?���8�������mg:���9��@[_���"��#�J1X��
^Ns3�V���k}uE|������c�5������q�!�V���5�9g.����1�4�g��H_x�c�J{��l]��,fbG��(2��/�gmH���������w�z�5���5`��c�=�s5g���+�vny;�����V����M|��T�-�%�v[����s;�|�U��v}D��xV�G)��=F����4D�"�m���������9Z�����E��-uk����}ae�=��[�v��c�c���Wk2��t��M�n�,s
��m�K���{��G�6�����y��1}M�������E/|������(�F��q!��M�q�-g������+�.��O��y����q�42�����r�H!k�}4�Q�����lc�m�3�Zx�iw*F�����
#���\�#2N�D�{N[-��G�6�6�����3c����c����0���e}u�#m�s;�����h}��7++���0�[�-��������-3����e�%o�}�������5;/96�w"m�'��n�h������I��f�-.��_�=ku�������6"��mH����Ys���q;v�����3�v9�K���c/�oe�p����\�TkX�2X��2�s��a�[�[|q�5�����e�6�����9��j!&&����h���F��B$�s�*J����F)���s��
FS�E@PE@PE@PE@PE@PU���5v�Bh`!��TT`��_2�`�,Y����\�������/��lO9�+������6L>+���T���"�(��"�(��"�(��"�(��"�������!FW�QWW���xz�g�����u���%���������������������k7n}�#��A��u�U���C%�^PE@PE@PE@PE@P6
k?�)���1��g�M�������=��b����{���R�lSg����2�����?�}���;#����<����H���b�qXb"���<���}�U�t�)xtK	�3
���������z�T��"�(��"�(��"�(��"�(��"��I�k?�M������g��X��C����9�\���mw��������,xK��=�:<����*������ll�������O��M������T�^X���]PV\�I{���������g�<L?�f�����erZ�va��*�#�N��G���7c�S'�w��lp�65�k_}}����N������T��t$x�q[6���"7�h!��e��
-����m+Cl������fc;_a�Hkk$N{d��#=�����������Qs���3���(��"�(��"�(��"�|�NAx���z<�����e�y�[k(�l\\bcc{���Y���n���x��7p��g�C��3��bb1���`;v��K/����Gc��1��g�����i"��N|K_#jB�gdq�n����/��{�����t����������OLB�>}8��I:�t����$_��\�m�p�Z�-�0_��g?�kU����M������v������v&#6������[�ikG��AI���~�b��M3<�{�-�9�����
s0:���t8�{����_�!l/*��g/�����+���Q=RE@PE@PE@P�7NA����j��?)))��|�8�X>r������2\{�����2zB��E�O7{�l��5���&-����K��L.**2��~�id�V�@}6������ ���t�5��$�=�c���P�	TU#�c=��Z�Jf3	� _�Wg�Rb}�������
�l���D����~���4m�xt
Db�Q���&��/�d<^x=�-��<���j�-A>�>;���|��E�&
�i�V�:��g,��[�vH�(�$u��3�����!���u�����.�s��E��_�J�p�d�-�����'���]7��!�b?"ce#�0<Dd����?���aKx
����7�����"":���i��d#J_������]�&���&��=���u�~�����p���gtEPE@PE@PE@��!��%���k7�t�M8�����A��v��w"����r��q�^�p��7���GyS�LA���
o"��D�l�����g�}6>��c4�L��9�X��u��UD�?�5��H�<j W��HR�GS!�c���B%�����ALZ2|!�n��p���|9T��$�S���;_i@�G�2R���o^��A���icpZZ�d���vVbP/!�����cX������D����So�)GM����)C�E�,���&�g�Vt:�D��]���KG��8��$2�l����/��X:���"����3����������bjjj�j��9H����e���+1j� L�����xHF�!Y�+�]v���
���8bv=9�=�w�#���]�
�����G��j�>�v��\2>��H��o1�*��d<����=���oC����|��x��d������(�|��?�P�>)�(:������/�8r�M\���Hl�P	|v��L#
N��;f����������p'>~�z\VpF~��g�����3$y�#�P[������lr���8�P7q�Zx��������H�~��>LO�S�XG_�h�����N~#?����'u���`)���S����������
y��i�F��>����a�|��Z�R��x���0c��?z�?�E�'E����~���������K�����mn�}fqq�w�����N=<~c%�s!^��m�L����M��!��D_��+EPE@PE@PE@�_F@�R�U�z�)<�����p�B�5
���Guu5b�1�CHMM��]����/�S�N�?��%�en��!b���x������W\��;��l�gAA��I�>��<��.!��9�X�,�V�T�Hg�1����DL�d1�HB���1�{I ��#�0�~�����_^j
P�����h���oI�r�������>9�r�'��GU������N^hX���`a��n�o���jC�Z��U�P2�<<�����9��`��1�?xe�Rf%V=�	v��V\t�6��Y����&>r
�������f�A��9(Z�k_m��{������S��I1���MFp�jT�s)~����GC*z�?���E�A"v�Q\������G^���m������[�����o�=|[�u�G�tu�.<Wv~���>�`����K^<��?�WO�{=����_����_�%�w�������N��dr=k���a��'zU'\��m�����n2�zB/���F�:o�E���c��
���T,���oE���\!��7�@Ev/��/��g��x��\���	=3���&�*4x6`�;�+���?
A5[�P�z��5W^�Kb�@cQ�y��1����Ef]!�}���gb=})zf'
���Zc�k�/Q���i3����H�����k'c�a}��IrI���52�{�2��&�������+KqD��F����@*���>��DU�*�����WA�I�^3���6�z
������������U�m�����2�\��G,�/�C-��"�(��"�(��"�(��"p��THUIc!\�|$���6:W���?�x���P�Lv#iI���d0�N��E�>�/����Cdeg���/��2�����O6dr�kg�9x�r��j�%�R��o~��p���$���%���X/�1��{�bYe���TR�}J2�+�P�OBY�F7d���v5^m�J������s�/c��Yxd��X��b��AB9^"f�+�t�m7������OL�e��H�h}���7l����'�CB����!>2��D���Db�$�/E���0�������������'��`�j��^�Q��~<��)Gz�L��������h�I���J���'�>������t�A�����1a���pi����[z`�I�aDn{��=d��<�7�z��8��1��M'��l?:#�4�_;����������u��w~}���������]���gN��;	�,����%�\�g��D���i8#[��<�<�q:b�+0-y6n��n��9��c3Q���x}E6�?�tp,���@.Ov����{O�t<&sm����@��8S]V��N�s]������=�I4d������������x�pmb�GoaI�������b��������_�.�
�	8"n'V=|/����G�T�I����#H�f���#%��W����x�o[��%w#�MI�����Z��+q�qF����Q3����H(��������P��D-{�8����F�!����y����1d���=Ne{
�k�����G
_���uEZ_����=fV�Zd'�ZC�X��)��"�(��"�(��"�(�����k8����������t�I�4i�^��w�I�_����{.B��7����r�T�����t������G<��#;v,222���c<�"�f2��u$�b|�]Q�jF+K�^���"H��+i.�$�\���L]F�� FR^�I��������V�4M��yo���W��������F�����HH�F�����LEVU�d�h�B�j��fHi{�:�����,��?�i+`��G�5<'�j��m9n�`��]-��,a��D���8�;uH~�������	�D�c�`����Z������$�)����#q����U���D;���	w?�=Q^:��f
r
�(#�'�M���L�}�5�>����i5YH��@�qo~9���~�-��3~�)���D�&��S�DI�.���OP6�64#zdb
����?��w���\�!�/��%8��K�����8����l��O�������P
1*DQ�����
+�����D�D"��6p�i�Z�x��������|���x��m�Z�`��DH�P�[�7��|A/�K��c�p�|�"2��3���_a�����@�9Y��VbW�pL=�k��/���\�9������:g�8gy��`��p�Bt ��[�D#�C�>�r��R�����N���4y��
��U�.������'������r�!�>F6��z����u�	��lo���ne-�Y�1jj<:�G)��r
�n����4+2�\�"��b�#�c[5�/���K�=������ S�p��2�v)��"�(��"�(��"�(��_��
�ul[��3�����R$2Y��"s��dy!]aa�m��;���\%���#������?�	��|�i����_B���M��{�y_�e:���	�"?���������%����H�G��y���F�E!�hd���������.�C��6�FN�j,������������e�������}���.9��'���O�W.��o�G�?�Dh��� {��8��������O������T���'�0�X����z��x�����?�p�X��0��=��r1P�1�zm���@]N�A��K�h��C1-c	��>+Dr�|� ���N��1�0��C,�x5f�gnb���bO6�}�
��(�R��t��\�%�D�V��C��#qf_���?��/�E-	�@�~H�����������w<F&�,��.T�P��
f��b��(�������
�����}��O��"���"��T�����bAROl{�~<�M��$��9
5������T�'�������&S�q�!�*�QP�dp��u�?H���.��]�sJ���t�>���1�Y<N�oDI�:,.��	�+��Y����/o0;w���=��M'n8>����#����H6��Q���F��y2r�o��,��5;��'���p����Z�j��7
��[2�������y$V��������3��o`!6o��g6>�O���

�T��aC}-_xCl���^�%��w}=����f�9����j���u�=N`��u���@���A�t3I���� �4-i0����s�7
�X�fJ�Nw ��<�G��7	52qb/G�mJ��Q_������k���A��PIG�
��1"�#����������MY�|��F������1|�X1��/�������O;����#0�9��a����%���[f����%�����������-�$����c����i}��iBrFc���8�H��sr��������^]���U�����]P��9�{��jZE@PE@PE@P���%�g���dgg���TH����q�/�F�.]o�&b���]���O2�<����
�l�=�_;����O�����lY���A��cJ3�i:�������(�\� ���7�#��D�J���9��B6�~�3B.'�bK�PDgy�g���O����`�����?����������D�����'�aa���x����H�~:�/��c��Y;���������%���-�o��q�g�/�BVz2A����)��ilB<	o�$2c��A?���%�$9wg����E~ 	�R��{�\u%Y�
��
l���/�����}���*�$�g�c���0g�.�]����dt��0�����%dC�,������?7!+5��3���������s�d�����t�����[g>�\�+<����R
u�`��M�KHd�mq�%a�E`���K/<r"&�r}e�dS��l�8Fr6��J4�d#�"�x/��@p�Zn������G�Y��DxF|����I�z�W���K)+�������P%�����	��6�����v�k���=�&����S7���B�7C�UW��2�3)W��9c�tD|E)�<$1���?e!�h->���6��9��"��AL����:X��-K�7�b�pp�'`n�bGM
�L�����O�`-��7�5�����:|:i*��4�#_nXMr[�LIICjp;V�����<�	�*P���&<	�^#�Q�$�FC���(��
+�\��Y��K�'��\�;k=��x��k)i��H(��C|f'L���������^l��1������Z���b��������,���o��\��WmEQ-_��k5���bx�&���#^�N�,~Vl��|dr*:.	�W�����3������W����yX�=V�+F���q�S������m&�!)�����������wWb����HKWc���q��l�IEb}��~�]�������:�EPE@PE@PE@�oA��@.�D�W�$&$N�8�=�G�pn�y�-�w���M"�w�����Va��a����q�q���/�DQQ��7����;lh����`#_�'i,��kL�� ��z!���B<$	�:�kH�Hj�@�$�+�N����D�C��=��HMG{L��������RJ������{�2����r��������w�)�q-�MB��O��q���1�����Yy~?�V,��(���v'�5b���s��qSz����s����q�9��7�Z\7��
$���7u��& ����HH�E������\���<�+B��5\6��h��	7O���t{d->_V�c��+���Meg�_jw��=\�H��l���c����q�}W����&�4�9�ys��������Rl2�L���#H���{M���w���/D��S0��5�['|_tnkFr�H^���wq��cZ���aNCg�t���t�]��bHN�����t��9�I��������z;�Y�{�/����k	�z��	������K��UIC�D��
�"R��z4�2�Bi&f��SQ���p���6|�3���0���Qm���5��2�� ���q��$a���1����PP��'U��?�������>�n>���������
y
/c���x����L��/&���
X�y������]���'y����]�)/�o�����#p��L�>K���������F���`-%��v>�ZL��'�<�w�wv!�L����f<	���p������Wq�nM������	���GP��B��g>t��������p]{�
;Q|wL��k���d(~(�dj�~^�����_�"!-�q�c���R�a�e�|�����:�T�w�|T0?�O���e���3���H�{�c&~S0�������g�D����uS���R��5�2x�^WC����)��"�(��"�(��"�(�!��9�������}o8����J:2W�#��&is(��a�$�����o����q��g��O>���.))����M��)S��[�n;�����Um��/b�8�/�'Y�� Ii��c��dF[����o��G��II�������$t�������z�mSW29��3e��z���MB2����t5����l%P���S	�����G�1�dr@��!h�t	n=�a��!�L}���cGc�����|&���j�87��[+|.�;������O���r�l��S�|}�
�aU��j���X���Q��nb6T�����y+�#�����pl�P>
G
�#/Y����@��H,;�����{j�)2��mT�	'���$�
�5�x�pDL��`4%`�`�d�S�l}��q����z,�q{N��?Y��(
r�xk��h6�=���;0�''���J<�����!L�����Lk�e�]2��e�G�������k��C���*[�C���*�]����I�F`��p�����6���ej��r��E"�I2{b�C����x���O��XTW�
>�X�k��.]�C�����e�A�1��Co�	8�O�y��Eb���A=�m?��#�lP�$�9wv��3V���7�~Rx;�����c#��9
"����rl��O���[���
D8�`e��at�zT,��/�����&O������DI��q�/����0'�V\q�d�9���fl�d��$���(���I`����i^�������0����A^+����[o��/P�5o��`��a8|�	�2�<XQ�
F4m�i`i�����
a"N;��m3���2>T�E���*em��Ee��V�x��q�U`�07<o9�~�aC����l�gp���o���?��=n�4�2��x4~�8�F�������X�8�1�=i�8�b�#Ls�gb� �#g���sy%�Z�0k^���~D��a������cU������bx�'"0�<�3����"�����G�����z�Lg�E@PE@PE@PE�#`IeI7��GH����_��:�j�/0[��}���@��r
F��#�<R��Rj#���yZ��pAA�z�i���k�L<x�y1_�~�0w�\|��x���u�V�z�*�a����a�3e��i�P&�Y����1�T�\H$r |bR�9�S������'����G�z�[K��}������C�g��xJ����rF(V�!���-��7���+��/b2����� *}g�|5���2,�G��������v:��#��B����_���PM#�R�K�cR���1�Ir?�)���c�VE�
Zu$/k��sQ?���Y��+��!~$�����L&�����L��w�x�sx���q�����
{Hn����(h�cp-
����W�I4����0���r���������s�'����:2������3=+Vb�%���0�W�IT.sOe�����$����4A�d ����^���������iF�P��,y%��C��L�c����'��?��c��������NF�Vgsv�9~(��7J���o��$
������j~�^��1�	���]�K���pV!n�aGd��1�x��'�<��?��m�����������|��5��Ov�����P���%o�����������'��1�_����q�����VL-K�&mt�Z��|��gq3��6���f!5f9���'�y	���A�/)[�@��s�[�k��7�M��SH����������:��@q���#<�����uk�9���������P�u��v'b�Co����������X����w".��dF3/:����^a�f��b$�8�a��0x��������s'csQ������/�w���$�@_�q���E�ArB�y����G�fi��c����A��&��w&�����5hd��c����,��
| ��k')Yq`p?K�>RK����4�%��k�ZgA�a��G���1�8����eI
�,^��kB���w�O�^��� ���y?��(��"�(��"�(��"�(��j��;p��m�(Dyl��;xI��.v��?�����~;��� �23���X���R�e.����W^A=S^�K�
�T�)&j9�A�`����9����/��SOE�N�/r�����f���~os��(f4�|$G��P�'�l�^H"�2l���Q<�s��H��s�PJ�-
�iB���{JI���E����UX����8F�>HHC|F
�������< a�P]�]L�����L�?��0f<������L����z�.�v�]�J$%���b�o�K4
:T����F�Kb:_F��v�������&%�y���cH�l�3���tq$F���F��K���h��]w�?��h���u�{��=�Q����Y�]t,K������g-5Jd%qn2�9��I?�i�|�b���/%���n�����%����c$�3�6m@y��!�������sTvh���l�)�5��1�A�{o#t��H�H��������N0�S+�I�_��c�������"�����~v1�s��v�\���i���q��H��1�Bn{R�/G�y�����b?�D~�f`�F���b��@�[WRv_���Q���|)�MH!�)��1b;.�$uB)�~-	l�,H[7m�k�$�,��G�.��i@"9sO#���/��1��WV�_���;|����CJ�6lb����Ws1������A�����6��������tCS�������l���J>�`Ic���c2{!���8��,,��%{����Q���.�0E$������+�\�Q��$j:��zW��iW����!����z����|��aT`OIry�"�K�_�����K���&�8��5j�S����g�]����1�1%�G�^	������Q�)��_�_��zn���~�IdD������Xv�E�q�$�Uo���P�b)J8L�9�=|H���;�t�=��d^;
�bTWT�&�������(��"�(��"�(��"�(��]^^n��*��u�H�^!���s��3g�������##��_!�b}���-���>�;��c��EF��g#�SSS1n�8�&��?�:w�lH��]��&:8Q��:�
��#!%Y$����7i-|�Lk����������S]x%�*�!���E_�������w�����t�N���N�.�_8s�B�0z
���uF|�����Z|�_������Gp��c�mL�d��i�m)6��pw>%���cldId�W<�_��hl_���o��x�`���<�s��X��J,��L�#�.o����`F�y��F�]�3#����}���2�m��\�]��|�
���v�������y���
���y��������QL�d(��c���!�r.)���
$
��Hx�;�|Z����d�L���,�]�o����6�D�33�*�p'v��!�yPzX{��-��b����q��*2��B7�1e�v>f�Hn2-�L'����x��9��rb2-��\�o�M>EZ�������������)=�#����b�f	�L�]�+��I���C�JJ��:$�i�0��?���x�xHz��o���~���9��;��}kI4���8��q�|������������"}\�������8��+��t��/��?�a%]�I�����	���p�������{~O?�f��^������q����g���i��������~����?U�~��+�s_���I�d|�e�������g'��7Y�������=�'���5��E�L���H��i��o:�$#7�;N��J���������C:�\����LO��.���4U$��c�����c�X/#G�D�����zF��v����O�k>+z������N4;zc��g�N�������C�#>���>6���\��H�H�@o����6���>y)$�����uH^�<~9;\&��(��ll�5KS��l�fc��"�(��"�(��"�(��"��_�@���L�mVV�!S�P��D!���A��TW3��E��E�����/e��5&*���D_����"������t�1�?��>�l�kYd�����%A����|��#I���*�&Av1�s�l"OHL�%9���
�U[]�l/�BUm*��11Bc����C�lR���Uw����!�v=+W��?��ws:b<	�����������?_��i$�>BM�HL~�	�����e�����!�!�S^��{;���lt�O.���G��_��f���:
�u��������A�n���j@��!&��1�I�[�a*���|-�������2��7��
tx�Y\u�[�:=u��H����qU����/�{i}R�(���h|�M\pR���)���K��0��jtA��]�x=����i�j�����#k1���4$�,��h�\��	�x{�yu4VtE�${�����P��T\?y<z��B�mp����U�������`	��B3��!���D>�#���koZ�b�A��n#GMh��t��E�g�L��i���'������=.
T��F����xmh7L����=�����]�����a�Z,Y����~��?���t��>�#�����C�	�?"�o;��>����uuM���n�~��_��|�K\���A�:�;.�x"�N�
?��N�l����L�,D
�Wo��	����L�M�b��[�p��������j�4�.���4� ���5������J��|���zV`���x���P�-
��f�;a2n)<����Y�,��9}�����7[UV��uX��"���'0�Fc��X�$�pn���\��`�Y<�y�5�������o,��)6{2,�����Z\~�O����������� t�����?}�w�����X��;��Isq���8�W�Gr��`��?���`Y�h���7�s<��������|��,$\��{Mj���~0n��{<.����p���p���R���=��������a���L��>~o]|
~�j"��)��������G!��	
G��j�q����[p�;|	_��$�W���nt+��n���><g=(��"�(��"�(��"�(��~C������Kq���6�L�Dd%�r�v�L�D-[�h�C���?l�0�_�999&Y�wGi��%B�����
�.}���d����nYZRn�%�]����|A�D-�\K�X�u��.���UdB%���c��#��1�������Ja.�pJ�XvOFD�L�l�������:t��d����� ��T�:i&���A�+��|�i�����.L�����>�8GM�a���a���MXZG��+���CL>z I�x�`N��$@3�71��<��;zzV?tO���$����S���[��������@]�;z
<���	|y �	x=)�xLArR*��������|!�')���S�m������H�E���1l�p����LF��������y��j�)z� �OBO���s~�^�2�7����b`����9L'�rS�r���'����r�8��t��P�3e�7���i��	�L��RF��#��(�6�/9��c�l�3M�Q�x���P�9��������z��5�?BY�0�����������P�-�%7/S�x�8!3�J�*�;;}N�|&u�!'�7��T���>�K�*�H��is
�7c�`���3T�a$%��x������h�Mr��/9�<gL�I�H�����Z#�����\S�d&��8v&���>yf���k�1#�V1��
���B�N��a-?%p�E'�d�W�H�z>�H��#~<��b4{����wZ��_�~���.�+z������vJ�e]%b��5;�����{�+It�MC�_V���P���<�>�k��B)��L��z������=�L����12�9�e����k��\�0;(@IDAT\������{�S6��q�}q}3��H�8��0M�>�^������,F�3*=����g����/S�bT�t�`��E��.�h`b�w��L��g*�d>����9�y�c�r_B.���b��*lY��^�B�K':���+�2
�L>
G��0�5����/�I^q��������!���z&�0�2i�5}�C9=NR��G��#1q�8�2�A�y�/?pp���~-�UXPE@PE@PE@��! ���
�d��m�#��"#�1D�`��rEd2��,���	�JV�pA��-��OZ�r�``a��,�U��n�N�@�'qGb��&��3��Id6H4�po�')6��ahb~>ZrT0���x��[���2���� a�A2�?���R7t���q#�9�AF(/��$��CtJ$t�"������EX<���1�PBL������/���M(��Op�I��_�G,��'��.k�����Q�H�W����hR+����
�����u8qL/��aq�"v�&
S3�U�-G�i�WC2��*��BX���6�n�}.���a?�aDs�,%7�WQF`�V$*�C�n5����b��gD�E����,H���hQ�d��^"�;�w��5��Q6D6�$v�,��N~&���I��5��L,/a������+W�<2��9���w\�*7������u���{���l�|�Y<�X.:��w�5������8���6o�1L_������-��o���E@PE@PE@PE`�! \�|�J��_E�P�����s����I�!D�oHf
�3���%�X�������JX���Kc(���U�j����g�����dm!�H2jU^���;�jj1*�5�d6Eb�!�e5�L�M�?�%C�	�d�����<
�,u�=,4�����:BdY��Hy�?n�'�_�#/����f����B��c1��y�+lW������	�(������H��@uP�3�=6sc���!�/�M����d��r��f�Z��rN2�����:���T��,J���F��[�Qi�+��3���.g|�F��?�m����l}���F�y���O����Ek�LQ���-D0�	�:�	�����'!^�|�1J�R8	�<~
���E����Q���Sc?�o�_���4/+Lq�;���M�=C2Y��L����F��`�_l���uc�����|;��7���Ael��>�����Ks����\�R��������;�<�=�>�wsc=!�(��>R]��T��@�#fl�f��!��*lK�K�����������L�}� r���E@PE@PE@PE@8p8���������������I��|���x+vm�v�M0D�����0������u�0t�x�i�("D�v7�oLB��bG�E!w���6�����s*P�5��J;�����U`w�&����_,*
���n��+�cF�Ag�,��mk�}d����_�+�RZ�������0%@�����1Z$��1���}�s|��1[��L�qZ8��eo}-�[�Da�XsI���9[�\{����x[-k�l�O��7G��:���/�cj
��S������C0R�
��6���������v8����96S�����n����
�NT�~:u��i���2���E�K�Mg>�5
?�p�s��a@1����)����6�XL���R�yq��f=-��k��"�(��"�(��"�(��"�(�7$5�+$���*P�c�J�I�H����+61�-`dr�����x�'
M|�C�8tS:2:����x>�t5�q�:���4�r
*wm�����O����
$&uF�E�a���10>	d����o5�^�������.CM��m���V���  ���k���0rr�}*Kt�A������+���sICz��1�b���}�i�Y���/>:sE@PE@PE@PE@P,�E�0�����C�xc����L�!;���������/y��,��)��DH;E@PE@PE@PE@P����P>�<�����f�@�6�8���<G��RPE@PE@PE@PE@��#�j�����r��.�������jDPE@PE@PE@PE@P�C��B(G^�u(#A����C{u_PE@PE@PE@PE@P���B��?M�PPE@PE@PE@PE@PE��"����EP�E@PE@PE@PE@PE@�� ����d�u���"�(��"�(��"�(��"�(��"�|[�P����"�(��"�(��"�(��"�(��"�(��P��,�NSPE@PE@PE@PE@P�o����A�WE@PE@PE@PE@PE�{����y6��P�96���+ltcc#�����u9��{�����[|hY<�G>-{8����y.3u�C����{���������>f����YsY3g��;��m`w�}������������l~UWPE@PE@PE@PE�����$]+��a���Gs��g�2	-R���u���o�A�u��Z=���z�k?������u?:��L9�4
/`�g�d��w�`�Jc�����n}�m�w����A��OS��{�s���&KZSE@PE@PE@PE@P��@(���E+����DC�|>s��T"�C�I�"��q�������v�v,)NC����U���|,������a�1���7��/g���1Ld�.T�����
P�:�64��1��J���n];`T�����eX��6`�t�M*G��%xcv1<�'�[�v�H/"l��h��}U��� 	�-X��6lZ_�:_�<5����&{�JGNZ�w�Tv��x-H�#K&W�(��/>���#1�W:e
G���@�R����u�Bfl^������O��Lp��W]��#�L!����zEq�&c`*�+>���]��@>���`����)}�2'�m��a+�|Y��11�6�c��"v��uE@PE@PE@PE@P��Z!�mlB�yx�����`:p�	8=������#gXW���;V���+z��!1*k+vo�.?��[���P��,d)�e���So��}�!�W&�O������189�!�]�p�]�^����G7 fn9n�\�{��'�#���8:O�
�)�CCL<|�IH!�0�
'&^��g%>�/��
3�c����$7���3k�����)�L����H�)5b�@yIHJ��.��)a�8�{v�yN��.���|2���@��P��4�:�,�Y	2�6��?��}'##����f��4�3�M�_�4������z2nOB9|�K|��O�/���Y��l/��vln��O���w������6����q�kUPE@PE@PE@PE@�J�J(;��9Y����x���3��m�.�G�M(eB�\���&26��I>[I�`D�	�*��=��G�N,bb���0���qf�t����H���i>��xc��9}0q� �:����3�b	}��]r=�����?�f5 �'Y����������'z��"�"H�!��~{�M���K�T��ss�v��������N6�L[��-���&Xp}W�����Q�{&nl	�l�������Zd������5�2'zF�8/?
x�qu\#�_�������)g	O �����q�����73@(�6�����;�qc�)O�����G\|��A6������7���m�Y����rNi3�#�
HEn�&e�Z������5_�H�VE@PE@PE@PE@P{!�E�)#��#"�Z2Q$���r�K!�"��!���b��"�>��"M��
ZL,����m�6G�O��P�6>��5���|����+���!l�bZ����E!\������$&&"�$u��	���S��
u��u����'�59?��%=��(����@
��v���jJI�s��eK0��"�R8��5�k+��mA?�!�}0!	���e�p�!��M�q5���ec��s0��>�@;���$��Wb������H���f��E�3����'2A�q�0�5���t2��\����h{����C����a]����1/������#����$(�m�49���Z|f�{��'��^�5��n)��.2-l9���(��"�(��"�(��"�(��"���C��
I-!��l��L��q
iYO	v�2�2I��=�+Y�c!l�ED�S]���U(��'��E����������`�K���,M��	)�
lgj�=����->�2�cga=)�
4���x��b��rx�2���#�u5���b�����Ew,���a�����'Q�?�E�$8�wIr-�!��
d{C-PS�
��Q��"��Ofde$"/��{JQ��;���K�x��sL@Z�$T�.�7!�D���I�S7)q��z
J�j�=�E���<�[s2��1�$����eE�4����&c���==�S�	+�X�]HBp�"���E��$�$FN$���7�rS�<G�.�,<y��>_���������k���*�Wc��rx;�BFj<�~�_�����K���y�d�o�vHmG�.EY|7����[����8)�����}�>��d�y�u��������dC�Z�����kqwrI�m��!��KN��Cz�+P�CL����{�ug��S}��2����h�\������� .%X����NF]U��0H����?i��M�7�O�E@PE@PE@PE@P��8�e���d:�F�����X����Q� ��X���8����m��-��4'�0�<��2��ox��1t�P<����Wm�B#&D��.��l����z�k����#�������1d�0~a��3p��$�P����)0v���u�n�@�����v�z-���o�{��8�����$d����Y	0a���b�o��n3L
�^wn�� J<��q?���7�"�+����������a�����`����]����/�������C�;�oy���������Cc��!����bYU�/����G�5�����n\�@�\,��.<��x�{�����l�m�w�J���r��
���8������a4F�E����v	�d/���������!
[���E\=t�^V�/�)��������'c�����F�of.���^}�P���j�s
OLY�
K������u���ccP��������������3����E"����]F$���_�����l7������w�QT[����i��&��`y���b}�S��v��.bA)RD��K�		��6��w��n6�����\���������s��g�����QQ���q�����xv�cdJ7JhUo����/qQ���h�����
�h��=�z�Y����=�������������������@�
e'-_��[b�
=pC��h���Mf���Xf�����D4�Xj�*�Q����bMCA�|<�s
���<�t�p�������������&O����r�~d�m�f�z�B�b����Q���a��o�����u�8�WB'�Zb������������!	,_�s �'_�O�����$����������"�NS��Z0�����b���i��T�w�b4��4�p�nd�����|��7f����K���0����l�|�i���F?�6t�����Fl�3���Wp�������Y����-����������-H�~	/�#�4'^���}���b>)�b�a��0��N��wn��-�p��/�����x�zWp���waF��������ff����zP�������FG�vj��Qd�,P��n?���	��Og����h2��b$Xm��P�o��w���u]�����C�`X�:�5e��o3���k���
�[E�L���~����1u�a8e������%�|"��Z�Y_����-���}esti���$4JJBRR����u���*�<i�P���6����~������cTEK�6��MO����)B����Y���Kp:�c��^��Gd�[����4�i��������4�F��#���~������������������ P�e�Sp��@�#����:aXP1-gK`NV=r9M)��T]Q�T������-�9'�<��s�#t�L���A�o����=M�3 ��a��\��H|�\��.�v�h�J��lM����bpE �jB@��Hp��~_�gR�-CI��J8m~�Y��p�t#�o��<k:Er�,-Ap������1�x�hgj	@9�Dg��t>/�Q����:E��MoE�����}Xt�)������0����H2L�"�s�q�("G?���AK*��S`+��6�|��"b��#�&��/@���(?x;�e�����4�m��mt������^��.(��h�����~��L6�BRu����.B��4l����������6�PK<<��`�O(��B�����u6&����A����;,=x�5���uC&��fp;��S��#�������K������i��]1�i %��'��]B'�>8���.7"�����$�nYLf���	_\�"�,���
��T�������l(B�0'��O��=A���(UF�T(K�����x�S1?�?��y�$[(M�B�����!Pw����g�x.��IG@G@G@G@G@G@G@G@G@G@G@G@G@G@G@G��:���������F��m�G���	�������������[i��������e�4������f�C���q(�(m�������Y*R�zD�������0��.�P�lI��hE��7Kh�u��?J?���h�)%4�E���b��u�Zp��3��g7�B�A�z#�_7U�W��Gyf1U�)HI��g)��<X�����X���w���-%-Sa��v���r�<+��@B�h�J���$�����4��W�������@xV���Dt	�g%��8��^����'=���0��2}t��\.�.w#�W�p6t�.�q:����U�aM]N����l?���&ZU����4Q���6+���h�ll+^��\'��Z������g����|i���>�jG~�@�����!;�;�Q�Es;���!�������(�0K:�kB��������
��I�s`)oeTCy����7�S���=��$�  >�mqOl9��I�pU�P6\"��ODGXa����'��~;V����f�]�ZG@G@G@G@G@G@G@G@G@G@G@G@G@G@G@G��J�����6�J���B��w��J�F�G'C(E���k
A4Y�@:�����!�hYC��{K�e(+�Ga�������`���T�����
PQ���Xs�)������o)���Q4-��;W�cTV�UJ{&?h^^R�R���#����Q+�$�fj�����sQnk�P�K�C|-�zW��U�|^���j��Jai�\V\�?B�
�cY)�y6��\�C�T
]b�i�-
i���1�2��9_|{��I�X�����N�(($��)�#E���� ��B|�a���l�$,_f��-���k4��0W����;S�����U���9m����hr�.0�'���i�%;�����u���}��W�<})��C�5F�jz}��A�R��H�A��
(, a*��5V����0�#zR����|f���p�[���A������`����9B"W�Gi1i����]��=��)�a:E�"�~�#�#�#�#�#�#�#�#�#�#�#�#�#�#�#�#�#�A��0*!��J�j��<���k�0��**�D�)V��rU�|E����0?��� �b��t<x�UU��A���.�D_���??����<���`����G��}89�|�T�J9$Y�(�M*����[}�C+^�GS�J����4	�����v�+�E����
������
F�c�y���n#���qE�q������p&e1������rJR]��Z����B����(?bDAt=M�UH�N�^��A�+y3��(D>���kv�����g+(��h���K���3�8�#"��1�p�@jM�MT����;!
�����a�6��YcJ�	��qL$�'��Of����Ft��z,����5��|�	;��&��2�T<�i�~�QT�Rg�z���YH�r�Z�1��<oO=�����yE�p(�~����7�t�c����B�|��H�x�:d�>����0�/oi~_�v���tttttttttttttttt��8��2-$�Fq���)�Dy1
sh�J�"��`-�Z�~����B�Wh7�8��_�K����7E�^����C��A|��� ��e�����Mk��0�nh�)n*|� ��������0n^�������{�.��:��"/��V�>�5h���:��"��w�:*o�*���$�@���*�~��+����(*���O���nO�
����
��������������q??�9Q{a0��&�����xw)J�hH��9�QD�	n��RZ
���z��%G�R���J��j��M�p;?��
���H[���/`];�f��J��%u5�;�#����4
��]��g'�JT���V���'��W��aU��z�2���������ib�7�{��6��)@�KCQ&4����)��CB~xp��;�3?"��7����������r�B���O'�i;�Z[�ToZnbI-2YB�+�&j�m�p�-���(�
���#�a�C�9�[�������qI�'!J�w7����c�r�|`2V�.C\�����[�������������������������������������7u(�E�d��>�5��F��[("��L��X&���B"��v~����p�-� ����u���������0nt���!��>��m��;��6�u��L��#���[�]���S2O��N�����n4�
��i��,|������pZ��)}h{�j���=���M������/��mSQ(��5�������6�(�^��_bo����/g'b��>��^�����������;���8x�������T�h�\W}&D���~�����M@���
��
���x)k>�������q��'�d~0�!��G���@�a1�E�})8��0<��V�����rw*������'�wc���q\`\�����`QU�X������0Z����(����(1������gM�{�����B|����10�A�.Q�k�!b�����+�u�X���:wq��h!n	Dd�04`*��b1�����4�w����(gt��"Xm���U���U7���Q��`������f���gen���;��?+q�/Z���_�[b���nO�nZ�YG@G@G@G@G@G@G@G@G@G@G@G@G@G@G@G@G�������x ����4s��0��.��;���hI[J?�v*<m>�Q����J��W��f�(����.���LbM�t������YEx����ej�d>��?������N}����>pM��t�5����-&ZmR�V\H:Ltoa5:a/��Y�A�&�j����V��}A��������l�������6�N;�����L=<����
~�i �v�C.�i�A��,����*.d}�
��V�j��������:3+sh���"�Y�
>�t��Oe:�l��AV��n@������������uv������������*��i�-���cZ�=k�B`����)?q+!&R�"�J�]ui��a�����j�t�[���.������5<�y��3�%�eb����
���A�����L
obiM�X&�:��������|PF'�N��,�pp�|<��9�W��?���-���^�+��"Yz������������������F��o����:,�Eij�����*]�TM�v�b���I����g�JT�G�
Y�J�����YSR��[|u���~�������J�Jt�h���sW
O+���T,���3}F�^��D��]��G5�YM���2���i�i���dW����??�T����Fj����M�:*�)4��G��T<�g��{T������E�j#,��������&��%3��py(�WN<+|6�d��Y{�uttttttttttttttttN�@�5IK�W��������f���yW=gd���^�*`��T�D9����%�4�N�g�r�@��OE�@���1�9�]�Y�VM�W�YQo�\��W:���u&���!.AS��x�:xh���r����;_/��c���!�n�����yEs]
�R����[��B�vM��:�����[�y����9V�M��8H4�:$���H�)�HF���1?}e�R_>>)�uR��AG@G@G@G@G@G@G@G@G@G@G@G@G@G@G@G@G�*�P(k
���*~��{t���R�+���S���w��O^g��)G��_�T�j{^����3j5������s��;����x^]9ZS����\�S���q�����0�agM|�t��79M�L%ry!2��^��<��*R��+w?QG�A��=�R�������{��9��}8��x����H����)]�8X/*���uY�x���]G@G�8��x�������$fl�`�����N�t�O�?X��N�? ��S����C��4���I�����3�a�A��~�	E:::::::::::::::::�@���f(-�W���#�#�7@@|K��F��.��$
���#�#�#�#�#�#�#�#�#�#�#�#�#�#�#�#�#pJD�l�Za.**:ed=�����_j����^)�i2�3��C�_��ztttttttttttttttt~��������N'���_�{\/���������������������������������s��������P^��M?�:��5n?4Y����W�+���7���~��8��i{<�t��,�����Gb���o]�7�7m�ZG@G�� p���L���R��������y�����\��?����%:���x8�E:'��8+����X&&�7����tttttttttttttttttttt�:��yJ�|�J�24�5�:!����_~��O��'XsKM�~TF
����������������|R�����2�Q�*�����8��x���J�����!�`}�����.:I�*�i{<�tU��K��3c�����MI!���C�n[:<jc�/����V��q��rM���J��t5)e$v��]�z�a��dk����}�����>�����s��T�+��+�F���A����)tq���������E6*'��//^\��,���:����w���&<���
#�e�J�ZJ/U[��y��>jm��y�T6���u]/�4��3�<�����^eRO��Y)e�t������z��_���1�����KP��#/)�����J�k��&^��3(E����eE>����h�+��.����M�����v>e���Y��U�Ju~�28sB��&3gN�/����X���i�z��;G9�v��k�Le��uY�x�
<��{��gZ����W�I��������p�)�������L����;]������Q��Zd��v��u���~��IBe�k�_E�8Tm���T����&���S����J���[2a&�B�tj�����N��e�nx��R�����z�"��u]x��U����w$o^����;B��k�	O������z��D���.X/�c���A��I����sw���H���s�7����:N�J��
���������]����m�>��c��_l�S�PZn�����6Me2�_�SN��|08��,^&��;���B�[M�d�)>��h�8��E�Y"������=o��-�D�o[�z�ut�������\tgg�-jd������D�B�� ���E]����lT�Yp:E�P
���\�q�h6�$
�������LS���0Z���������:������'�i_j`1�G�Y���m�_b(������fQ��g�Z�W��~U\�����355�t����X���Bh%Re6R�%y��
����\���S�����/|�>���I<����A����I��8.�����Z'�0y�\9�i�"?��\dJ�c����p
� �%h�A�#qT��$&X�������H,(U�p*����6$�4��h�w�lP�%o)Z5���O
m����52�v�)����%u�@�E.���T�Z�Z2:U�|�/SaF��$?�U"��^Dn�vUo�|J��KU"���W�_����|��S4����}w'��>�T�VN��<Z��d�"�|�t��N��N������r����-u-r��E���j]��H���}���`\��`!�W��^k�n������-�S�����F��e"��k<6z2���\�]/v'/&U�y�����aW����6i!�$PSqTJ�����oWf��b�25>h�Y�"3��xrP�)�'r��S��v�O{t�K��
p�=FR�Z1���^�6H;�+�)��������f�_%kz8���O�H]��\����-�"��2�|R�X�w����������l����a��}��2�Q�./��s�vp�!�8�le���V�$2���������^��+��d��2�Z�4�I��r����G.�+�D���D[Gqm[��3u��Q�9�z���w�<_8U�K[Q?8��:C���U�=�Ski_�g���E���~[d�Z����YS�8W�f�Z�n�0+��K{v�LvH�c�k��R
����	
c����������T"kEf\]?"�g���M�.��W����g�L�e����'�V��Vw��������/J�A�T��2h`��5�U�tDX��S�Fu��/�:B�P�@5���!ra/S��,�O�f%
q������7��2�~FZ�kf�!pJ><(}�j�����YtRZ#����>Dv����lU|��D�E�<r-kf��[����~�#�{pu�"�$e(��������
V*l6B�%�����)�Ut�t:
t���s�
����c����}���Y�it�P"����H��1���1&p�yof0J���Q���O0��+`e�
�����/�B����?����.`bi��
�B��Io��K��Z"�k�����F:,^�?;x�q-�M{������+^��z����#F��*4�"���si���KN��m��{2���q��H�9g�@�+��R.fp���qw�0
��DXm�p��1����H�P�\��]lc	�����n�pC�=xy����.�Z\���P^����������u����2��BU�3	J�d�C����0�n�;�����'��(�S�S~�a��q���f�8�n���W���Y)�O���	��W��/��;��?]�|j��Bb�M��7��� Z��Q�@�����H
����,c2�}}����0/��1���Kw�p�?1�g�`>�8q������!�UW;����\�,���2F����W��c+1�O���n��b��s����8��H��o����"pA��� ��{�c�'�����,J�@�X9�Q�ht.�� ��[r�����[��?��0���~�o|���x�=���#0��^h��P�������b�n���� mf���8Y��n�{�|����0����(�������f�%�.���?���k��W��5�v��Q�����2�����U]�hl�/���9*o{��!�fc(@����|�0�����f��r��|5�8������X�[#�o��W&�q�[,��h��� \t�GX�/���b�k7���|�"��0�*^�.Y>������/� ���X�_�I-e�BE�8)�(��=�c�k}EB�DD���+�v`����.h�0�����w��(>���g�
o���8�4���_�|���.�+/+C��G��=����,�2T�b�*F��U���4r���S&����pq_�
/��/�7w��r����w~��9�]����`��7E��0���p����7��#������+��b3��(U���N%,�A���r�z�{k�]�1~���c��9�������K��Q+�c`i�����F������_��al��g=��J?�1������3�F�����y�������#H?�������?�@%���Hd�w���o��2�a���q����Ihd����0}�a���l�R�P�:���O1�
�' V��-��3�,�a�OJd�S|��T�of��1:�6<��"�g�R�J(��n����`5�
��
�Z�k������6\��l�������+�B�G��'N, v��������vob�����sY�)�
\�a����j+��~/Vks�|}"�?a@�,J�*��l�=p��svo���m��T�b;��awN���Rp������2��x�Wx������v��/�5����3��HE�6���q���gYU�]�C����&=1���� -�%�����a���������b`kY[Z3�X_�����*v�������y�I]DR�$[�����^�'���}���f�@*~��k��b��Ke'3q��K���������5�Z3_�0,oB�Im�.���(A	�tS)G��p���h�������N���0�#��>��:�%oa�:���!�w$[���e����y��j6��Z��pG��@�������.IZU��/�|���xL���]qF]���k�EY`}�7�M�g���������p��-��4�J;���}�2�eL���O���V<�2��y#Ov�I�i���3��x�����I����!<�p$RL�H���)�L�=����IH����s�zd���-Pd9���(8|����C�N&@��:aI�1�"ZM��!��
�fc��s����v5�B�:�T�PdP,�����?a�������z�+�:�a�WK�����*>�t�����Xq:�.��9a;k��������e8:�}<7y �_�
!
���J ~�A��2����/�w�_�����U��d���C&��i����!�B�Z!����������G�S"�R�?�K���e����kF�K����ug�=%�U~~��|h��8�U���d�`L|�,*��MV���4��^���n�+>o��7��p����e�
�$J���V���W��8����E���*����yli��A�'�n��y?c���0���ps3w�a����l���ij�n���W�!q��N���Bl�����F�/�n�5�E��p��O���1i���1�Y,�8rx;��{L�}Z��2y�vu���(A]���	�,�f��:{&�q�A�<���/��QZ��;�b�ZDk��l������.\�3��T����F�	j?�kW���R��v����;��5����[K�MN�cEA�](���#��
����{>
-��>�
C�b��p��NJ�;rP|4
��m���7q���A�c9�zu&�u�%��Z���EtgN�L������3�������_��w�!1&�r%w�#]r�����:���pZ��<�����J!�:�:\���}��N�k�mE���K&b����5���tS1��-��%��E�D��X,�/F~~��>	��7�y}��[�\7�rf9�����o���y��[��+D;���P��(��~kf|�����/vA�[K�/�F�[_�5��]�_+����J���,>�N2����5��xR�+%�e�(?�G�o������UH����4N>����K/�����q�S������<��)�"�{#4�����q�o���6��)�7��[���.�5���(�8N��?u������]�f�X%�?��LB�����Pl�)R�#
���J��l]����"=�F8-�|�}�i���N, ��BpQ��"#��)�<�B��	X?���FJ��9��f@fp"����3>�p��j������wI6�p��Y0>������Bo��U��p$4B�������2������e�]%���l@IDATo��8��.��!��,gWV�+�=c���7�F�3��S'r�Q-�)��q!&]���?`�����c_t%C�]�_�lW�K�@���X���R��@>;s�[���i[��'-��(kN���E�%v*��7/����tl���Q�3����z�'�7c��w1!�_��{?<�x�_�1�����g���A\GY�f�!s�O����8�������Hq��o3Va��_0>%�v��O�/7��.H[�]�w���{P���?nA��Bh*,��tZ�`���n�n��f��T������8�O��{��E|����{�_p�-��=]������"�l���m��p������{����~�\0���������]��&��`�W��s>��-�LAc������5Bp�~l�b������
�~s���F��]�z�D|5�)n���v\�iR��q9V/���n��o�	G�~(��A�W�1e�"���F����+>�NT��M���0X�9��`���8: 3�oE;Z�j[L��J�f�!�X��f����0��h��(���p�jv�����X����1]��6�T�p���.;
�S�5�y��<�����X��(�t�l��Z��Ht���u���n����\kf.���(A���|T��c_�j,��o6��?��B,(s����F\���=�JN�G���X9�|�l"����-���������_0��-����2�f\�?��xwQ.c�`7.�������:���6�9�-���]���l\�]���y�����^n���BPRZN����M!V�:<%�z��*����.EvO���>�����4��7����B 
��������*��=�T)�������������tm��c������)\vy�^~)��P6Q1��?)%�G{aV���4"k�z����y5��	������wR�]�>9��>�����T���O(�=�5�_�����\��:�!����p�c�p�������>��:��w��<t���^s�8r�}�{����Pn$`���g�ep���IXr�������o����,�{��c�����?z6��c�����7���_@�~aH�����(�h&�
�
T(��M+��>��Fh1^zX�,~���|�q{��h��A�pg��k0"L��UX7�<>:
��}��U])��G�O��$���>�hv-���^����DCt�Z����{���i|�m���B��q�����b�o3}�	�9D�T��s-���K��a\�.���'�h���5��P�X;V�'$RF��)�9�F\�q��G154�
��/>Et�~��,�T���w-�o����a
�RI�������G/t�D��1���2aX�o����-Ax�{kt{�����D�7����uG��~]8����EH|�<p�S��-�Pv���pt����@_F�W��P<��1<��A,�J��*Aq��P�\�f�j�;������;"C����X���j~��g�GZM�9�� �������ZZ"��I���&��?p����mX*�I�s�LL���f��^������Kn��ft��
�IR�<*'���d���q-vM��c������KU!���r�sC��3�c�a�ua�����:z~ON�]c��)!�
e�-��[��Y.��>]���5]PQm�-�����]U��a���0����p�V�����^���g���~����@,�������:
����7Cw�/Nf 79��
�1�������t����W�sr"�.���F"�������+n�{�|�
#J��M���p��c���J�,)��wE�q����u���o�9����U����MW�S���OhjXx�r]5Y�%n�x����GM�	���s�{^�=m�;�<������MZEc{+^1����Sw?�MT(0����V������l��J^��$/�q������Z�U�L���!)k�����x�s��W�v��-Rc|�(u_���9M��Y�r��K�D$2A�����^U����<�����s���O�D��[�2������,G�4LR_,T<���]���XU�������<JQ<��U�D.X�J�����w���B���mB���1����b�=�C�r�[\�����z�#s�:���r������W�,r���K�z���Cc��^�$� ��W�"���}^�&�Q�P
3yZ7w����}G�3������	e��"���z�?1io�BY��\v�
Tw/2u_rc���l�45�i�����e��E��O\�Eer������;�V���Qy���8n�5����W~��T�T�A����<��*���R�F�����p��;�]�\�s��3u.{����m��B9�r!6V�-R-.J��8�����m�&2;�@��g���1,�52��Z�Vi�a��~8&tz��k�F�m�**�~z7����T(����O�r�/�$���-�;<
>����t
l���-���w�]�N����DB��q]b8��S�5��~K�������Xq��{�����|�K��W
��\�������"0�����������O��c������"k���������`�������Q�U���i��6]vL�_�7A����^]96�Q�%a����jV ��������y��h8��0���_�Q��!���4�	��T(7�myTVd�����h��xw�tH
@������e����P�Oy����;|��\1�B�#/�Ub���#w����-�:�X���dEU�g�H\�;���,,�
e�ryts�kYe���?x:P��$��&+���$e��R������9�Rj�ba�(^�e3���'��������w��\��c�M���0.�*�f��;�G����L�F/\�����{��T(;��H(��5F����1Z�
��W?�����A�d��Bht2�����Is!�]�#�z�����������ET?���1����o�[������n|A���_L����w-����C�]0��J`�<�+/C�xF�/X��)��]��C�LfgT��X�o.��R��}x9-�e�s�?o~�_$=����������1,�G��
�@-�D���������X�����9�����a@��q{h�HU>����(���/h����|
 �AMg7��{�(Y�,���c
�XM;���M��"L�"mG��E5�]���vZP�X���~��Ri
����� R�x/�=I4�?��4D���������n��$\J%�������A�����V���bS�)�����%�n.T����F^����6���}C,��Z7��BT��F�I=�^��ID�w��;!���.Z����/'82�������S�V=0���I�b��4���8����0�+�ajF�����0����xxD��vYC��}���a���]u���Q���P�uO{Z��:g���N������7�� �]�gG6�YXht����X���z���~�-.ND2'`AT��s$G��2W��>��l����{��P�8�g�~h��?n�q ����j��-e��/�5'C)_�W�!����~
��0�fZ�?4/��([7�%��Ua��OE�TI�(*��P��Fk�R$_v�<dE��R�Z�H��i��d!�0�g!���e�^z��x��8�:�-�%WQ�J���y�~	}@��-�B��z
)cMr�"�p�\F��OU���Y���v�f�(b]7���B�~�u�1��%�>�
��{b�O��q���8
�/|�0��;���V�����>��EXwt;�4�����)��#P����;`��%�����1��R�Lf�U�~+1Y�-z{^�*�u����w[��	��@,P�n;�I��#c"�L�=�#��f��zX��k;^<]i���+p�|�`��p,�������x��
�%�O�;��28
���w4��55j%���t�-5�[u���Y���������}3'�e�!�����K�<}��o�{7-�#���zn�� ���J�B�������I}P�*�T�������8���r�J'���*�S���[>q�^'�U�wWC�������)�ua��^)�)Oy��g��]T=y�$��RP���S{�^���|�+s�0�J0��D�����-.m(�Y��<s��biIj�BHQ.��4��o	��tT����&r*���� �*�S1�����"�*"W�����W9�bz�����,�#���C{���4���2O�5��(����{��+xS�2OJK���>>����/	��9,�g�F�7�]pp��F�.,<�Sy+2�\<y����"��WM=Q�~��n����I��%�
���;�t���t��'�l��o�D]��������R�r���[>��iH"������u����U*/��Gg~��)��W�K
���[~��3�j���x��}����}Q�zs����.��0��=K�D0��R�=7�����U�z�v�����X�8������1IJ����l��
�f��4�Jt�pQu����
l��"x����q�V�U����"}}��yq������+*O������o9���|����+�i��r�)�7]%c��{����1���X��s�I��8o���*H=x%4���n2�}9���[�����
Mp~��;.n���-�.�=��-7�����d:�2�o
����m�Q�S#��&<�K�N���4�9*[G>����'D��Rd�S]����k����9�yX��X|zl �4i�a�OYV	�Q]�x�o�p��5�G�����fa��8�.�G�U����>:z�:O2� ��L�=�a��4�I!K�u��
�M:��Ri4CU�
u���*����`C�'��W����2*k�
���p�]W�������#�4C�r=����KQ7�K]�����A	�q-��$����1e�w� kAk����AQG�������q�I6�L����Bi>�w��������3T&�7���Z[���U^l�������$	��b%}�
EE�H�����0�� =%�
C���{.��<���x���D�i���\V����}�x`.���U�4����o�?��s����/���s��.7e
��y���w�U����>��\������]��.�6�5CFZ1-d]sMm��q(�kf�p��-��tywu3�y��kg`l�	i�+�!�I(��H�w���JA	b8%:���[%�d^+�����i�R*�i�+�O���j��3��xv�L4iRS�]�(����(�s�mmC�s�.��=��F���RY�������-G���S�����G��V�#Cz�t��]��NA�����T������JW������p[�O<���D*��
�^�p(
����	Uicc��
�(6N��q`���u1ws|�� -2#a
��^G��?�[J�Ep� \��s��U3����x�n0���C�@�|�����a{_��v��!�5>G���7��+����#�=��g���#1��(|��������;�Q�����r�%���wm��*�t�rND`�U����|�(�'������*AY�J�������Q���AV&5�������K�9�l#f~�[#�s;������+�z�b*���3��@�����N����S�4Z��������>!r"�&D��,x.���l<2��q;����?������$��^F\��(��/��J�H��q�`�ej�P�JM��*�&{�#��\�YT�7���8nNP*���Xu�;O�����8�/���_���1�]W*��Z�+���b�����Tdx��V~����*�w�"b"D+}��+p�$8-n+R�bjr%�KP;P�$ �e8���T��2���Qp�
����H�vSFd���������;��;7�6��v������U��G�*��B�X6�i����.���z6'��%p���*�={a������5���:F~T)Mai�%�|��z�� �����nA��_`��f���1���4���\��=�R�������SZ���)�����E��=��m	��k\�;H�";�<��8
����
�qx����[r�L��X
��YD�����czV��m��0]!�"<����%R����\����6�Nv������~*��4E�Q��o�v����e���,��E�����u���9P^�vO���������J�,Rn���Ob��#��#�|^��7C��m��QK6�������=���{!�:�Z����"���h������9\�$���|d��[����r[��A���(D5o���\�.�BL��p���.DF�I,x�l�.�fG ��g���������s�����d6�|x3�e%`w��~�7������!*)�`���,>��Mxvdc�q'�cZ���J�)��������^\�\���|�ZL��G���n�sQ\0�%�h��U9�:(�.��|�g��70%#���tp��j�E��/atW_���A��7���?�7z���#��D�h0n�����lS4�;��0\��/*�?�}�����J���>�u���G����K[\���%_c��_��� ��Y�-����� �:2C��l��*[p,bn�+���,�J��>�>����5�/��3:���oyu��6�4��l�c9F�,Z���e��`��y���;�v����&	��E��~�:r����%������.�B$th����9�I;f�Y����4"X����a��}��A������C��+�r|�7f��qh{�%��W5;�i��z�gX���O������=�0}p^�������N*������-�:��a��w�l�:|���|K�/��wG������RY6��,l�1[���v��2��]ii���f?�_?z���o{9�~~����v�g+�o)D���ptME��OU
}�]{'FE:�r��v���[0+��V}��i��������\�QYA.
���/OC�0'���k�AjvB�:��v8������_������d����,����0y[>6�Gq���`�(4Q&s����I�Z�����,�W�
N��e�Z
G����b���h1�����/D�/�q|�V����~}��g�\����?���������Y�
[��~t��;2|��^�'�bo~#bM���aqd�x�^���8�3P�����n���vJ�M��?�?����������0������^�$-�d��x��:�LnZo�����������uD�Y�+8�����d�N��M��z��t'�����[�9����Y�fW@�!�Un��	]���Kfb��)���@�(+��O�.p�c������)�����|}�{�'��G�":$�����dG����K�v�X��RZAgu_�JT�$��Di�C���>��WnEZJO���7��d��0�����z,7�|�ll��O���Gs��v�/Wcbh(��6O�����r�i,S��w�A������C����c��+���M��'���`��D�o��l�����\�����)8��$6�!�u+�~���p|g����G�x_����Z��<��0�������6a��GqM.�X�re�>[���y)����H���(}��=�����������\���7�����9�6�&����Q���(�E.N�X��_?�or�������>GP8��z�jt1Y����?����v�����=��������X�A�u��s6h8R.�#C9�r]��U�h�a%�(��
�����2�	�C�0�!�c�|ss��d?S�y0���G�vc�?��t���(�51/��
�!<~���$h���������x�F��E;h�3�f{_�kA�R���'HF\�;�m���7��
K�����>�,�.[�YO2�]�z��Z����q��K���'��\�5
�R��:
�>DE����r�/���zY��+��~�["m���Ah��~��$����������q<�i��G�z���������+�cD�"4�Y���������@bO\��DI����L��B\�dL;H�4DQc�IG� ���sN�2�?n�LE����#
�<�0�Nn����`I�
�����F$����C�|�:������:l/�#�.���y�YM'�f��
}l�E'��loU�.��
�-�m�z,�A�������~H
R��<�B����/��i��Pm����t�q�(��������+J��A����T�S�/��eA�kfu�5�a�%��5�����x2N���*kC��GL$��L��K�p���:����G�3������i�*�C?�������"9;;i�'�l6��������4"u)sjH+������"���������(�6�P���{w]0$0@��n���CGwa]�a�8�u���a���PH6@H��t)��4@xZ�,���s��������Ht��@kn�bN�F�:~?�	_pkh�>�#{���%�AXq�����������Y��8��;���q���0��0������V\(�Q��
�9Hy��Cq6'�C��iK�!��������`l�o\�W.38������m��g���u����p���W��h{o<�#�>��;��au��i�R�����8�Q���uT����� g���Iy�7e`������t�F��m�q��kw(��n��;���]|=�P��PgL���(�J��[�����H��A���A���W���OU���\���w#�bpAg��&7-�v���.��Y�y*�5f�#��r��ko�r�#���h��
�RkT%���s�)b���� *�� 
N:������o?��c�qd�!L�K�)|o��hDH�=X��������]L�V.���G�[b1L�Z��8��O���k������Fx�Gpd8&F�n�<H]�X���L�����d\Kp�#q��%����	��P�};�vvA�6��2>t)���GXb9��r���e��6���
%!���}K����b�uy:��u]|"�������[���{1���}�P����1<�!�q�pr�1l;\������'�1i6�U�������{�����q���5$�������UFu��c�E�m�Fr ��������$�V�z�����h�|���4\��g~��?���N�`QkOw>NZ�i��V]�L��>�h��N��N�e�;�hb@�@��������m�	����^}�oh��[���
	�SuyJ&81.��@��
������>-��J���&8�2��_�K��������(��7#F����m�����JL��_ ��H��.A�pw�������F{Dq�IOL�O���7��J����-� �:������Yl��rk��!���F4��F�wm��Q(����1m_;$���[�A�|�<^0qAm���V�"c�.�9v��
��5���l�g4����}��aL���3�|'vo��������ECDs��Q��v����<h-qr�V���'�1�{S�HK�f?FR�6�z7e
}8�FU�������+V`��C���?�h��K�\�C
���'���#���'���z�@���G5���2{&>��[.dg��Y�N��9�.���F"�?���T�;��^w����N��^A\�W '����d���AmtX��4��Uv�[�.)w�9�l��_����P����
����]?�����j���������
�����mH���o����5�!v|�"��
�1�
e�O
���D�?���
��$(N)�=c��X){qb�3xe�'��.n������������RM������V����0N<���X`��K���X1}%�q�3�O�����,�H���aA��chB���'�1�����?�|�'/�Z������E�_��Gx��q��,�Z'��1���_�����
-Zq�.�
M	@��b������Q�'��eGnr���|#������,�S,�G�w�b��=������(�Nl�d56����^Ia����2�d��X���T����� ��`����.����o�1�9]�6�l�S{���9-�xq;:o���e��H::
7LL@�����@��D�>���w�H�!�Q6�$�s37��x�'J_k�Y��"��m��G��-*��o
����Pn1r>��O��p_���zHC�4Y����E8v8�
�*�9������ �����|E����X4{��F��V��1}vL������]G�p>B�y��X�p#�l�C��;P1gD�!N�P��J�k�U!�Z��E�=���8�A���D�����"���=(�����V,�������9?������|�8�(q�s����\��e����+�fk�/��Z?���1��,�(sd��[\����Le���0���m�8��vZnR	�O����;��c������c�BL�e�o��&-��~O�?{�_U�������H =$�B��Ai*�(J��E*
�"*"(E�t�%:���)���{f��!`|������*����g���������$��??�8�=��nO���D���8R���u����qQ[������}�9z���3���y���g/�ve`�p�f���,��w�����q/�B�����e���pb�(}�'/��{�g��'��0�0���gR~*NM{[���V�0�
u�����:%�!e�SoM�;aS�`��YY1�:�w/�C����^���8;�cl��y�����A��V(�3W��`Js}��%{r�(��
��W��`�#h��4��zv<C��6viL�$�������h��no��,����~����{�F����|Y	�6O�����z������N(��F���F��t�(��<�A��~I$�"bS.�H<���o��_fa[!��"3�^~���k�������<��	�=��LoO�8@�o����F&�t�M�~����l��������]�
��b|Q
o�$��F� �N�_������o�������A����Cp�r>�IO��1�4�R���I�F�*�Ci���	������<<��eW�A	�ZE���X��E�<�
����*_��G���'s��Ma����4{������z�/��(�h�%������4��D�:��D&q� �M,�aTA��-i�Z;
}x0]z[g��5`1�t�E7�e�L���ZL=N���J���q�	���/�SC!�b@�8�����N�0u�~{]'`I�����}�%�
LGZ�F�<�7�|-����)4��U�t��A�D����{���,2���N������*��H�L����W��O�-C��F&��
C���
���U'L�.3��!
������a��$�p���9����j3��/��O`_b��QE����/�������C@����l��qyyyJ�,����,�k����W���D������Hw����X�����O�����<Q���r#����`��^���a��'��qqT	j1p$S��I	7����A
tR�^/��C����i���������N�e#'�-�(�������jQ��!Qq����	3�~��������}����j����A3�2���	C����F��a��}�Ds9��+�(N�O��_�����J�������Y�m����C�kct��*����Bl�S�<��e$�� ��i=��Cx+��Bl�l��MqE!�c��W�����wR�PPI����/]W
RkY���p*4v�25
��Ej���p>�B�5e5g���J���H<X���A.J�[�GU��8��++1���/����Neq��RC��"Q�/���j�ic���c�za�t�����c���������L�S/���]�����iMem:E��	+s�M�`�DU�mjN}����p	>���4����{3��ROK�=$/�?|�����4&u�Z$[|�{�Km>_���3P���w��:3�0"����������=��l��H��w�}��z\�C��ZB&��~cy��"�	3���`�f[D�vL��o��o��`g���2�V�!�������t����/�\�%�!jdgL�
\����`�{���������nx���!Kc1�Q"��WoZ^\��y��cG�_��)�)�h�Yze�z6E��r�vZ(B��P�t�W��g�]B��O�`�����:=��?��Rr�0�]����[��"~����h���|�������Zi�'3F�e*�oR+�
�22h�5�����@�.�����=#q���b�~[���x9p_��s1�D������D���1�x�EU��R��0��a3q]@-S]�z	Y�t�O�4,h���K��b��`�f[t=4a!-���L��5�(�c��a<����Ky	�������=c�K^�(D��B�����C�����g�21���8{�����aZw
������&t�����=o�(��igr�f����>�]������������-i��^.�;��%�1��'X��It
�`����������cm��#���N��L��!��{����?-����h��'��r��Y7!���y2�VZ`E����TeU$��^4�N]�F�q)��7�c��
��3����~�X�m������}H[6��\��G=�v��m>���$%{�����\��:�
7�?�'��F�^��)}�<���tHs<��G|�b��VG]�Qw=��!M�6�5�b���m'<z�,��5�1��fdNd�7�D(�>��>���!%�.
hu�"X)�k��R���$c*�g�����WX)��ie��0���PzM�G��!v�@���Ko1��KQ�v��~���Z���'���#&�����0��<��z0_�^��)���-��{����!#�o����&
\h�.�0#��B����*�����(���/#t����!�8�4���=�j��u�
E�v@�u�~�C�V(�u����!�V�2[���K8��=����d8<T
��>�9;���as�����3d�����x�����vCqr��h��������C�lL"&�r�4�h}k�5p�B����c��9VW,p��Xr9�uk�Yo��K#x�T�gT�/��M}z������������C��h�48��� ���F�l��i8��y.��l��x�y_4i4a�R�m�H���C������D5�>t\�����-1��j�~�+i/�}��V���'�px16�NB[&rv/�C�+����s�{v&�Pu�p�*>����^�+�<�gS��Z}|0��n��L��]��\�-�>u-�NC�����������`�d���c��a�����3��]x�r��pl^�<*�x�?�VWn��;�k��Z'S
�r���/0{g7�$��������nr��{�!	2^Ze
�.F���c���|>��hP�|:�+��'��6}�m>��=i���8����g-��Kn��Y�)�7b�2���0���u;}�����D����v��3N��l4#���e<t���J�"��l�E��_��`w����w#�;�>�OQ9�wQ�_G����`4Z��C�i�gG5]���=|���C{�=���C,��r��������O��h
9�w{�4�{��v�3a�a�?=�/d��'~d�k*t�������-O!�b.R��Weq�3F���m9l��>L<�s��^��k�07�G��GbX�0�)��-�W���}}���
Zw�\j�<�~�"@�)d�����}i �����r�o���x`tw4�~i])�i�����r�\�G1M%n&f"q_
�}56�>�I�M�M��������9�
D�L���@�#y_*l���x��
Z>�Cw�����>{�y���d\�e�~:X����/�����@��g�����	-yX"���'��C�����"��������SAc%��\�Jl\��S&a���2�k�2�B!��'C ����gqG���3cQ��X��?��'�sQ�.*R�_^Z�����<�Qr��M�������G���h� m=�����Umz���O��G�������m�����~��F8����+[����3�� �N����WhqO�`�K����(D����)��z���D����	4F��O�������m)���/�vd��������4n3y���L}
����vc����W(o�2M��s�2�$�5h���8����w���D��>�C�J}�n��s>�g�p�*����7x�O�e�J��K�����bD��gO>�A�b`]6A/XYOq����^��)�s�2�k�������N�4�}��)�<(
�b��.^@D������^����E�bM��9���c+P9��G��_JK\�Z1*��c�R�_2n�?���������q�C���t�N���3���v�|�D[1Pg�\�_/����c�L+��U�^��Jj��������E�F��t@��iX?�)����^T�
���2xF���m99�]�r"���V1�d,�[^�Z���DX,NC\��x��`d�5�A���TTP�����N!w�p<�,�M��	���U� �����f@N��1�}��A�`��-�5:�na@����a�:��{7}�5����w~�0k�@���-��J3��4��2>���sG��7ZP��e��^<�6^�F&L<&�����x�������O���z(�`�*R��0��O�����i��W�
�"��
�	*'q2��7F=���{�9��o�N�.|�#cR�������e4:��t�j��Sz?"�d">�����1����E2q����#��s�_����}��i[�P��E�d8���Q����Z����GR���n����0+��K��>,�l�$}��0Ss�M��Q{�q���ZK���(�����Ol�~�
L��������d"�p��o��w��q���z����bK��H����N��5c������.�8���&/��	�o�Q�h���'�s���.FL>��t[�3�PI����m�5�?+������ ��,�A���<1����\yi&�o6-X��XZ� 51?�^����E7�r-h"+BV��aU�/�@��bO�5����e���b,�����b4k\
����?}�]�	�7q�jO�Y���X1��bI�����h5�����K^��x�gS�0����'���sLr"L��&-B�b��u��c2�7V���]��4�B�V�j�,2/�mC7B}���8-�f1�R�"Ef�:�
fk����2Y�6��n��b(��N���2�+�E[���r����O���Vq���%-��^���c
�R}iQ/N���1����
��Ex�8Tp�SV������s9|x����<v����T
992���2Z3���&e�4������3[��.8�W��3:%�W��%���eV�����f|����F_�	�%�tG�yS��>����e�5���F��%cd���-��5\�B�����J
�A6-�"���y��>���"�������9��������x����+�9n���0�?��\���\�%T��s���p�'����0^Qj����1yz?������l�^s^�]�N�Nf(����	)��`�z�y��x��f����2��Y����l��w[o��VZooZqy�����@$���o���GJF����!>�}�K�=����5;{�R&K�A�|�����I;0�`��#����w	7��Va����?�_��)�d��B6�x���3�r9�����f(���b����g���~��X~6��
������KJ	��xXSJA���H�_�Hvj�(�*+�s�7����3��V=Q����G3��xjEaG���}��C��pt[<?R����
dz�������u�!K��(�q���������^	V�I�O-T^�0G���~�~Jltu'��3��z	�V��aBX�����D�o����=�������6Cb(�g�6�9RD�-V�C�p�T��0���y\X�������8��;=�_����&#�x�	E��^Fs�����HIM�1���CAytW4n@�2t��KKF�b�{+�;t�Xv�C�������L�5��f����4�"<�����j�����[�dy���;zNx�����i�����81�ISM�.���5��
�I]���������N�e�����A��!j�������l�/���v>�������@IDAT��(�j*�>N��|<�T��*��_�Z��I�SGX��X�S�|��$���O��B�d�a~p{f>�b��#�*�w�z�f�<��[S=�P���0����r8�<�5b�@�e7}/��������n���Q�L)O5�����B�i|Fgtx�T���X�c=�TU���uOyO��E6!�������0�JE:'P�
����x�ar�ZO�kYj_�^r6�8�F���OL�dy������E7���C<9����IJQs��~p6����*��x�Z�;�8� �	X;f1����������^M����F�����������AhGs������(]�GPY!�?����%���g������t_XM�@zJ�Y=���X����5��r�4	�[R����`�X|0�Z����k���3F����s>T?�tC������e�l5C��`��2d���o��3��E�n�.�y��A��GM}�k�����J�m���C���L����\<��^��/_�)�S/am��#k������Q8q�������`t?-���R�>`�W�av�W���J{2a��4^<���X�|*��?��6
8���p0�[���Ml�K���=T��1}�Z�v`�l�[d��Y�+�aq��d��`��Q)H��?���V/o�������sJ'�L��5u���c!�$�X�Y���A�YX��i�����qK�y�(t��$�*���K�Z�5~;�/�K�{�cb�VM��_�y��+���+�����6��"��e��|&��v�Q���sn���R[Q��v���3���]�?��Q��}�z��n���<����i����g0����dQ��D�jn�����k~��W������
��5A������@.��=���?���w�R��x[1�",��s�����e8��R<�p#�$�d���i��'6���.C�b���H7 *��4Pw����y�[��o,'!�.����I�	{��Y�a`UQ����)��b���p�����	�Jsa���zM�_�����Dr	����t>�?�tAC_[�qS��u[�VD�O2�0��[�������;���<�1M�����#t���-G��+�o����d�.���D�2[���qf(���o�(:�w@C�yI�n��h��Ak�
]����F-�qY�:
��Zv��q9i�H�����!���jlbB�u8�XQ�1~a��������!�t�'}����7�uP���FT;b�T'��w�����h9�7�J]�'TX�N|M�E����$Y��%8y��r���@�F�6yRO��h�aX�rC��.�	�l�4�t�����R��`�&�x��F����5�Vb����C��|��|����J����E��=*U����5��+>�v�����pl�~�K�8_��&������K�>�de���]�� @n�]~)8a�^dev����;~
z}O}0P)���5W��~���dD:ND�Q�v�Z�Jl:�����jS����Rg2�20f-��T��?+5O�B���S�������&�\���z����?�Kk<�a�;������GgP8o)��T��j*cS)�D�pI>��S����<��J#4��e�[R)+*X�"4qb�������Ut+��o�z��-�e �tK�
���������@�w��2�����ts���]Y>	��(�C�Jo�I#�����A���Wh�t�T�1�8j9��3������t�0�"�^���m/�7���=����/�]�C��Y�(i@E��)���=c5t���y�%!-�f�F&�%�qv���:G���[��\UjC���}�t��o��I=���eIbO�#�B������d�y�Wy�{�T�����e_#��� eO���O*��`����Dd�����2����v(�T������.����`x���.{!m[1)����U���~�'C���\\M:1�{���JXL�Y��bZZ�m�k�:��
����;�gR��`�D-�p��fA�/�k� X��a�<t�o�k_��e���`H�����@jq��Y�a�z�+�c"�c����ioSa�v��9���@������i�����?�����"�S���G����
827�/��t�����O^S�����=C�DQ�m��6�x ���ZH�
N!3~3Q_TT��LZ]��<h��*K���a���/H�Ps��e���>����?p0/���8y���K2P:>1BV�u����W�?4K�vZ6,3Ocq�z.��l�5��y#]��W�:���:�O��~;�~���L����3K�o7
E�Vu!B��=�{��*�r�c�@���0�		*��jD�Y��-fI�Qg���E�"lN��m���iz������F���W`
��u?��{�S�a\9���#��!�����7{OGGz��=���V�N�����x�n��~���x4�B�$t�m��(���5+�~�p�(���Z���g���"��!,,{9|P��6��aW���\�%�
��:,,�/��x�
������8�5���Gl8��X���_�����M����uWqq7{�Ym����-i��f�������*�k
��g�L<uE���a{$		T�	a�[��]H��1�����t3wyO�~��'a��T^��l���v]I�����e��o5v���S�*�dm�Gc#�o���aw�,]�����z���j�������;�b��^y��ar���������3�kg���^U����I����"���������ds�h�t�����0��Z8�$���i�_��|�5�^$��=�������S&0r���R�<����?��k�0�|N��FZ2���L�������"4����m,;��3Wq �4�W�
���AW3��h	�pB�0�"�X���i�N����xy�U���y��+�����������m0�O�y���Q*�����i}t
V��D#?'�wL�Wb�X%�sm�=�����.�j�������AB�vX���Mb+��/]����l�m^s	���_�{�������
FH�����T���-�K��q-����W-�0~�x�� �2�J��P,4>Ee'�cN���mZ��@"�����3����~�����������3\��#�p&*%�w/�Z�G���J��C��!%	rK�;'���)��C�tp�CBB��������H*�D����N���SO����p0�
��P���K���O�����������&���x��H��������w�H4�D�{��\<P���i��F��x������U��JX1_��[p�HV]��
�b�[���������F��R6J���C���&�yZ%F�R�+�y9��*@�0��c��*5�@�B��df��N���
/,A�����d�����4{���
�������
�u(_�D��sp��3"!o!{�}Sg�;3�=�����aL��8��5����)O
NqU����h�Wl�A����f��w��^�����do���e��`�:ooo����@b)����R�`�C�;]v�-�/�^3�����������gp�nZ���d����YcF����k������T�f��c��' ����
B�Vo�ya���[p�2Jpm�q�n��>�=:���],i�R�7��']4+�"3xrl/�}\������Tp��V	��c����*�����
r�8E�I
h,�c	�a�?�_���7�1���=�l����Q[t�	E7�_:y��P���@�o�!f��6r��P���z��c8���"ZXGO��(X��[�O�T�hH�+�	C����w{���Ss��'>���[���;�G�_s����N	��b��G?�zQ�J�(tE`�_)`
�^p*NbF�Px�e	I�(�Tf��k�u���%��p������B���1��-�����H����:�j����$�)(��]j���)���t�28x����Vt�l��Z���������3V3	�ra�:�C�����Q��	�S����%��%��z7i�����R.���`���N�e�T���s����qi�%��7����0�cb
�8l���ns#�]a��:o(Wo"������Y��������r
�;��I�������5�[�	�w����I�V��*�(0���u�6��������8�����������Bc/�*��S	)A������t�U�����1��|�������8�?�a�c6r��x(Fe��r3�G~V:��n"��H������������i_��S��@1�(O��=�s������?�������{�J�:��u��K7�l�-�������!�q���x�����8v
��Wq&�at�MeI��J'*���;GH�;P����w[S�����4X���/�{D��	��2'��>�c����1C65�� c�m:����Wkh��Ii�zE������L=��~���,1e����i�y
�Y<����Ef�-!��L,<��R���	"�B�e��*g�c>f02v{�\�����a�(W88���!!�2b�.�^dT�����������p3:	����A�\|��3~x��nh&Z
��!+��]n��'}�3���+������x{�$	�d�4��huu`��e�V�W��I�	�~�(���p��6mk��/�!�P�Ix��������x�~e��wy����L��R.lP*R�ht��g�����l��aR�s'��0��+G��a2��m�fw�V0��]�������q��PIau�Dfz����NT�=�Y�*��A�YN��P�� �R������7����f�IQ��'�����q#	�'Q��aIo�^e`Gi780�X����������y���Cm���3�!�l���8}�=\�N���P��D�~�@�<�k�v &)�c��a�����T���4������u���C<�����5����1_������E��
~I\��#3��8�`���K\�}����.ob��\dF��FPq`��8�7M�����*���9Qi��0���KE9_*�J������r��k�f4��^sS�b~��zgOyK��j����-�^��U������9w�l��P��V����2oP�����f���q�����}�����;�*��=����'	j�W�x�w�|�������?�/�b�_����O���"���X{'Z3Qj�)�����*
^TH��#��p*Z6b������������{W�BK����������w��q��&�]-@������H�kyR~%j;RQL��"q��W*Q��[fz#u���y7���3��tc���?&VU"�N��V����V�Q�v���^_`�V6���:p!�k��������)?e[����F��U3R����r���
q���}���8�����&��y�E&�k���������[6�4����
2�x5�ux� �=����G#B�(��:�O��	s0�?���8����X}��Mst�C�b,����E��e ��7����Q6��#i�mYj�����[��)����,$�[������h�L�$�*l��.<r
��>�t7#�8i�h��H��7lk��$l�%R��W�6����������LC-l/"}|�C"����"�h:�Z������h�N�n9��O��w/E���r��v'6��8���H�[x8l��������bA����oq*�U��/:�ao,*yY���l��4�Fm��H�O��mFb\��h�����*��3$��D���~������	6�����;f@\O[+�k)e�U��Pr�A��I9�N.po�`V;x�l\]���<��[�������mr�����T;������PL���c���U�	S>�&���^]'�>�Y��>�����������\����l�����`�XhL`)�
��#�r`H����	�3<I(p����>&
e��{|p�p�!��5�@�v��w
���j0��oU��F"m���N��l��D�[3|�W�����1��e�8OOx��AB]8;;+�������+�ZT5LhKD.������xt�\<^���l��@N�X���-�O�'�����@%���3��e����~n8"�Z�^0���2k-a�U�gy�iq�o���W���L�
5WObN�0l��<Y$��������x�i{�?~P�����{����02�G�����t�R��LZf����,
�Oblg�H�
��T��Y��_)���Q����v�M)��/!u��~hZ3�S�>w����_�H
4�5�������^�����2��J�O�7�y�sSnr<!Cb>��"��2��	�A����Q0�N����X9������
���R,"���\d��I�M5'D.q�2T��������~o���S4���,
F���
PMT�*�!����	9~�I
~d�n������^hW�\��������&��$��+�W�*;@���}�p.{��3O���Fh��F�Z)_�uI^RuS��b��X���p(��U��@���8xiB�N9F(�#Eu�0��3�����^z�4Zp4#n�|�����%g!���e��?�~�����Tf�?�_�dT���%}&\�2q�9~s�RC��Y������/QR�����t���3����*���+?��`;�>���(�*�)��St�[�?}/t������0��\��-����Zok�7�5�\~��)�i�&��0�W�Q��� ����be��<}�������[(m���1Y���V������)���=�M����i���
y��pk��2��ne���%����A���IL�-�����/���l�������P�����rwEm�\$3�}1*�s�L�������e�����pA���(��`C����
t�O�+)�� 70�m)!��w�U�������?��un4� �IF.%�.�� �
+im$�VT�|l��/��n���92M��������L�v��
�a��Xknv���JM5|�9�7RQZ��������t���&�.�,��N��LF��
\������N�h�!��TZ�r��la�\1-��n��oOd������T�9��;��Go[l����] �~%,�O���`lI��xr��o�mE�5;��-��P�S����K0.�aM8���@�'����u��\>,Y��r�Ca�����a'���Sk��hJt��,L�1�,/��2x{�H[���e�K�r�g�q��3,�
�o��mG�kV�fr�.��R
>C&�N�DB�s(��y��4\���������|�D{�{��{V�����K��{�����EZ�!9�9>���Yf�9����P�T��e|�H����)C����s,���>&\�Y��[� �����W�����H����)��+����������w7AJ�+��sNG��0[z�1}�H�q�~�
�����W��
�J���s.VQj��������Jp��]���h�������B���H��2�����U[���E�<C^��N�Zz������e�G�W����Y��Zm��O��/���~�>�
���i������qn���p����*u�R�9��Tdx2l��r���r��&tN�4�+<��m���y4�(u�F\N���@>�J�3�RA���������n�KXy�TLtPp�<��E���\�6�G������L�8������)����n
l9z���j�����������bt����c�1)����:��!)��q��p�g�i���U�:�L�����1������A2N��	���0�����g�;p-��n�� zi���X����y���L�V�C&�����)�Id,�L�P��+��������A��2�Q�f��p�
����|����	$�><8S�G���]��~F/��*�/���:���w���~��B�e��c&=������@�`Z�
�u����B��,d�����c����|����)4�y��6����u������)���?B�T2�=;q��H�4Zx���c����C�c��x��
T��	)O8��"�B��#�����J���&����;C�P����������$�bMkLh���5�n�g^��1 �-�%������L��M�<�:�:��.<����5��FM���Xx3��9r�g�{��q������$��Y0��"�U��LOA����A���K�jG�C��ZN��l��Y��U������:���Ws��"���u�X�o�C��T&K�B*/4Zsx�}��Ck������tT^�![C#��EDP����>�����e��15���kJ�+��c���[�q��\c�T�3�2@:~���o`�u�Z�{_��P^�6��4?��m���;S=�k�I_w�&���|�����a��rO��K�@$-����N`66&=�t^lC��T���S?���y��=W���p����K��>e���hAV�|V6)�h2�#SU�������U-�C�Zn�(,����d�C3���W�a�wJ���k�x�����H������T������`�7�����'��B9""BY$�2Y����X(�������U1����$���Q����[?�/����K�n��XNe����k�0^�-G&o	z��}�3N?��JT&J��y����i=(����,O2���QF��e�
k@?	�;���MQ^���O�(���	t>�F�c�H* d��R�X�E'���3-y�4�������?o|��S�q���EOFa�������i(��BJPgi�2&
9�������,�Q�����oT�8xk`�k`�>���n�?�xX�mPzx�0���X�f/�O&�[�p��O��/A�w���R�������v�V�`�tr�d���J����~Fz��$'�����6�T����p�&��S�l����+t!�'
2�L��������^��Y�c�Bi��3���'�poW�2flk����o���������0���X���KT���H�������������;�JjZ���F�xl�6,<w� �����:!���Z�7c�]��|��R�|������M����h}�d��x��9s5�\I�
7�[E`a�m6��c�������d�(&Hp��O�0���5XP�=|\��-6�����k���������c��_���u8:���Ej[��]�O��x"R_
�'c}�`�5a�T�	d������;IW��WQ�`R�!�O��l���s|�gM�K�Z�Bmd�qU�����HZ��B�`��inC�N���_����@��<DY�5+�����w���I�O�\o�V�m��|�Z����?(�g�������
��^h������<�6�0`�t�[6���5Z�|1���y������h����p�LLHa���SR�����;|0���������	��m�<G�S>���t+5��n�"���X��Q\n��7$�
>f����B�6���u����Wf������a;v��o����'Q�C��8bE��nZ��O�:�wn������s�/N������`�4���:��x�$'��^H[�`��!9~-�:o�X���93��m�Z���)���D��#�W�b}$��rY�����Oc�6�GL:�Ih�Re� ���xyr��H�����Ss��S�	���vv5��}�`�u���04r���E�4*����=�_z�������)��C
���!���i�
�������+_���y�	*�9�^��#O�Y^I�n�Yr?/+����[���Z�����><��s����3�Q���2��,�������[�;}��5^��L)������&
{�B<�MAf
J)_~N�x����n�o[�b[�:��c����"�U4�L?U�B�!��U�����2�[E���aDm�e����?rx�pT����f�-��=�B5�)g�n5p�/��(�82�j)Hs�GU����k�m�pg5�-��l���}�9���(�}���	�$N���?. �d�@��b�'��^H���9��;#��������������t��������41]��>��gM�����e��B��$/g����(�!�U�B���B�N���hB�jy[���|���#�E�9��^`��Z�`������;H�8*'�����O�on�B�o(~B��j
��A�w�b.��r|���E�V���9\9yU��8����{E��mep��}a���S�"�DZ@�<e�����	��u���4&U���������j*���r���p�=��{�0��g�����R��P\�4��p�'�g�����H����!���B�u�^Z�JCQ�6|?�=�����m/�EU���������WEB�ma���vpP��$�)�Ph��$��XZ��������������P�0aC^Q�B�AfL/�tm�G�6<�K�ud����<��&
(��]�9����jo^�4Nsk���x3G����>��o�v\���E%�0e+Z,K��j3u�r[��6�N((�@��4�%=�1�7x��HnO����iz�*�������oI��'
��c32�	���^���B�e$v�
���a[�	X��Q
�1E�oN��>Xp2�dU/��X�������04��~D�������Br�j��G�����G��^ !/(��\�9g��f��}3����� Q��'y������K�<%�x
��J2������v`����d\yD�&V�4Bt���p��9F��.�C���t���8����x�a~a'��l���T�����=�,_�����5������H�p�>���^����KS��Y>+K� r��
����([9�">)���E��`0�c��3���C��"U?��;���j�!�o�GX���~���|U�+�~�+��r�n�L���s����E9��h��<�v��@a���n�x��79/�s�\��@��OylL?�9����\��{���I�JY%�%���I������k���t(+������������z��*��(?�v�y�N2�����	g��b�X�|y��6w����Uw�v�����5�8��"����h\0��S^`(���q��eJ�"kS�z11���S�����[|����)� /g���6f�����A
�.q����Qj�}X�#��R�A�����iK�*1�fh9c#^�C'�����������H��C7/=N�~4������������Y��%ga?TOT�y����j����s�h
��2S�#��*,��@�}��x�����I9���,f�>��:�h*��:����_�5�� {��K�c�>�������������dV>P������L<�&����3���,�_��\�Q����?�����%�$�e�X)������*��"�4h//��*���39�%3��yD.}
?�v�{�'^��,�R&������f�Z����r���6�MZ�4�����
;��z�V[)�.c��iX��3�z���-r�r!�9���i�{�y�<���0�DG����ky�����T$)��"u���o�!:�4Dr}jR��N�T
�����%��?n*^����]<;k7.�.�v�@V^��]��b;�������BWX�t�8&��Y��_
q�9��|VH9v��7���b���W/�c!��nUA��V�=�v���1`�Rh�4Z��f���wza��n����N�i��lV/��G�L�h�d�z��	�,e(��g���6�W&�D�s�wW����`�"�n:�b�"G\]�_�Ut�SE�uQ�X�	�M�&��p�����B������;��@��B�6�d��'����|�bM�x��l��U���u���P/y��#bO���`��'��M�o}	;���L��Vn~�@��%��H�ri<m�x������F�?A�~����i#�^��K���������x���4��l42o�b��k��"�G�e7��x�,�]*f��(��K�M�d������ms�|>Y��
|����$R��������������g5T���t����9>���_����"�*���S���dl^�c��m�V@���*�%�c������=�4�$����P���)��)g,f����u��MA��+�\'���60�wfl����*d���k���tsp���.�+���[y)�*�������>�bG�\���'�3l�j�]Ay��x�b)���"�	z<$�.�+��"n��t�����2]������w�����n�#3���2���ie���$|�v
>�n�\UK"��%�.���V���r�<�����o�3QQ}3��2��Z�W��S�X�XP@s���>Po�@t��.���E�U���Z�n�a��,\u ���
|zl2��9���}��2�T�u��]��p�"QQ`�t�z�����h�#��pe�Dze #�J���������-�:��S���S�����;�����{$���d��"x����g�V�� N�y���(�����e
�I��AFP������9��N���r�A<��Nr�Gpy2�D�]�Z������&O5�����q�H*�������0~�^Z�0;K5����������1����{���l��RZG[7�N�nM��
\2�����	{���|��F����q���7ZY���������pA.l)�e�/j�3�r^O�h�C����vk��-���SGp(�
G�4&�;�#E%�NK]&.Q��x_|=
���No�D#|������k}$�7���^�.2�����p-	aB�2>�����pFPD Z��������2�b����S)A\5Rs�}5����h�s]�Y�C������x���m�wB��3�G��K>-�2�1	�'H�1�p6�SZ�G�Z�&�E1`�"����u��&_�UF�/�C���MpS����Vc<��������9��lD3��(Xp��t�_���%dY*-�\P���i:) ?�����9���=��$O��o������4������ah:�1�C�`�2-���c����;���u�f�1
>A�E���d�������l�C�F�J*���{
�<\c�%����Y�Of�f�G���z4�R����f�*�*�qH���5VT���p����:��>����a����jO�UF����9��Q��������*!�7�1�V�I���H�.���:��p��Y�%?�z.��
�8���������?����W�0�o8v�� ?_|��H�t��_\�S+��2f��c������H_���p�	�]�4�������)��H�E%V�`�~2xr��Hd���az�qe2��rDn	E��~�-.��^���?�����\0r�������J��o=m�#��u];C~���Gq��,D��*f��u�1V~`cZ�y����
9��Z�6���G��K6��/,Q	�^�?i!���}}��%�Ex�Kw4��i�����=��V��OOC��T�$N:Q�;�'����m�t��$����@���1m��q�8v��n�����Z������������5�B2d��sbAo�w$�y
)����
�H�O)�V���m�o����C�=3��/�A���7n��`!�&#���T2�T�5���7��6G�q�a������b���������.�fO�f���H�D�x`8*�]�5n��s��O�<���l�����*�+cx�����6����S�r� �������k�~������^���'#���P�q1��7��VaO���0������]���GUxy���[�1��-8��mq����#����}o����uy���A���K���}{vOn���������v�K���7��:��MhL8zN��1ww�D��{�Q�l����!�~T�M�:R9�n|h0�����O�%=�YR>rF��Z�S���2l����}<G�����|Q�T^��Xz'�R�;IrVI9?����H�v�Gx���v��w�������=I8Y�$������]��2I��t���$?���g#sp*�N2��M�(
���� ��iPRp���~�?�[�oy��F4�5�T��pn}T�[�Mr�������u<�(���r����w�U����4��a�#�������v7�Y�����Dm�B���Ap��8����NB_7[F��b�������@��f����&���.�.���AX��������)�|egt��E���D����k�S?�7
i��e�'xmr�[���o;�u����B�CX1���HbP���L��'�b"�x(�9���
i{���n�����������}����C%��wE��N�r��8Z�v��j�wE�:���o��<��!�h��y@e*XA�X(G��&"33�TV�ei�u�*��������wC��R��%�|w�&�`Q�	�V�	���B,���6��O7���h=��n�#��JD���Bd^�F�Xq-X�>:�,���NH��^��#]��Y�B��m�V�������C�u��S_v���@�`/��}N�t�9hi��c�L.t�=u������Yqqk>�?W�|��)�`~��h�D;��ou�u{[��U��6����-�B�0�)O���u�a��P��*tQ�g�h�Z������<������sS:w(|l����d���R���2��{�k��5���^�����F��jT+���vI���m���F]��=�h�������u��V�8U��JY];���,�F���7/Z�] ���m�?���z��O%i�?M{��^�uZ�}��eS�:<T�}X���u�qs��wOm��_i�x7K���N�>�f*rM����j��yh�����:�
���^-1-O�U^Q���TzG��>�E�j������>~Z;$U���:����r3j�B{@�YGC��Z����aAZc�{�J��� +��h��{��C���C�k��Z��k���
M�a��S�����k_���6$|�6����6U(�e�*c�[r����j�%%��O���^�����
V,���q6J��Z3o���>�z\��#Z�.U�n�	~'���������Z��;�@�����N�Zqa����p�a5n
M{i]�-��f&X�_N[-}!nn�������ym��Y�=sT�
L]Q����G��k������|Z�4B7u��#��&�	�?�-?o��j�&Z����%���,��"����pY���_��d����+R�uqR�0Um�h�9G����=�����9��s��q���4��_�6�-o��������M;��+��/.��;�i���{�?.s�����xNkhh�����O���zo!T��+���0�5i�&m���4����zS���iqUJ��5Z������%�1/���yB�b���<�M��_�n8�m�aM���R+3����~��W���>�n����8��V�uz�����"�U�j����^Z�M�6��O�{�U���mz	B
= ����`E�����>}����+�]�����J�*���H� =����3���&�M6(��Sw`�w�=s����93w��\�<������N��5e����e��w���o�����`�k7�'���������{�ufr= 1%Qj�L���%
gV=�`"�������iJ��X�KJ����Uc��n�?K���+��6�Yr��zF�����7�ZER�\u�zhK��&��~m��E��z_����j��������������K��U��'���������Ze.���|�9u�+��=�������&6T7_���-��W�w�}@=��j������R�
L�o�}f�6��j�1�������F��P���`���w����^q+5��0u�=��/�zF�1�
5s�a��y�Z�*��D��\yl�-��E��5*��pf��KV�����o[��c�?C%&^�&�/u��/��?^�V���st��jz���s���/�_V�]�G��if��M#�T�_�C=�J��Y�������3�V���5&�H�����s�Mx6�z���J*�+�}t�5e9�^�t5i\K�v���>�IN?�k����3����/��Y2GDr�����m��x�E�C�q����<����Y�mp�Hu��"�]7��E�Z����q���{0�_Rs�������_��i}�zv�~��$We��W=x�+��_~����n�n�0K��P����>���Q.���i�$�r�����U+3����|A��@IDATUQ��j�5��s�<��d����W�w�:�R�����&��R�������^Pc�1]c-~���_��vGcg�o��o���U�h���LB!��)��v5��+��+�\�sT�s�U���z��
�t�z_7���O��^��=uc�I�aRs+dm[���=��~�B��d���
�;�����K��>�-J��i�u7?Mwx�
��<y���i7K��U���y*�T��Y*����NQ���3<g���!,_.+S'���>�0I=���ew:.�.T�?�z��S��j�
O�uk'��n{YM�a�:�3Rx���6���o6�-o�����c7:/:����Kf��.g�g=��*b���Q7n����b�/��o?����9����Zx,���TB���J�}�Z����h��W���2�=�zzS���f��X�
X�Uc�����-���
u�
Y��),�����1��t�s�'�I������:�<5���j��T������w9T�T�c�T��.���{���?�T����j�;/�����V���C�r�����nk^��A������.�&����V�(,(P��5X=�:c�q����3	�f��G5&���X���}W�6�v���T�zL;�Uv�������U����ZI�:�k�zw�yj�l�J���\���������Z����TR�t��!�/R3��S])�Y�����-ctg��{���h����e���	��wk��U��'�����7���i*C�Q����S�����:v���#)���M=1~�z��$7��m�������`;�W��:W�����(��j������>�.���1�Y�{�����
���Q�n�����{��k������k�c��E?=�f=���>wD�����7���=�����|�
d�}������Q���_��i����gH�_j��Y��j ���;�Pcp�{�{����r���O|]��� �sD���Y����������z��)O�K���qg�q�.\��p5��s��}�8�8�[�kI���Q�7>�.�����)j�]+��E��Z�Y�4��Kv�Y��V|������*��^�]�������W�H��o^�E�4�3l>R����j6�J�[�k�W�*�CwRs��M3�;��_4G�����O�e�*5Qn�i��{��#����Dq��A[��j������� �y��c�pL����^a��]�����<u�����FQ*A�	<K]�!_m��eE��c5���������|c�b
�}��IQ9�����D]8�Y���5*�t���������W��l��j�
�r4����B�
��H>U�.s�5���P��1+����T������Z����er,<%�=�~e{>�����&���=j��0,��%�<����f2��6��Y�zl��Ij���_�z����a�n�3j�m���9�T`�Y���
�1Sm��>uFd/5��7�RCf��u�&�ti�-�����%���)��@�>�o���EU�,���'O�T999*77����9WO��|aa���	������d��8c�����d������R�/�?��r��~��
c�g�h�>�	��~�g<Q�i&��J�i=��P={CfB�������|e�Y��da2C���w���g>�)�)"�0d9���*�#
��RV"��$i�$/7��g���\�Y��94@&�'���I�yI��`!�Z��a^�Bq����Y���D�������������z���3�8-K��(/��l��| �a�S�/�?;�8d�-��s{�i�+Dn�H��ONe��,����
�,k���^S^���������$9��_f|9KN�M|M�2~�)rSZ�4�SS.�v��V����_�3�y��}�UI�Pfw���$���[�Yr�"���S��M�D ����*IB���e�0����rsf�����������������O��g�������;�WdY��s�8���'�
��kA�?�R���FLy���z��e��/{�Zu�:�g���p�w�5sz�?�T���g�X/�D6W[�������Y�M��7�Geo>�/uK� 6��1I�*�I}1c���{]��E�$�1n	k��R�����n��_����k���\���(|�a-�=&�{�[2{H�uSIJ�z����#���FB)W��|*����p�p�X���b��ZV���>���z�Q�?�����E?N�����c#���o ��Wf����B����:��O�%6�����8 ����*���������o����l�*r!_��&O��2{���3��_h� F�'�^��E�u��e��-�\��bky���/�e�Y�E3�I\!_���X������z��T)CKn��:�Z���vpsVv��|��%3�6�2kyY��C�:N����U#�~�E�t�9x�L#>�����{k���_W���"���qf�����X)�/�V����a^�0�Rb�1f���������&�9���$�$��s������2�MKq�'i�('�Hb���O?�zn[�*��������/�.��8�\p[W�Q�[lB��1��=���]����&?������I|X�q�'�=u�F���k`���R]�'�+�x�\�0&c�/R�$�i?B�r�?��gW_��o��i_Y�J9��z���f��Gg�1�0mlm����A�f�,uq]S����`�R�d�
��2����1��c��������M�Of	_,%��RGi�-&Vy���W� ���A%_���{�����kb�W���n��T���h�=\ul1�����@q��U��������Wp����>w���L$U�-��6�e��d�2���5#�1p0mM�7c�(�ZUM����K^���"����(��>��I!�D>�w��J���d�1��x[�������%����{6�	���e]��@�����X�����d�!�F�3C?�{��H�}d��U?)�y�j�K{J�g_X|I��'nr�`���6Jz��Y��V� �W�����k�������g{M��.�f����R����f=�ku��2�P���mn
%�K��[NT6����/�^KL�}c���F�U}?'m���`���|�f7)��R���������\��NT������HPx�f�k���%�A%�jY�J��>_2z��b{-t_�����qNx�{_��$����)����O���"}=���'t&��DQ'��I�"������}��D�_��#�ip�9%�I�`�R9�iY��7���G��\�pRwL9���|%�H��y���W�eh�t�����B#��vQp���}D�`>"S���}��,iw�n�U�����c��.�t"����>���y �p�p���kH?F������D���#������_H�I���ww�tbA]�'�K�����gN�M���UR������qRp�v��w��2	���'<ms��I���������A>���yyy�K��B�+R�d�e����Y�;
���6�JX[gW3cg/E�jNRY��RV���R3_��<�p�P�������j�K
�,
����1��`�����{�Y���~��p���2����%��L^b��C�'�}�K�� 5y1�����u��Y������
id97w��%>'7&��,u����^�
�D7��x�����z������LW:�XD��
]��I��6L�a\IJd�.���X~�9M&�s$~�U�22���b�6�M:�Sb�-u������;<bsI�7��D��Y��IQ?��@�f^�8�Cy����c����^�"���,��F���.V�Ahi�j�k�An~����=���E/�����O�z�X6+*�����M����sW��_�~�wB{���������t�u]�6�K�O#��L���{�Nd5�����_�mH���r,������a�:�a0w�0�p�[W���;�$�cx��C��Vw�'��|�)��6��h�8ul�����qi��p9^`$�K��{n_�<���j�R�/�;�a��O��M���Qs�#�����gW$H�=�6�%���l����`��F*#&z�� f�o���g�r��������i�Vn��]n���q��%��E��'�W���XO+���@��G �e������O����D���������D���z�~�����4
m`U�d0�<��g����B�<����F��z�r�`�����u�-7.I����|gE�u�%���S�i�*p����+�K���jy���N�'��u����r�%��u��Q���Z�X��B'�uV����4��� V�V�n����W�:�g����n;+��W/�=�\���}����:�GY9+�%������!q���$���Mw���kk�\3�vl����fz�6N��L���u�Pn��N��=T�7v7��1I���
*fp����XYO���n�%�;/X�gx�K�e��^�K�������n��z�=���l�����\k�&�'���	����y\/���e�����LW���O
w�	aY]���;��*?�h�>�*W�ik��������1���@���1����u����Z����YV����5�u�y���U���"G6���@j�A����6���G�t0MV�1��ndvb�*�:����]|�����
N'�=�N�����cT�`����2Q��<��� n�
keQEn�2W�q�?���<.x�����i:p#/��	q%_uC�*U%Z�n��A�v�Z���O������O���q����<�v�JZ�?��5��*sUn5��		��!�1[�y�A�H�K�6\�
������7@g�E'��4�����
���S�*�\N�-^�+I��1��
��6I�Y���S��6u�!4����Jr����
��U�Z����9����Gl�bX�DOz:12r�(�+���6�m�qY"���s=�S&�u\O��(�����
��~��-��"����+r������t�^L����^�����~�v��A�*�����IE}�X'\�U=v����p���+���z������9�KF��U����Jm~%,���W��U��k.�]�V�V��)s���K�����'�6/��Mf��4s�4���V}�w�/����B���)�vi��.�{$��g�]\3T��+��*��+T�d���5�����]9�nJ9%|]����;$�9~�x��X)����]���U�V.�-�[��',<�!��<U/W��-
3���p��<=��n��I��D�5�^)�VcT��BK�*:����Z��>j@���r������[���N}
�T)��O�e9}2xHE��!�)������B:s
�NA�`-��{�8����*���tu��.�U��^��{���u�rV;!M�������|7�������%�0���[J�C����������e14s��O~�%���G��l�'`�Y����I�tb���Y�*��_�xU����� �[��@[�P��W���r�|%������2��]�t�N�xbR�|
X�N<�)����q���`�f�s>���.G'�����<�h\��"T��e>������o�xT��G^����[z~.��K.>U���#mmz�v��#��B{Y������"�����%V���_����P�r�Lk�������+2��Ky���e{*�U�4���M$}��-=��k]�Am�����e"�������.�u�u 0�j�r�T=����'{P�	<�W!�O�:����V3��Z�{�����o
��w9_O�pR�O������?�(C
�O5�[�u���]�����"[�e��[�����>�i�w��!G�yz����e�	���wme�v��UW9�J�*��c���{=0v=��z�y�Y}�>NN���8�T9����!�C�s���$J
���r.���J���M5�A����Y5<	&#��B��3��L�a�wp����l�o�<e���!�WF@��+��D��|����"2���90U���_�n;�����<��"����|+��m'�W���ua��J�cg���n���"�O���w��yYy(
k��PD�\?��_HK�*>|��!��D�t���P�{��Okc�A��,q���v�)�C������@�v����U�����nO�!�����p�WnN�����C���bN���oR���)|���!p*�ve�����Z�+�d9��~&�~3��%ZIf`{Z~j���}��P2��C/�7������������"@'����{��^��?������R��cF[v�K����C@�7��+�t��o�Oa>|��!P7|�u��G�C���_
s�U�����4��?���fz=|
��#���K=��_�!�wB@���g�}@��
�wr��;]��8_�!�C���>�A�7��
J>>�Bp��/|�*�������?��L�S���>|��!�C���>|�8��1�2��7}���W��?=���
'P��e|1�9'������������f+���B�������%�������Q�0�@�����!�C���>|��!�C�����p��J2�8����������p�@Y���I[�����[C
O����/�%�VJdv&U���9��?�^v�T�a���y�,2XT���'�W��*�[�"�!OUr���l�E/�+�v%��������9�?����*zk�yb.���`�2���k��*!��5������-��������������Plpj��%�U��6���GZ�y��h��?M�������t����W�W�Lz�������2U+����R�����w�R/��/oA�����������q�l!�F�IN2p�\$r{���+j�a���c�W��������*���X�:1r��"����}Lt�z���C�t#`�=�Ob��.�����+�f(���sW*�OvT���S����Q
%�d~�W��+�t�!Pg����r*[)���b���X<}Rb�#������c��^���V�cP�����C����6�uL;�R{	��:����E���[�s��?_e�!,}s26�(F�Y��������H^q���w|&~���|��������#��o�C\Pb�F@�q����~j� -2/��!m��X�lf�@h��=����.��b�a��������a�'k��^lee�(��=�x�-����H���.#�5A9���?�s3���C���]�%�n�7M��
�!J����81H���fa[V>�p�%$0�����D���p^(1�-$�{��$�AYFLlE�;�
�_��me�������[�b���H���:����d??�Vd�cWA	b�"���}x����:L����{�P���?d0��W����b���b��G����W�D�'�+|A���
�oo~����b�=���H�(�IW��H���\�7g�/�������������2�7�=������y����N��/�P2v~�8����x~1�[#�!���ah�p\�[o������(Gj��-���U��co�D��0�##��i�V�4(�g3��7������z���D��7�.���C��v�x�,<�N2rJK���'�(��@@h4������'0�k��Znh���h�=�Q����#����p%v�"��
%�#A�1V�1���'&���7���q�v|�s*��'�C|J�i���(t'����)P�t26/��'7Dc�bD�!,<�*��y[XX�����|/&�h�-��w6���o�����������%u+�E��Ec�o���=��<����:��n&^���F�6�	e-���%O����AH���^Tcd$�����@�&Q(���.oC�;1_N���������~7t4:����	-��_�O���k�/�L�[��/�]������I����h(.�a��)���������2��z��.�o:X����8�e���w>4-�Ce����[1�Qf�������X��@�� 8
�������-�-����R�X��}���h�O��<q4b����a����.��J�wL�F�o���0/)�z��q��R�C��a��L�u�S
�T:-�c����f5�g�����,�jY}'~������>��&��!}[gL3��������cy	��3���M��z4M�!2+o�]���>U���'Pm��'sH������X����~��)��Md����q�J��?��L~��2�Q�`a�v5�����D<a������kl���0�l��>j2�o��ga{a���rt?�-zT�O�����_�F}�������
E��C���3��u"��?C5����������()J����079�����]�a�_��K���e�����#<�?e
��v`���X��$������ c[���b���e�ET�$��NA^�A�KK��]�1��$����g�z[��tp34h���u@H��1C�
�K��?0
on�D(�"��!K�������5�l/,D���X��2�o�v�i���m�Z,��!������l��4�{�a��"����qCca���h�jd/}o7�n��#�a����N#�B����e��~��E�#,�0>���hufg���pr)��'cgS���	�\Z���q���O���tCvPC�T���w���xq�#��N�d�c��M���-<5�)��j(Z�`'�����2��c�v|��%�_����itk�za�Ur������o��u�����0����������ph�
��<��pY;�;����bE�r���
����!c�����,���l����c0�[�b���x�3;tn�n-#Q/�����������,��!�L���9(MK����E��V��{+�Q?��:���d[A6l�vcC�Q�\?k�}�N�����
N���|�Sx�RYWg����]1�]>uY�/�_�9|��*!�MB8@��3���x�H�O��8d{��d������|���Z��E���bd�^��oo�G�|��GdD �s����;���6����&
����v���80��������8J��f���n���v	1�K@L�K0�Y"C����l~�
�����=��a8�|���a�C
�����UI�
���q�����[��$�!)�A�u�+�b@@�.�����.���D�Dn#&������6&a��D�]b9�\t��7K#�v@�8�2��E;�;������3��0�Yf��CpW_���A?�����2n-���Q
�������5X�}�V3\���H�2H��h�h�[/
1��X~��O!��t|�$����c��fn��X+���!}[f���Kz��~q(�����=�5=��0,
	�8�@�����6���ln�wc���~E�����[�
���]�?b���x�F��/���X����kR<&����
�d��u����G��8[>m��@$���A�
�G�"E!2V?�e�S�wp�E{�<-�����V��-8�c����h��k���sUn�����x����S��[��D(Tl$�n�^;����d�$}��f��T�Q�3�����(\�I2�)^��Nh��Qa�'N����E�6�$��seY�9��0'i�C�3x_�P����G%i�������0����x���Q�Lj>���G�!;3�Kc���u��@N�����uj=�������Q��
�!qhsFEU�����(���W&�y�v��s8a��|���c%���.�������i�]>�}���F�c�V�Q���t,��*�����bp�L�BO����\�	�5�����@��P�X-��:��Oo@��O���p ���������]�i�yh��K`;�c���1��0��A������C�a76�lr�l~P1��l&~������M�Z�������3w5�J'L�i[{v���Kx���p�����F����e_����8{���w0H�������;�������3e����Hx���3$o�M&����S�����/�c��O�_7���7�I/Y����������(�(�n�IT2p`�L�h.����_��1��%a�����C��z��h����CL$��=�X��o�`��|�/���G}���:�r����_����%���lq����*�tQ��Rh�N��O�l�\0)s_���o���~�����	�WvGw-�g����;�-W&�KCar��������'�h��f2m."��@&Zw-����WD_>�ew?���&c�C�puK��}7�@�s�a�G}��������6v�f?������^w.b�(�Z��i1vx4�}.�����kO�,�v�x�`��w$�y�>�x���2D���s�^�qyYiX0���)����-S��

^�������p��&�j��VM1��)�w�l{1�y6g�DK�'��Y��� ?4��v\;�J��'CZ��bl�xo��o�2%�����oP@{���;.;#XL����.�5�����\�_;A��BG��"g����br��pC4��+�yUlK������<��d��(-��|�U�5zJ����j����sW��3k*�"���0b����ce^�al����q_N{o_�U25{�rE{L��������x2�c�0Sp�;g�j��/L�����'h�P�{3����Jx�|r���E,�V������q-�V�W��Pp��.����x�U(g�[O�; ~�	��p�l�Q�:#�8�a1��7�������qFTIql�ww~�/�(��|�R����q��31� ��$|r7\��d������x3{ob���(�S��.��<#�����d�4�B� �w4:EU�Y�>	��Jf-,%??�x�'~�kla����1����9a��Yy6��m�Ws�����CF�~�?
���FZ}�E�$3�G��/SV�ExV�+4$�d�������	9�����1_�v!������C2�b�,[t�����9���y�Oj��i`��2����y���'�zI��F�-�������l�@�)G��I�LrN���G_����������VV'���C_��#"����v�]�<�H{j3<M�M�
va^_}���]}N�����qrZ_<���P8�V�r��H��BX�;�U���WM2X�:N�(�L���1p���u�������4��o� ��k�f��(���n�����f�R�������]�&���*OZu�/�����Y�zVi�t
[\�}|��s.jI�)�Ry�����+���/��O��
���JAc���P���Ob�&�jS.-���W�0bFi��b�s�]��o_�3�z���e@���(%|4/aR�d�Ox^I@X� ��g�QZ�s�����,�z1��5�9WB9��fF��)��u��]]5M�����\ywlaQ��*�����
r9'�X/%j0��
�h��������X�u��F#����]�v���H~h^[����������Hh�.i��C_��Z��Y�O��	_�U�6�`�����<r�����1hK�,H����y����zh6dF���N�w�IL����R�5�`�'�s�=+:k���x���,�����;,,[T��_&'O���iky�N��J�B��~�wc#]���%�t^�l���M����q�Z��I����%Y����F9���,����p���eY���ZVKV����_F�\��[�*Qx��� z
>n�
~��`�_���� ���
t��N�o[��wOk�]���W>�lrT!����-<���L��R]�[ev��J�}?|����mJ]�Y�?n������0���,\����	�K.���e���`d�"��������.��e%V�,������qe��x��	��)������k�Q�/1E}��-q^�Q�%���`��#6��Y���r�C()q`��b���8�K�����J�����$�������l���8����o��C3��;���<.~�v ���~����c�I+�!��C�307�pza3���9�T%D'����Y
�@Jq*v�4	O<v9Zs@K��JZ`�����k&�-n�����(
��
������B��<�;� �<��mzh�Y��#�{q��'�6:�oN�7�}	c7��.�WD6g�V�
���)X�]s�x;���F�`>�d�����e��O�����^����Z[���������K�S�s��p��F!�4�v�Z7�lC�������{]n/��,�����kn��;
?:8�']E	�l(���qS.�$�m~PH�]R�I7���f�{���A�h(\�C%'9��3����EI�s���[�EKn#Q�@.�i�1O���g������l�G���������p��w�U5�_v!��man�qj��
z%��;����<?t�f]�u��D���{�7�p[�\!g����O�6��nN���_���n����1�#Y�)y�LrR�������ARYy1:]sz��Q�u��d)u��)�y���S�cG�s������������6�Si�%��id��TN����x�/I�N�/K�~�/����RSQS�K��n�y�BI�/��2;e��E�m�>
h����"�2~CVf)R�/��Cy��\�7�9����~���������9"<X�M��cj�(����h7�7"d�^�����������)q�����!�q�>�[�	^?l����J&Kqe ����(�$U��8��_m3���z>i�6K'	�3q4u^r/n���,���6i�V�s��i��`�:<��'���m[�w?b>�������v���L����G��S�x�`��9�7���U���<��[:x���&/v��x0W���rp��
�%�#��x���������x^���{_���q��`�V�;�X*(������l�s~����\�������Ebu` G��#~"�a�\���3�q���uy���W�9C�������t}����XX|u����$�����Y��g)l#�O�Rqs�;��^�v���� ��%]`WV4��+{bd���Y��!-�v��v	��[�Y�	^<�A]y8��y�����iK���I�e*���C�*rX4rA��g[���-5�����B��[2e2���s���h%a�B��-,�d�����D��B�!m��!�\�*�G�y�[�
�j�Y�����b���'���is�[lB�5�s�C�:�YW����%<L��i������@��(�.��6�FO���5��������ifa�����h�pw1�Y�����Bj���u���{F�R���t�e���30�I�c��_������?��X�0h��Zb��Vt��P�q0YD���Etk��Ih���H�s,��Pt�@����U�����&m��m%$��������_!>i�#�}Ma��5m�}Dt4��o+��>/u���N=]d�M�{��{��������
��T����(rX>NZ�����1�6D=nOg���\afae�����G�W���V]u��/��I+�]����WU[W�-t:H�Ky����������Q�@C.1���2�%G4�x�X�������3�&���l%�I9�d�|)���A����B���Ril\�_+�
�5?N�,��-�K&��G����E��+O���5�Am���n��l���%����$
��xXq�s�Ex�i	�`��U�1H-e����_��h��9�_�S�tS>�����}��WO���~��F��XH�0d��F�C����a'��k,�tF/�*�:��;�~6c�����F�E����2$����W�
��/��c�,}��~$8k���'��c�W�sBf�Lm�l�
��CA��ewW���-[�9�2T"�������C�-�����`T2��4��t&�������+��FUz�a��8<��M�|�`�q��c�2}6s����R�s��b���������97����w�.��`�E_�
��a��,�
���?vz�����rEj^mI�=��X�7���w�d��\��A�����z��i�!;.o����0������m��h����<������s�a�,<�9��,y���l��H��[cG�A���
�2[������(����7bK���@BT
�z#��f(f7��E��M�lY>��E����B�j�V]��g!,b8�_�!M� ���lS��?Dh�F�����b&����;��V����������f�AZV"Z�B���Gn�?�o����%�:����+:������E9>������SC�����HY�$p�w�&K���vc7��`3	�A��;�#�c��t��6C��u�8��H��G8�1��[]#���8�^f��B[�rp&���H��������9�S��!��������X5��s)�I�Wm�p��h����d�d���J���8U9H]eg�7F]���8
�O�d�|����L�`��jX���x��\w��9��X�=�a�c/�
g�t�"{�""�+�8j]�s���0~�I��C��G(�#I��1��f0�p��I��QK/:H>3�t���j����4ht��#�Y[��$��wC�6�Qx����F��tlk>@�LhDN�Nth�����'5{�op(�`*/��e���_��r������
��FQ�D�������0�<�*��x��[ii�g{)G��C���^����v&�9��z`2����s���I9Hmy.n��H����uQ
�&Qi���'��p!��mG��$�����YA�c��uGHz�R+
��L����8��+I����H�	�[��z->v:����'��h�/_b=��#%���(C����3o����<����g����/���I$#�[w8�����^h�����oO^�-}V���H86.����Ql�	��;�F��a�	���s��g�($��7}3g���_�U%���H��Dd�h{�����\�R�A�(D����L���2a���.�0�e ����P�R���\���	�D!�������zh�m����A�zu�'�2����)�|��y���
�/D��qqk�b]���f�O������Jm-��GG�����($���7��I�-��y�qp�\��E�����I�kqn��
���e3��p0
:��};�=��m����:���[�+5%-�bL�p�p+;W1������r�{%�e��$��h��-�o%-���]Xp,�����6>�-�����!�X�!�_H��_�3���������u���k;�pV":����i"��9+Qc�����d�B��dD����9a���B�/�A�������\�i����
���*zV�)������K�/�'����9������
���]��=�X����wG��p�~��_>A���/�{(xcT�f���-x%
I���e�������[18J����+B:
��m9+�[�Y�k�[J�fc���H�l�>X_�����#}�a��zz0�6�>�2����s"i�b�����z'���(�A���h�}|���p�Ll>x+�K���e�*��)�'E����)���b�\��c�Z�{�}O�ZX�!j�Ql�a	�z�f�(F���H�c��3��E����/���.�n��uYMp20'���M9���Q�`o~Ft����@�2��s��}�<k?��+R�t�V�Wg�E�<p����MI���8r{�F���(�8�����x�������c������kl>���"?�Jm��e`gt���`F�@Y~.
�������-���`�J�����FP�@\�������f��a���\���{4�'����G,M���nh��-�1����!�l)X�s�O$ �MW\���{1�x�!�������vO��6g��3n1���:�	���%��QLvo����yXo��?q�N���>�0��1(���c��EHmu�s[�>�2S����{`O���;��od_����O����rm=r���xp!��8�C4}���.Bk�W;0����J�����r��m�6H�m{���b�����K33������
Y\e��Gs�N�
b�++�;63�tk�	'Yl���}����l�����������/�
N�p�OX��z��):v���i���=���5t�R�vk%6h��#v��e�3�uUd1�.�[������H��j�=u�4
#N������dB����t��R�j~n?�m��5�\����m?������5!��E��@IDAT�e�����q"��=��\5���P��'��������F���_��;�h���~�����sF�S�F�������)��u�Z�����Pd�G`X<:��v`{[�	6��b�����+A/�K���x&�������p%E��h���1������[��|�
9�H��C��	UZ	#�mB�!Z�[a����w,��7`�6v����G
,mTp��]��M����r�O�r���>(������3�'$4���u��-A����O��-:��\!�!mpaQc���7�E����+��G��������^dg�g�
P����x0WX������$�u��>*��O`���]���n��[��������~����������/�/?����a��~h�w�D�������;���>�Z?%[��IK$��W2��G�����H=���m���
t�Z���;�a�;cd�pv�����\����5'C�M�	f���g]����#���@r{�]�>pf������Q����<D�=*g�Nh�v	E����k/��M�a�`��
�8���~�KG��}X��>�69C�6DvH����b����E��GR�1���l�(�EI ��&�Y�N�@�@�����h�j�7�?k�{���#���r���0����J5m���f��{��`�qY��W,NB��AH���]lW#���R'F��.��)NY?��'P�6����8�^	:���Wl�r�����V4���P�5������c�6N�3l���U��8���w^�'������dl��7$3��	�m�8�?�4]��+���^��������U2222���B�p��������%�&v���|��2�2
���Xa����
=�vE�6���t�
������}t+P��N�}A=�i��o��}��2k�*�lY������OT��&\�;
#�q��,�[���>�"`v�\�
2�s +�d�sp<�^xA+D3���%d2����tGr�(S�1�(eC|��9~'�����#-����>I����7���������3�{�(��~�����@��2$)�G�OmI:*������m��}��	����Gp�����c^�h�N����3/S(����e�c���1os1^o�MZ-��G�t�����}�-:J/��/��E��(�k+�R"P�)�	+�4%�G�������@F���h���8�,
qM���
��O������`�bt�||�<G��gu@aN^�_X���w�JE"((������`��,���g�h�t�`DG���z�e�w�@�pa0o6��r��i�#	����o����w9�,�����0�O)��H������3qI������)��UM&�A���L�\�@TIC�B9���Nl)������<��Z^b�7�9���Y�p���zoh�����9I���4]��)CIy6��a���%�F��<�������4:�%Y((9������������:p�c)�d�v��r�v��7@�F�1/������PV�Y!��Kf�|�/>�;vp7����$KG�\��,|��b<rf��@�w5���q(���r����Q�fuE�Q*@���X��D�[<��5G'6�������7���N��?&<����c/*@a�q���z|#�wm�����7;5@	~���D@$;O�y8��WBP��U����!��O�ys�-3�~�8yk�~�{�>�;��-Ql.H�R����v O�VdE�:&q+���Y����t|��Z�RUkJ��~�5'v6�HE�����$���������x�4A�F���a���G�����lN��v�g�c8��>e�EN�|<s�������1��78�COY)�<�(�Od�����	��k4���8�T��#������8+<D6(E���d�l��BZx0��b���{�mj�M�����$��6`KJ<S�!��4����3������nC�����������������9������f�J��}(]{��
|�h�f�������0~o���w��
����(��k|�t/L��Z�ppY@.�C;�����
"qBBW	%��6o�V��=��S�d~���������+Z]�Ctk�P^p�����%����(c�_�����gQ��Hk�M(���=���V���"�����L���$~Rt����������BC���
�_p(J�+��QG����_���_��^����
��\}e����o_�]�^��^��Q���pb�n�x��6�:�����)�A!��:����I��?���=����c��oG2)_WiE��� n�"Y�K������BlZ�z
A�__r��&�FH�8���>�f��E�������������I?�RN���>Y�����"8��RW�Z���PY�>u=�6�w����9O6L�C��������w��x4����P
�-���3�#�/��������������	�X�90b�^�����-W7m��
�/��xT�Q��>�rr���DytG��������c���q����i��#�M��g����	hO���eq�~�MZ��7=�`�L�����|�]g,�9��s 7�\>�:��
�8X|��i���H?������[��5TSv8�g$���G�u��������?����z���d4��/��2�G��{ i�d�A���@���t�ex#�_��l����{��x��f<���Kl�m��`wo�
So}a�^�����r������m:����S��j�|���E���8���H`�^N~�-|ros<8r:5���S�f��|h��d��E�h��|���������+��d�0�����B�����0n�[�tF�t�?��������i�htO����a��X��z�Re�(;���){>���;�E[��XD��.����������{;�
����S9M���N:n���g���v�������>�-4��HGPen���G�6or6B��/!����*�#����n/U�������:��$�>���C����������]U��#�?���;{�b�v�p����L;ot���y�D?��:�/�^z
{�\�,��6���F��2���6�fc�8���0���Hc[���9����W@���� WZ���!u�r,��M���*j�`(S.�I_i�ux��	�p:<vq`���0��1�m'\;k'�%F���u<K�����Q����[Q��)���6�������#���s@9�v�����2LbkJG[I�qkW��������kh��4��������'�`���?�s8b�X�������_�:n{��b#� ��/ei��3-��/��f��p`2��8��Z���F}G���H����������?@��#��&%�}U4�v�H����q���'����'7bz�X=e6�=4'���ms�`1'�l��5�j�=�����B�d\^=�/g�X �j�����H�����1��|�����-mT4���(=O�����fTe�L�
��P��"��Q����a��=���GL��_���(�jE�"NdI[��I����Z��Av�������\������F4�
l�R7#}�M�g�T\0�Wd�"<�����������8��Ql�m�[9�yO���T��q�"#n���J��G�kD��(�6�??�)�pQ�6�21\�6��~�P��l��|���sw`��y����{�l����s1avv�V2-Z���\mql&�������C�m����V�R���V�q�}�0��Y��yx�V,�p�]t��9�Ql���V��U$�{3���%#��R�9m<��6�.[����xiWn�~
��_D}n���cg���F��[p�K������S'���d�{f��['�����p����K����C���m�S��{?����o}�r@���e����Nv���0}�^|���������9����'86e��	���@������'2�`��7b�g�^R:-OC��(��
6�~�Qm���@N��x����7��
��`�-�-�l�Q�~����s��n-��cSN�s���^�`>~~h��}�p�!��b]m��&�������9�����`�m�"���8�|9�;���WS�f������ ���:�}y��?#���A>�~uon�}�:>�=#���u[�����KY�|���aWLK������W����m���E|��^�[����4��X�����3|x��:p<�%���C��|�l+�@�B>�z�,�|�������T��������`����'��/��ym�Z2�v57(L<���T�.��9_��|Z}�!UQ�J�<�&^�p0�Eu��#��PwM\�^�$��g(.i#���NP?\;L����<',%��J���J%oP�����j��},����$�)��G�;X:��*���8��M�0�T�S��x�����"u��$5��gO�V������*�o������Y���"�L�\0��;�vpR@��������<������au���U��96U�}�;y�R��e�W�}H�q�����J��
�r����!5�zS4W�����r�L�R�r����Q������^������Ru��u�W���.L3T�c�z��K�c�������
,4&������&��q������+�����Z�}�G��g���JrV�+�W	�^��V��
�E_������Z��d�Fp����5m���6��oJA����oW�S��nRwl/U�u!����Fm[���D������_f.:��u��,�i����q�����w��T2+<��O��{?����E������]nT���T�_6P=���������exqM��
�����:��bw�z#'G��Qf��*s1�./+��_����T�#���>8�rO��lf2D�S�U_��R�}�;�����N4�NR+K�o�����qP-y�:����Q�W��j��*�;�V�bw���W�BL�?S�&�����
�%r�E���$x����~M=S������"�J��Z4]}3�=�k���s�5������R��[�����[����0xV1������U����{����xUE�?�I/�{ ��&�W�""���D�a���PPA�R)z����P�������>����*���<���.��s���evvfvvf���
RTf����\���+'�xNa�
���,Ve%!�����(����o�;D�t����"t���������6��OvW?�������_�]�.��5_��.S�e�J�}��X�PO����^��*K���n��T�\�5I�;������>J�[�*��<1��Ja�U��q��"u$'Oe�|fTg|J�yk�RK����~��"yj�g��-������C������,�{���xnA/������Y��zH��[j��K*�Z��������m+��V��TJ���Rr���oORC?��.�79�*�tLE����r�$��./}K}E{N]�N��(�g%��W[�����UoI9����"���GK����7����-}Y�V������.�m�=��x������SHF~�J�j2Z��7�S�yKf]����w�+�%�0U^^\�N��W�0A=��N�?��������,�y���z�1$���RV�U�����Em;�)1KP*z�<�������f�"2X�����	��7{��j����o�P��mP���UV
s��~���z`�b5��R�E�Qy��m���1�����$$���2�mk������
T�\�����~T-:I���N��z�T�bd�KIV����^K��1UO��W�0?0GmK�W����������7c����e����z���_�N=t I��j����7�h������E�����f[�����7�t�����P�o�Rxz��$�*.T����(���.,xQ}JUH��V�)��8P������5w�E�����fm5n���9o!A}Im}{���VLU�����*O�U�FA�������*F����B�`8aw\�F��@�.��f���_�Q��W��N%���z��L�������[T�^�k�Pg�R9������*.5�.S���p"|��x��0L���H1I�KT��g����o���>S;��);���S/��9������v�7N=��U�������@\���YM�m��e[��Y��T����3TKi�Oj[���Py�U�@5��@��;2~�!��&���6���o��f���@a�
u��D�-OMP�s�����/cU�1��Y)����;���s�z�d:���4�b4��P/����l8�v�iy��)+�-j���j���j&e��2��e���>T=����}�zMp�2�����.�`{]�U[����������j.a&��>�f���J�������u�V�)$
�W��'��6P�����(�	Q��T���
���N&�T�gJ{��7v�����;�Ps���6����5j��������*�VEB��MT��B�OZ���B����o�6�S�n�u��/�5���j��;���2�����)7���<(�HRi_A�||�Z�Oj�cC�D����O�+�7iI���m���6e�k�QLwc�$����jvwj���zz��k�Lt�z}��_%3,
Cw������.k��x��w��������[����RMz�.�=�;xM����|�L�N%.���u�:��k�?��K��NL�:��O�$����k4,�XQmx������C��d����*�#������V�D������1�w��
?���E��M���p��p����W�g�^U�.^��}��Z�B_i��M������3V��Aj���rmus�%9��LRK�OT}go���&���@:+Z����8�S/�8�I���q��������'�����^{9sn�F��H�����}S^�C����^�<��:4�������O���O|�^�����e�U���B����K^Rs����+��U��L�#��K2�glW�i|������j��'���k�Te��:���Ny�A@^�,Lc�F�p�����<�9f,F)��~�^p�&�9���J�Z5G-l���sGTn��TVX�NM%_�����{��@d����*�U����m����%GG���U�Y��
�w�z�*U�{��s��������8�D}�|�[�����,WgJ�X���%/�������V��{P
Z����e��*+Ex��|����v4��_M�(�2�*�R�&C=�)j����^)� �����P�������C}�r5]�<T���T��s��!���+j������?P�F�R�#�����*8���}�z�yT>!T|F�$|��P�".9UEL���.�!�3B/���.���t|B����@�*'����e��0�-���������x���1S}�����H\�6����>����
I��~#_��[����L�_OV�q��s�RY�����R������H�?|�1���Ms�,?[�
�j����e�5����t����}�����*�z��������UXX����+��d�����.��8�����y����<����He��w�SG�!2*��9�_�am{rK�.1���N�C�%���\����Coaq
������/�B�W}����Fl����������A��qQ��%v�8��{��p 	��y�X�E�`9V�G�4n2������a&6���QgNcI�k8w�z"��=�����n���(����W�k,������a��s/���1.��o���Mr�p
G�u �����)'���e_,���B��SVx4�5z�8�'2�.�^w��.�U��dJ7a���Nc"�"�-��q����/_��c�t���d��8��j(��[o���O��i��y������~<�h ���cegOq�7'qn�EtX8�,�������
Z��2f�@��2i���P%M���d]6i�1i�:�p���=��t
�~��8�l7� I�y�#]�����h�H�XZ_�KJF>k$c��;���������+�c��ZSy)rX0�(_��gH��1��/pm�a|�tkL���C����t�2@l�_��F����G� W��W������0��������q��x�	�Q�0p�y��Eb���{O}�M����}����N��w���&�|;�s�u}�y�����N���k�N�O���k�&��mQ��7��^�R�XP�k� ]��U�t��Y����vq�����@pk��S����4�6�H�q+F���I�����o9h������_�����x�T� �������	����b�#�+T>��E���`�+0��]A�
�
AJ�Z�[�c{�il�_��8�����Y�Ui�~������c��f||.b���X��%Y�T8:��� ���2���m�H��#�~�v�����v-��y�k�t
p@#1^�e�@�F��0�	|G�
�:tE�Gw�����_�c�%2Xd�At�~�o��~�;*y0�$	�PBk�2�y����e������<6�v5���m}P�nX�>f���"������L�7��.�*������F����n���N/f�%;Z�UsEp�t���{0�m�Y_�
��0V����1�a�
���Y���.C�3��X�E�Z
�g�c�(�jkx�>����A������J5wE`R�P.��[���?����f�"1(�i��j����������~���l2G������"]�O�������qq�����$�[�	��F_��A���x�l/,����K�W�����a��&<Ds�
9q������
�?.�@��I����@x�'�K��R?�5q�����d6�C��Z��a
O��F�4S���A�NE�A{��?u-�������E~���
E?�U���x�Vmc���
��'���+c�#�k~���8T	o/+��X3��1`�����'4C~^9�������*�e�����Lf^�Z�@��V��L�
t�se!!�!~O����jx��o��f����"�������
}|����������;�/�����V��A�1$$�,��#���^#�W�i�t4L���sq<�x��N�E�s��\��h�&�'8`�I��������ip�cu�<��<��t�~�5a��������/����I���x��P(Z����A���g��6C� ��P��*���TFt<�U���S�A��X@z����Y��p�!n"�Vlq9�?i?	No~����h���Z��#c�g�6t�NLc��W��Bp��pL^5�A7%��#��^��^������������f���&=:�~9]6���:�z/+����:��K����}��hV�'����f��P��
�U�S?o�������axW��%��B���`k�h����{
�U�4�8A��E���G]�NU�D�uD���x~�=�n��P�JZ32�-m�xQ~D��X���8�<��n�%/�oj>"����X@�����%)�8�y'<*6z/������u��3&kiS1���r�.�-�u�E����=x�.�	WZ�K�*��������K�1�N��,h}NF��gvuPz#�+�`��c��HG4r�A8�R����S@+��x{7���/y��:V<o@������KSm-'|�������6�T����7�0�H�E��E2���� ��\���N��V���~#o��n�<=��n�����2�#�
zsr KI
=z*Z����O��O�C�KF��K�I�,J
`�v�QM�d�@�;���w��S��.S���)�R�����8���k����*��� $��
�����p�gO34�����4m:��������!0l�����XC�(�qf��
��u��Z���I�	�K9�������Q�l�3p���P����<����(Y�FCI�F�S����/��CK��!3�^���4i_YK{���.��������H�*I�����kI�x^�95{�'
�����p����H*z|]:z��sH����vb�K��������*�8�G������[�Fu�]-��������g3v��^yT-�����Qv���o������V��G�c����g�����p-'WzL���z�Gt�f��N3����9������7�������rO+�Q\�]�����[�U�K���IT�hKgq��t\���\�(u�������WM#n4��>9t<k�K�f)�)��1w��cA)� c>C�����S����rt4�c]�A���t��P��*�ky?�!�^���&�v���9���D����L��D�67A��c����
eO�#<
XI��s���x����>=�cM�+K��y�k��;�,��Nz��G�?�S�g�O�(%-�����4��.yJ$=L��J#$o�C��|i
z4�o�o_w����{�d4q��%dV��x�D<��8��W@�1�1�.�7]��8K0���\�(���96$�� ��[�-`9}ACzT��
���N��'���@@���LU���}�_�@u����#$�����za�L����?E����@mq�c"=��<H��l���N�p��7����o�*�6!��T�VK�`��Xh}Nj(R��0��$|��~�R�X������q�4��"�B�<�!�pi�Z�v[���E�QR.��S���u�.h��<��-�S����T��U.Jl�mQ8�i&6�|��^#�z�Zp�y�j�`E�l�yc`������H�o����TD_�F9]�e�J��������%6��+��[`�u4�F.������a����9I����)�����8�r9��;�6o�{�,�o�����g\�����'p`j�H�����X�.G�t���+D�����m<�A�F���'=������G��'�
e��F�xmA�K&w�$x�w�a��'�'���
����|X1���W��a+d��/�����"�}���<Q�r�Xa��~q����%n��I�+����������<�+'�$�{�@+<d]��#��a����<�1<H���*���u�����t��{i�wk�vA��iCWE�t�Y��������#%�IH��m3���3q��F����M0�������m��c�����,� ��������|�����G��1�~$O�6�.���*��(��^�!�J��\�1NW�FCn�Y�[x����oi.�f-�!�>���uH&=�c>����<��
eeKW�h��66�M�`U��n�����joOE�=�����N:qk����`�p�s"���S�AVb6[�8�b����T��)X����S�ny��[2��bT�*�S"�C�������,��S� ��n�/��/z)L�� 3�-��F\��Q
��P-Tr����Z
����y�8>�}}�OC/����b�-]�D�`N��_��oVR���Tl���Zp�Mk}��-����[�"&�"r�d�I��1v�z������'y�|�N�{�B���d�q���a4�R�%"*��1%�7H�����w^�e�������.0���v�=�$��`�D*�T�Z;*�R������-	�#�b��4\It��������1��,��Y��;� 6g6��7O*�f��~�J��K�P�A�������B'��q!�mF�������������1XnvAH�$�s�$=4��}�W��8s�n����#������
�������J^�1n�p �{P������:����r������'K5�lC7H����c�3�}��&�C�;C�U��`���qw"
����K��e�o}ag<�H���q����G2��������
B��t<�-�#��.Sm�N��f�7�����rn���$q�����fM���-LE��^;���e���n�<!�t�L��$ �ruBE�=e�K�/ ���)*�dk���5D$[�_+�ZV�]�4�L/|.rf�=�=������^j����U���n=^�o�v��kM���������|���YH��L@� r�_C�uKx�y"0�+L�#1I������5?M�h�%Y�I�^.�{�������+����������MP���	nQ(�OD�����������v<�y
�3<�W�B��C�q�y}�)�s�
/g�,m:��5|=��M%C���R��Q�
��Q�@�L�`v�pp���K~�o�p%���|��hgZ"����Jn@�_���0���9���BJ<��j1
��?���$�N>���������&�#fNC�
�2YD
tD�>����B�tC4��cY�E���
�j�F�R(�����,F6#��_��]��YO`�I��N��G	CN1�}#�n���R����pw���v�}�j��:����7��/���~��k3N1��_.��W�����aW���dlrjJ��mL��HE��le"����8��|)���X�H�	�1E��o��lzw.}�9��0H�Tr^��7��'4�(�`�j��`���?�tc9y�r�p��3�)��-��d���]�2�&1C�)�P��'k�ew�)���Y���$�������q!�����$K4$�2z,�1�j��[�}��J���.����T*O��q�"e��8�������RK�nmP���SFR3�G�=%�u�
7nYr�����|Z�{�H'�g�&�=��O�)�]A"�B�AKM��!x\��������S��i��F���ZO#�/w�C�fh�M�$�F���������
a��4���������D������h��p+�p��P���c����^U�u$f^�F��+���L$k�e��VXd(rN�L�%���2�5��M��1��6�Z�L~������������ �#F���l6�3^�A7"�*�C:��D�v4fJ�A��P\���@����cq� ���<�����X|	�M<r��/����<�f�*J#:��i���@�A�@ea�6�"�@��PY��=C��������t�>[@>�X��wF�y'=>mt���.]��1�xyl��KZlt����O�L�o�u�W��f���Z�=}x�)���pv�#cg�����������cAXWz���l��:�r�p`���	$$�I\��>K���BN�Q�����l�Cm�����&�iY�-c�4�(��chM�X�Z��64R���s��� �vu��G����&���a
�p�4Y����h��<��/F��2<�7��sr����m�Q��uSa,
2��))���J�D];��B���t7<�8cm��E��{uh�4�w�R8�#(o�[S������\�'���"��&����a��Q;aV�h@Y���Y06C�5lU�j�fn�������@5,7��$���2"cp������/�<M!�GS��%���qa.�|J�`���4l������$���0��H����z�_K�tB��w���u��� �oV
Z�j
/�B�X\�3��o�����p�����P�	�76�������t�&q�
ZD}�7��`��1���[$#�0W�RGG������X��D��G�R�����x��m��+9��zs��JJ��J!�s�N|0�D6��\��.�G=
�������l���N�.��sA�pf�h��peWA������4�0x�7eTuq������������(c�������L��]�������`�E�
�.��\����0�
�5��R*ZZH�����3�{D�p������:��z�k/W2�r`��,�x��(N�Gz�%�t�����@y�S����YJ�Y�]O�����
Zk[�IX2f�����N/�}�e�u�b���DOG�*�	�����hC)S��|�bX�d�;+�����0x�=���
rq&xO���/�7x
�?�����|d]��:b��i�������`�C_r���O���
�����G�pa�x��x	��>��&�DoZ>6����:X��a����,$��'���NA�Of9���m�[�g�(Z�� &u�<�fc��J�\�\�����x���N��`��o��5��"�6j,<�"���M>�1;�#��N0���]��`d���g���GD�52�z�%�V��!��%lxb�ko�cf2�����rZZ�RW�O�>g�r���z������6�nXE�R�k��Dz!
��=���������4�t���3WYls��A����DG�^�'�#Q������^�k�����=���� 9�Q��Q���B3Z����k�+��ce����{��iYZ��*�b�Ca��Jj�x��j��{�)������
��#9����a�z\�R������[�����<�QK�y�<�u�q���,Z�1c+r�a8��J�B�M���������������2�9��#�T2Y������h?n?�%jsj�d�BE�4�k,�������	�q�{?���]��&�����
S1f$=�k�*�er�+=q���-{G��&�/��� ��x�������`>7�@���$��o����w��������Wp1�;���S����<�O(�S��h��������`R�
x���d&��B#oG��J��6������C��1���X��1QOb��p���:f`���[����T��tF~�w=���x���0��[��<���q��:�z��?���V�(�����X/r�����Y9$�����z�V����/�@x��">�%�$�kG�O4&TRqNfn����L��x��K�9�Z����c��'kk�Q�*]4)�\��m�������0���q���){�?/�3��V*i��
x�-`���EO��58����{��2-0�j*��<tY��Z��<@	���p�7�c��S��M�V6��*i���G���/*i�Q.��yx��B�5 *)��u��k=�O#��}am�]�����E!{?5������}��V�\�S�o�l��|�I��7�����}n���@�n�yn��O+�LJ��pdL�fN���b<���}����Mm�@�Mt+��p.�C���FWj���
W/�g���Vm^��o�0Z%����-Zp��
��e���(.���dV���������8���������	x(��H��}5������h�T������vq�J�d"���z+�6�k���oF��\��d������?�����GY���6{�R60���
�7]~�~e���^�pnD�2�Z�
Rp��O���R���2�F�8��Y8��x�KL3�Cx���u��
�Jhy�1��<x�O�"c���1�����d��7R�<�o�U,~%0��Mhf���O��6�t+���E���k��4�����F�OLu�Z�_�zd���������B3d
��:�Bq�2_�eq�SAe������e%E�`)F	�%���l��[�$9#LHN�������'?D�a�$7<=�<��������������u��-��I�����oAo�i�+��r�Cy��B%�?��k2v���/����R����wQI�d���q[�3�����)�<i�J�t�F�x0k��h�T�OkE�7�-�hi����@��
a�\[J��0��VI�����"Z�$��7F�/!�c�e���`v���z-��oe����e�?Le�`�����\N�?1���<c�k\��"�@���}Px����sxB��u��@�5����J�aU�MgKU������'[��>��cy��.FG������6����9m�k��r�������r�;��Z,�����!/������tTV��W�e}���#u=�2�L!kKj�����g5���������������\"/\����%��p��c���|n�;���c�]4�k��Gb��(����d!�r�����E ���z��qbmo�h��mK��#�UZrX5@��'e2������v�>�?����-)����V����&���l(�]��=�'�����o1��w�_�����'1}����Pf_�\�Z��wY��������
��2�����+C[z5�a���R����?��b�d��(�K-��UO�a�E��x#�6qF'GQ���n�hP4�a��	hG��z�.�u�
OJvH�aw���w6h��y���f��08L��-��Pq����z�Z���
����{�(��6XY�h��?|a�0���T�|!��q)��t+�j�zB�`��h�B�DwFZ��sg&%� H�����	���e�2p�����\]W4��w���UY������=;cs�l��4R�m���Z��w���o���M����x+@IDAT���P./�K+I�������?o��)�'
�� 
B��L,���n��
�����x�����1�X������4����S\�DY���>��T�^Sh�l����LT��������YL�}-�
H���a���s�����H��4}���'Kj�'� m�'�P�v�!>h�.-IHi�v���{%	����qG�`�	��gy���������J:}����mH\s?����o�
������J-�����>�AZX��@��f%��zw�Ov@�v,� �-�D�X�os��j�i�=-���B'�,0���8�����(�������/y�����bZ�5���F����e(������������)��Am�L)�_Jl�YZ�C���,��O�/?4�N�/�����%��=�����X�����cb���"��$��L�����.~I�w_��^ip���xx�{���AJ�L����	M��TX�q�|{#F��n�1�y���c��_x������+��-F������-���Y�B�U�V��[��[��<P"��m�`l_wL��w��5��C�i�!
QD2��T,}w����9W�����@}>r"R>[Zf��6����P2v�o��(�n����1'��K/��R�e�|��6�����u�����k��_J������m�kI��.�iZ��:��"�v!T�c�������R��Q���Cg�������qi�Y�8YMY�wd�d��W��Q�kK�R
k�R{K�$����W?���_����xk�3�iEjO�E�EC9����)W��J�<�,/�k�>�<��UZ�^���_����pv���k������f�����IAX��f�B�8�6������p�����V�o|�_?����l�;>	���t�������\�M*��J�`������<��LZ"�m�G��H��
�v��~�~m�8����^��v�&�r3T���>|����A/z������po��V�s��+������_�������\.��a��1�n$'X���[RVA��
�J����2��6�LQ"����e���W�Ho����T���������K"���E>�h"\We�-�k���H��R�_ �<�a���T_d�2T��0�,~�������0
�^��"2l>���2��8��.�a_�����p��X�������}���g*
?)�������c��0��g�g*JQ;i�]'�����o��0�������#��X��/�W:�Vrh���
��R���)���Yv�/����;��\�]��ZF]�!��*?��	\4R����ZS"��o��/�2����BK�WVt���*m�`�����U���_�!�p>s,�	m�K��Kst��m����Q��N���"H@KE7�������x��
��y����"��$^d_��
���[������P��0��������eO)�(S�^��-�+�9���<z��o�~C�/��������d��
=W�������2�6}�IYc�"*w�m���u�[qI�X8Y9=#�R���$��:�~�J~�AF�g�QIn������)�U/o�Ud9�8��#�^(�h��#��}r���"q��p-��#F/�G�2Mx���O��D!.�T��_|��a��hIo�r���"nr_����,��+)	�(,��Y����G8�*.]wE>m�WG��� ��������&��,���[dvA)
K~��T)���,�/o�w���\�a]~hS�L�����W�)�H����_���suS�&?kz������qK�#�����;2~��k��</x���(��0� ��B�gU��IR�O�Y`�"���i�$�_�K���F���Q��������*W�y���x��C���?��8
sfI�R9���<��k��d�j�KS5_��`D��~�y�R�\��$C)��m��Ft�&s.�u`�D�����`�����~K�p�gJ�R��"�!a0�����p-��n[L�e��Pu�e����-��b����F������h�,}�$I����T �rG�'<�yA�R�<X9�".���y4<%����v����&l8	<k�+z#�@/��.��&s����kL
`�_�!}�=��y��++0�E
��B��|����D-x�,c�T�B���wfX`��uP����|�s�o`W��#��������?IU`5~������YF����+&���=�-s��z���n�CN�Mm�Xj1'�-RO��L�0L�1n�u�Oz*kJ��a�w�Q|�x��������\-����� ��cMKu�u<�/Np�esC'|��5�>�u>3��za.���������{U(��%�&��:.�o���x�����Y=�0�rC{�S��~P�'Nl�$�I�i��o:��P�d������O7al�'��������e��G�v��6��]"��l��A?�77[#_��:�"���7k�]����I��)�K!�OO�����b���a��i~������"�
�������F58p�n������
�=f�����Tr���z2��W���}���,�f��X���DJ��'��Hq�K���H<���	A=��l�@�f��s�!�l������*�2�hBl����/�^��9����^���������
���!��~��q��;���"&Fl���R\��#��9���
����&a$��j�n��A�$}c�.�B�������Xy$)@�uk�$\��W�q(u]`���q�����/��}W��D�L��J���HDnXOG�6O�S�6~��'�kO.Z9 T��G���[o��L!��qt�q��]�k:w�9|�8��~9��Mxzw/f5����\���
k�j�&l�NGE�@Se!�`�F<���P��>���a���S�>��z��������97�pK���K�9�Ck~[��_���J�=8|�@|�A'v�@i���(6�������u���li���X����]�����_���E<u�:���~�|\���������d���
TK�������?�������7�_J�D8�����}��e�-��7�	2�ly*�]���cB��9B��6!�B���� ���*J���lZ�
����K����������%��5>��&�6��>�$��@L��f&���GiE�$�d{�),�H����x�����-�r�/;��=$l�����W���[�z/O���*���z���L����e�m�S�.���o�Z	�z��_��Gg���E��KN�o���?�uIj.���f����>�5AT���5�5<v!��i��y��!����7h�a���+���x���e|���{���i�-{�����������)5�����N�O�)��������U��1�2�B/$�):��S���h��|�y�[$����'v���P���'�����i_�����tM;�b!6_��0*	�4PH�[�w�I�Db-���x������"8:Yz���$�{�[��q���?$����\����p8��Y�Pz^[������:����A2Gmx��Hl]��zuD�������p�B��Hg�jYX`hI��Fi��l$l+��R*�4��HAf�ElX�<�����x!�bTj�?��4�w���?����1��?&�������}�-q��j;�f��:�����8���&%�d��A\x]5m�jc�

�<��`�7Z�H�����;�b?��w%�TXQn�c[l(��6�q�m8�7����e��S�b;����Q��&�y.n�R�QH<�I�
_�x��+����p8�M�
�=O��$��B,����gc��M�Vh�����Sq9���d��@��������5-�Y�,v5�4
a^��������O���7�p ,l��B���`
db��S]R�9		��d\^�K�t�,;���s<���/�i�^$UC������x��i-iK28Se�y�����������yh����Z��i���r��N��#��A����#L�Z��8���M����j�^�a�����`��8*vH��?b��u8�����������b��0��dx"��\�g!��~�9���f���[.hg#�z�}��N]\.n��1����-����znT�O���H��>�����v�dl�9����-��~�
��m+qxiKt���NBu�lJ�E�D9�$x��N�h��f�����mNo��x<i9������B�5y�	?m�����Mc`'���6�o30@'}^�d�=m8_�����
d
,b&�zn��������m�p,��J[)��]_���y^�B�lm�nQ�w:	G��n+���Q�	
���~P�BeAA$�K�(�4�k��G����vu&�g�!���he���y��b$�H� �`��:,���IR�?�I�; i]"vsnK9(�$�Z�__��[�@�8��>*�����!��6��l�]����s�X�!-���.$��y��_29g/ +�
�C������K��S�����ZH�<�o&]��7[O�I������6Hii0��_���rMt�l~�	���#�*)�`0%��7y���%Dp���|�24�`*�1In�=�aP���E�y��8s�r<�	�j����S����yn�����xO�k��������Px5��5a8u&�kE�a���n�Q�/������'<��|���,�o�A���2����?�v>�f3pX0��3j��,@���}8BN\�����q��5YZDe��9��;-A+�+�x�A�������*�@���JVe�-�zRPyL~���'��Y����b?q��ej�D��,bu+��+"L�6����:���-a���"�W�������tL����~��(kw����h��&��
�m����Jz���/�y]8�\�<�Y�Bqr.��Kn���.v����� <�x7�so 8�.=��$.p�}M)W�3�z�n�h�:��&�(������kNF�F���~W����B��r\�b4� >l�s������4~m�P]Md�+RN�R�:���oy�fN\�M3�e#]����)�?����Z����V�}��������D��U��k7to:�������

���pn��������3h=V�^�����l\Y��BGaR�Z��B��"������u".�
C^���~He��P�jPpV�[?1H��y����5������;�����@f]5pYx0�f��3�W?x���u��Xq����L�t^�k��m�\A�v���MJV�*����R%3I�{Mq<�~G&�{s,>tv�}�ud�s#�T<�NG��j���?A�*�v�k��=���u"#�`�G�1}>-v�]ue�8������	����m
]�p���,���tv�[d);v�)(���y��O�F����b��$A�$Dn�e��)'"-^�9A�,yc����n�8��*�q�x����~�MHT$Rt�GG������"r�5�GQ�S���3K��j������&���jH����s*'a�������U���
��x�z�IN�������lWmW_[�����E/|=� f�?�����������G(��=�g��AGZ��a�v��!Q��n&�����<E�a�z6tq�����F<nd� ��hVn>���%�hv�Rt�;���qf�X4!�(����	Q�������N�������c��O�����c���k:�p��\���e��f"��2z����C�N��N�"S���d���$2R
yII8��(��2�Jf�~�@� ;��HO��������3��,�f�c���S'���HE��1��A�x�c�����*U��u�
.���P�����:h<2����ukqfC_��B����yV�������U��B�,*h����|��;y��k�jxo�c#�d�q.��R^F.�lQ'.	1i�DP�����n��*8&^��Gt����q|�8�����X�)�H"C�D<U-?��X������[��x	G�y��X<��q�M��o�>J�K�%����Ve��)HI�G-#|s#Qv}9��~������-�����������G[��5������DP(%��B!��U�lk{���x����tt� ��,�sIN&
�r�Oe���n�
��/�������ks���w�]��q�Y�,\x��wm$5G��M�M�L������v�������[�:�n]���	8z���	���%`bY����@�?�q2;�V(�ptu�+���D<���;�k��o��y5c^:�����!�*"�
Y�8����=�����gX�v��o_�+������:�������q���|�]�q��)�J���������0��|H,k>4����$� h��M����W���\
�[�5���h��i'[���TI����
0�5g2byP
�-h�[��.\�7g]����FP7x����b��G��m���,�q*��E��e}to��	H�c��1��������F�,�.�B���*�2���C�{�����omp�S0��?�%����K#<�1_$]CTd�������98�)_� �I�v���1TF��������������yX�^DZ������h2.o`H��"4qlD��5�n(g-�]���-����IRoaZ
��Z$��Z9+.��b�P��	d�^1S1���{�u����g�������<Z����h����Z��3�0HaN��T��W����1���M����f�/MF�n[�s�4v����>e�#��W��<jyq��C��������,E�G=G4,C�<�S���-�@��f=���9	���?J�N�*~���l"��A�'P?H\@'���59��
���\%Z�b������w��1�*�L�VT��#"1'�=z.�S%��MO�y�!N�@+{��d��������\	��W�w��_�1H�,k���Z���wr������E]����9��8��Fu{��@G�Z��Qz3-g��=���=�����P��W�cd�R�����`�H%���D
�/*lj�ZH2�Z�����p�����4h���h�QQ�p���'��5�X=�0&��''d�s�{�
X�����6�T:�����&��1���%

Jpv[),[���[��V��C��]����q��}�iX���("/4�UKk�0^�#ef�������"�y�JvR&�h��Y���_\��D��L�+�v����L�Jz������!�������	^j�MJ�m�$
��$�C�/��&-��n�[��bL��Y�m.�����S��������Y�A��}��x0��Z!�r�M�.�����j.�[j���flm���)��q��t�Bo�@��V�E��M=7��������3R?�k*�����e]�R��k��a���X�(sl
�V��pf*��pW����s��-pa].�5�����'3.V��[;����'x��cn�����A*T7��e���9YP����N�	���l9-��Ms���G���	�D�O�_t��@��9��2�����7�S���!�1�[<����������(|��N�K��u%��.hK���b�(��x�2r�E������3Z����hm�����p(�Y��LB��4�q�C-'�����~�����".r�8��<�iW�pv�x�����A+w*���d��f�5ae����`W���X��\��i1���8�~�W�����8|���z�fa�\��~���C?*:w��P?_��b�D���q����OU�dH�bn�Y%��2���YRV|n�#��DKw�/�ubKW��7}�"��o��.����2��`'wg����4��j�����=�=�^5X��k����d[j�-�6�y+��a�#G88����O���Y�{�	V����g���KWz�8{yr��� �/��������,��2���ND"��8����N�������VN����C��mQw�!�8�Q#��O�e�������h�F=�axJ>_���u��+uT�	���`W�U�����O~�Ex��Jr��	
��q.]���q��
W�=$�2�������	�-ANr&���qS~&�o�0\'e��D$e��Z^!����i�X��#(7�g�U��7��k���v��.��s8�0�#����I]��E�Q�Kv~�6�}����g|����x��d��3�6���!S��x*�f\�=��E��hb�M*��ll�}�_�x������h�������	�og�i�7��r�����
\�A9����1���������p^����1y���=O�D�$o�X����x���6xd�4�+g��$��>1��������(��_��
9���<5^����A�m���Dou�r��j,Q��1�4�$5���W�.J~�[��T��o��5�LQo���e�I�W������Cj\�|����/��J��[*1�K5L��|R�������
�������W�-���wSOUoK����F�����j��'T��yy]w�'j��H#**'�]&�].
�T�q��7RVU���lUQqY��2��S�*,X�^��g�[k5��i����h��C�<�Y*7����2�V��|�6;b���_�E%��~�G�M���0l�
.-U���B��
IV������-��Q5��M*�Y
$�d�d+����3���*.�Y��v�[qR-K��2�5�;����F{{)<�_�d�����H�h�`u��{���{jUh4k`�(7�}�**�A�h�L�(�z?y�~��s��1@�Ri*���Q������2s�dHtu?U!1�����';�T�����?Q2���7����e����������*9�cE�����/�V{b��|�mV�>���g*���rs�1���,w�,���1�U�?�f<��rP��"�����mW����oW�s�h��\�3&S�!��t}�:�KG�h�������$f���?�I�
N�Wg_���������D_�}�����>J���}�Q�9�2��&����c�Z\#����gn6�<O����_�9@t�������p����������56�Rtk�����w�F}��E]���N�{�_MR�xA��sZ�7y��R�Qy��j���y�����|�r�R�z:����Sjy+(����k���IR�AMc,����V
������j��|��@����SQsLc��Zr����2��'e��a�G;;X�}�f�0L��"���5�������V.�(�
U��Bu�������������/)Z�ih�4V�7�!5����*��{���du@P��He-��Pf�G�S�~?�u��V������]T[f=����,`(����k��2�\�N>U�\:��U{����j���R���c������w_Q�Dhz���T���������������d6,�����f2rH��_��^��Lj��-Q'����k�QF�)��|��z|k��?R/,<�b�����K�������+���~:E)�f^i����}�:��o�K�n��=W��4�)fn����g�X��jcj���������g��B#���,��>��x]���vR�Kjy��|t�ze���]�M�)�,^��m��y������T2e�e�����������)�-��"_���F{����<���6C��Y�N��j��{=Jm����F^)�	��w�(�eJc
����&s����6<���[���|�$k��h��nj��[����)9?5�W	�_����c���Jn�TMv�+�n��Us��[����z���i?���Y��[?n�[9�G���P#o-����?_��WQV���T����F~-8��I�:�"�?RCj�Mm�V{����DM������[5�������e
	��,{����u#=��������:^R�e���x��!T�����2������U�R-�m���4�����V�K)f9-N���T�r]������ue2�����>��3���?�[������Zi*��f9�D5^��\�z��F�����/F(�RGrMt���*�K�������������$���� E6��]v�u���k[uu��*���T����N��C�@BH��df��;��7�&�I�kY���y��r������=������[�+����FM�~��V_�����Id�I����?�m����-Po����'��u�������j�����Q
�Vy3�����:����U�#b���������/�q����+t["[�������:G�G=6e�����R3?�Y�*T�xQ}�'|W�jV�	����Y��]#���c����T��Xsr��f�J��Y�>�t������i�:�;��5iwXUn���e��q/T{��e�1�]�n��^�s�Gj�#jX3;S������F��T�>�q�5���7F��uin��}����_oSS��u{X�V�y@����@��UKjj���Vp
8������U�|�&3i��+��\�p����s��������7�J�������|��������/W�_u�:��)j=��J@��&����U��b�����;���JU[8K�!�����?hf��^"�i�������u���1�������y���$h�y����U�=�/�A(���� ��4�j���N���(uz��(����Y�5�K��/W__�g��yF�(,1�i��L�(?���cn�����[i��O��^�[��	�N��'���4�X�x���T��^���B�]�nxygp�����{��~����������ZF�9c>�H-��7�?#���:j���F}�-Q�W�L�4��FM8/A��G������R����v���<W���7�EH#�.��B�o�Q�x��u�B��y��c�&]@O�����S�����X��}5af��l�����T��P'��}���:�)�������9j��[� [��3T�
��5����G�����i�}e���]=��*��L^���Zx��W�R������(�?����*��W�	�WN��C���.��9H�t�b�6�
��h�Fu��s5}�f��)/U��E��-�S#��%p&/�O[�;����***Tii�*++�I�V
�/*�����H��rCuKk��G��	�p4w�y{d��b�����YK
�DeF9����������5��R��>��^���p%[}�Bv��.����	�I_n��� �o�(�nIDmNE#�[��[5����v�Ko?��wj�RH:��o��m��j�M����q$'��(9�gv�r� 2��wn4�G:�\CUM����]B�S�C4�O�Ii�z����V\�b�H���������k�-�zM��$T��4']���-�14O�
��
��B�/�a%i�Y���xj*F[�05,�!�T-��iw�Z���oBJ���pEpg�+�������.�(gE���;pu��<�F^dYG4Ri(����6v:�(��:���<"��gR<������r�:5���
�����PT
��r^o1Rc���T�z��L����|��l�(65h�����j�U��Dr�>���j��mf
w�]l7F�4�������QB*q��(����<Ab�vd�����I��:�|GJ
�����A�M��D���pQc��N�-����,���7W���&������jj�y!��-_����[�i����YG
5�p�O�#�uM���FY��T����e�b���`p��s,�t��1j����A��W�~�Z��n���hV�����G~��C_WKS�I�'��0j0H_(p��?���J{���m;����{��c�U�E�-���"�oE�]I�����,�l7_��MO��3�����!N�_:�?Y3_wg%/�t���g�B#��qT�pj����D��U���j��F#tu����J|�a���@�w%5X�Z�Y�����V<�)�)mw�+���&��]��VB'�P3E���h��UW�6�z����H�!�P��E��Dj����`[���z��>���3�r!����4-Q�+���r����io�',��<"K�*JQ�N��,bQ��I9���]�8��!�"9�Ts���>�qO�������b��bwMy��;����z���r����x��I���2-A����%(�K��X����/s������;E���X����-��x���MJSGmC'5/sV,��?FI��veX!#-�k��c���W��N�voq�Q
<S��O�MM�/ �wf:�N��t�(�d�Wx�t��0l��K��&�������.��P��u���6�K|��Q�K�h�3�����F�:/M��C�Ji�<��RIS<=�@���<�7��Q����Ky6�GZ��&S���B��/�/��e�h�����^i#�I��qK�N�(��rdZ`J��������A�*�����q[�	";����Ig�j	?�G��5��|}�t\Rj& ��h
��Q���"?�hV��;x}�QK����q��	����~��)G*�7���#��Skq��������b�BL=�����/�T��.������y�9Nmo�g��/�m)����9q���OiOqL�?�*��D�d�n����$�z����h9O�M�����������J�k{�U�(sS����D��$%1)`�E�d
�9^	�G��e�E�l#�Aa�x�q�t���[�^Cp��}�k��@����H�k_�%�e����������,b��
����"J���D;�Q��y�@�{�\�o�9������b�kx�&�EL�	Z|���l'�0�d6@�����sl�&k�=r���`�94�kI�1��c��wk�
c?$����7�<X�-x�9/����*mD������Pl?q��)!��/V������������%���Hf���
���������jy��'^�X�2f��9���vi�<�I�_���������'�tO�h�r> M�0��th�o��Es?Q��4�p��P��v�31/��8��~����p$�_n��q����}F-�
_��)m9��?�H��������*^ln�)��c��{���.��2���� 5c8��V���wm�$q��P^)��i�:��4���me��9��4���8����u�~�qk���c������H�]�����*��$U��C�'��x�r,�q�:����x!Z%���F-��2�e]������_���Z�[s��xJ4���f;�@�[++�~K�p��V��x���1fi�W/��m�=�L�`�$c�1����lWl�e�4���0��(����R���qm�yb�]& �����k�x�N�O9�s�Q��3���C��_lu������y�A.�~8	;��D&/n�q�p�!�f���QX(���/�p�?Q�H#,��w�7�F�k�8�]���6�X�6E���KyW3���\$rOHi��[�����s1u�hL����Dch'�P����nq"7�@�W�*��5F�c�������3��zjG�������.7�`���>����(�tv9&�����<�|<zJ*"����T^%y9-�k�f�c��2�4��9�1���:��	>��2i!f}�|�t������8\`������h���8*++y2_N�����\Xic"��c��G��H����~K��p�#BGZ��%��I�������l��8�������"��#.l���@�/�J�~$�	�!I ���d"����	�X7����%PL����fGD�U��o�Yu��o��?��d)�(O"RxL����������3.�C
Di+J��0��i�VC`�������(��
�f,_~b���h��7.y"J/�r��7}#�r�Fu����U��x�Q`�kJ�B�H��4�]{K�$��yY����&L���H�K�e��dO���u#�S?
���8c�1�{��R��[^\��Q�\������d=���|��LCy,���y!�������tbN�l�i{���6�������#�T�����I
��i�0�m�^�q{s���*
�@�M �vd�������/�)�s1�x�A1���=��@�X�:��@���/`"),y7��{��l�����	;�@}�_4�8<*��@��Y���O�+d��	�*�}�l*���O��%b�V[U��RL7�6-��/N��o�S�"?2�!2��O���|R(3���f���a������E�O���{�D�"����(������w��~On�&�������<����%M���yY���v����!?Z�/��9�K��sl���W���t��� ��nq�����?��E'Q�i�������w�OG5)���8�A����D���&�`��W���GVKP'c�8�2",���8��#��F
��L�'���V��IA��X&I
�(|	���6�[�DXC�^Y��[��y'����pLIMlu�:H�X��FH���~���'{���(����$f���D���B�@c�@�Ol��B����Qdoa��cTx��(���)
A��y�7{c\O�|:,�f�����K]�[um�i��p4Mk8#H��S�yQ]ea!�����np��q�����t�zp��~Kp#T���d�N���~�xNH��F��b:���;i8dx���N��s#���h���7�b������������ub�f:�,�0�bE	�~a��6��^��&7V�������Y�J����
�YZM�����dlW4G�j0��}Ld32��Y�������2�Az
��N�����C���'
��'p-��]��/�f�d�D����v��
�N�|��
p3n���a��
~sp���$��Y�~��R�@�m�%�[��`q�@��X�t>��1��5������8�4|���
r��������w^���@�Lg��������i����K�l]{��zQ 8le��I��J";M2�J�$�C���!)>�?�L�Z72[��I����g��|��3;@J�tR����=���{�p�za�M�Q&��f�RV����Ga �	-��S�B�`����8�6Bx�T��)����3��|�R"�O����r
mgo�i����$?���4�-�~������L�4��N	����RF�����s:����O�Xq5�������^~<���5.��ixf�Y.#����-8��E�0�Jx����n%������/�����������������5��&� ���h�%�H���/�Q�/��/8}��Z�.B%Q��Y
5;�.^�W�Fw���	�u�I��������F8K=�����4�7
<�����H������I'�B%�v���w85�x�<����U'�������(<E�|�I�B(�g�m[�1������]���f&���WX�����+	��:_��8;N��g���a���������h���^���D��L'	���8DD	!L�hL3���
}�&�wSzi�fd�v o�}Hj��q}�>�4�.���,�U>B=l�mf��f������/�#��
��:��g?�
���{��X����h���_>�� D���G��Y�����<��Ld��(#C$����t|v���d3g&6��-q����w#����D�M���1�XM��?��Y&�q��X�H\�H�&1/��cp�C����uv�Vy%�����z�s	��%�%)�}5��p������q6�4J�(]�O��4=�5��a4aK��Y��4���@$
j��6g��
0���������h�yR�N�'R�R4�
<��7�~Z�����S�$���C;OZ�� ���D���t�.c3����Sn�����ag��Mx���)8�
�����u�$_���8����x���C��/~x���M�)&�i%�8�"A�,��kR���wF\�������K����=vs�R/���o<��n�Ir?��z1�*����q��&����K�t~]�If�`�l�����3�����V/�+���	m���?����cTw�ap&\�h�3�3xL�$���p4�Zh�u�Z�$T��k��.e�9h����K�����V
V>��������2��O�k\.i�t0�7���������Lh�,��1���������Z&�W���3�����I7>[�,�����L�yg&��������xRL#����a�k�?C�a�K���I>g�B�`��_p�xH\���I��=%���/����h��b�W+�{�+�����������@V8V�
��e/�L|��n��� �����p��6�s+Zk��by���Vu��lW��� 5��^^�W��&�4���Rd)��c8*:�}��!�pK�(j(�.cu!��nE~�	rrN�E�&?-|@IDAT���4c7/t��wAD������u��B���X��?�i`hx�;��3�����a���^Ch
	��p��I3���4+��-���-F��V��)�[���Q�^��,\��~�gT�b�AM��k���Zh�Y������z1�
�tP(�f��cE_���/��?+��N����GS��}��3���~-�g��lD3?
_��ZO���o�o�����)�-�.�	�*�7����Cxv�hn�����[�j%i��	�A��[�5&"-�c���xA����,$V
���>�l>2?4������<���i�]&��dj�/�,��~#�i����/z�_5
l�3��x#��
'�u�4��o���n���(-w;zUgL�,��}jb� {R��v?��*��l�s���������G��/�jT@��7A�,������j�iK��j��mV���&H���@/
?H���M{����������l���������L �ffJk�S�#�+oJ�{�c��fM�
G�$!M&�f�����|~��%d�������?|����az��b��%�
1�����!-��25�O��	X[���5h��h���j6�?\_TA�����7�xi�d=���>��) `_�f�(�����=���
��3�F�����,P[����Ik/���'������������n��	���8l;8o6,8!1!�=��`Z�v>����U���.�����8�.{�?�����#m�����O��`�? L7d�M��F-�vz��C4v�*
,�g�x��&���i&XF����
����[�XiuV��������5nVF��K��W��u���AOK�{���kq��,t���CLD��K��;��������Q��a`�4/�N>(�7[i�o��7�!AB���q�
�����5@]��
l3�_�,O;T����p�5���~_??��m������4���K��q-+���)8x���1��<Ce}A�&s��s�k�s��p��/�pn8c��L��51���I���������M�q��2�o�7�4Mm����q�A�����q��
Y���8�E�ZY���.���������~_�����&9�E����q�F�><tZIi���7~1�a����F��0�}�(�� K��(�@������
W�AT�>'gV�����\X$����@[�p����78������JQ|�6iwX��p�F�k�>=R�����CEQ�G��Sk�l���i��i��$t���v�i+���KzQ�?���R����B��}�L��������`Eld]��e �!dp�,/%en8�f!�65�d�,~)<�����������(�-V'����fV����X�i��I���o��K��v{9vV��S�����T�V������
a��R�l+��sPZRL}����#�[{�����A[2��;Z��Q�[����9�a�h���K�_�U�����
�!`k1�tlA�x�i�����"��o�?�
��@�7Q�!$CQ�'�@+&T�m���){+�w8�BqC��P��Vj4��:�/,F��e��E�Y�@�	jV�_����AX�/,002
����MD2�x��F&?D��*���`���r6-��$�m�Hj�J��$����%Pnd�"D�BQ�wN���$@4����Ub���o{�j����Y�����z��z�(�{��!�����A�9:�K���^I*WS
h�cL[����_GK�o\��[
���_��l�����\���a��e�}^���+��~�`��m�r�c�u������$C�^��BG�[�u�UQ�nLk?��5q�C$����K��@���oz�!
��R ����1�
4��}�����Bx�6( �F����������e��W-��	���_�f3��f������k���YC%������_�i�T�1��������?Au�@��)(��+8T�B@� ��1�^�-��o��!�CQ D�BQ D�BQ D�B���@���n|\�P:*q��{���&������mZ5��bZ9��c\S�ML!S0\����k�h�����T���K6q:.qop�6\Z>C����=M7��v���W7� R�Q������LB����%3*8L�7v6����GP���j���LI����/���j��ha���,����[z��K�g>"(����$��>�~o���6���xCp/�1��
u���b�)O+yP\�z�����7n&l�
���H���QlO���Wa��p�����tP!����X���cq�t�X��|.G�t2[�Mq��z��iRA��11�$�+O���[O�������>��0��J�?��J��/�D��-.X3m�wI���T�n��q��Le�� @�4�&�~q���)�_��|L#�_$����k0�M��|BQ D�BQ D�B�-S�v)���yA��\$j�mp*�������P�?��AO�%s�m�2����d,Z�����/0�H`��O�\f�\4G�e@l�i����������!��F�jM�E?�/�=�5�o�������H�������[~!:�K�xV
��3�b��1��[���<5W�R.qV�-���%������a��������\�$���U>)k��U5�Ef��a����_�+�Y1��� �/��d5+���O��e3{`��=Fx�����gpIT4�(���4�������M���u���
	�������34M�o'yg�xs"�r�$����nu���������$�������h�)�"���F��O�/���I� ��N�N^����@��kS@o�F�;��[���,����q����g��p�
�o�?Z�qZ��1��q�f��=z�M��LQ�Q2���P���g��E�����X>_�i�/��O�t�*��?}�5�V�8P��_�!
�(�@�!
�(�@�?5~�K�d-��N�wb�����&%��w)�'@��}p���t���[&�&��X���g`Ie<<nTT{$���S/�v�mD����0�����S�`W~\}z#s�p �8�0}X��\�s��#.>"$���=���w"�mo��>�gI1Z��0L�a,�
O���[�����a
��n�<�/�����,�Yr�i�9{#V/����H8��9����;:�~F0rj�^Rh��6�k-��+��w�8,/���Z7"��"{��K��g�D���E��;J�i�3�����T�����#m���5 ��a�G(��E��C�a�:T��������6��G���g��*�!,k���VM�[k<(lp#&2%���e�:�o�.�(�>l��^K��jPzp�����0D�����HZP��p��N�M��-�����@,\��X�>,����\�e^�
eRL�aa��m�:���%�ql
�'e�}����i�4e6��Z�W��9�&ciE��]�IEdBN�|(:EG!����#�na�J�Y����� �=z^v:���D@��5��|�G�q0�5�
	e5_�2C�����'���+R�J�,[D���-,��z�'
@�^�q�I]�`�E;�\�7�/Z�v"?��Z���������t���,�IJ@E�+�u�^�[W�HOjIq��L@}�9�hp;�H#u��5�c����V��a�q���D�Q�6�P_���X�v>�k�>������ty��q��S�J3��.�SX��H��@[oBjW~�-[6cFQ,��+��i�~����~T7��<�:����:W��m
�(��pLt�R����2��-�H"��)G~
�Eu���t���T���v�O�
A����������o���������@��������;2;��_,,�.����^/�;��_��]{����u�`t��A��$��W4�D�"���o����z��a�~��
z��$�����Ri�P���5��{�V�X�����Jx�Dl���ih4�#�^��3k�����,p���#~_���/:]������j��xeb�;�_�V��^��g��e���bkk�QS�{f~���q��cTD�g�4�Q]x#�eV���{fb��b�K�@��O�@�2�xR>�1�{W-����p0�=z���N�xR�
a�K�n����a+�p��* 9���������=��|'�Qgy�'�CnC"GC�#z�?�ZT����*w'r�~�%��sq<�JGl�L�v�td?������e1�m[�9Ep�:�9���A��#��
��'����"��P �Q�]��`���(J������~11hg��Oa2��?�Sl���#��|��w��I��e�_�=��Q D�BQ D�BQ�g��i�B�2���bT}�Y�0w��O�ds��w'b���82+
��#)��+J�m�,|�A,��1�t@��z,�,Q;�bd�4t���B���b8k��d7V~-^����w��w(P�\�eq��{���,D��B$���J\�(����I�l�������g���(3
��/�����^��X3u*�m��
��@������%�q�(D����c����]e�-��s7���+q��m)n��s�R�����!xgH��R�c��Eh�G��a���0t����}Xq�}p��#��/���d����}qd��;<P� w�wx��\��>i�b��C��� ��>���N0�LR@�����
d}����%�l_��n�
�1x������@Yk�U��*{�m�g�e��#%����7��?��3�� ����1��:|����R�� �I�k�Q�����@QR8"3(�<�F^|��n�� 5�ZU����Sp��@M�\,�>�w>v���������/~pW��>���.�Q��I�-�>gE6�^��=��"��.p��w�����pr����5��C�����j���8�>�u��`�}��\�'.8m�@���M��n7<�Q\��
.���=���L���s��o{�!kFF��AC�K�c��X4q'�.��H�KBB�j� �S�h����$��z�R��Z�-���}���?�{2���M���zlz�6d
X�3�Db|��Wc���p�C�1���0�>�����xnE;n>�G��mR�����+�����H��D��	��Z��8��<��)��P�`���,����7�#�4�{_:f���y�3�Y;Om�%�%/���BlBqN$��T������L
U�Ep�a��9����?g#���p$������;����;.)��9b#�Nn�m��)7���'�c���Yp��9RSG�<��S�`��]�8�T�o�b����3�����""E�P�������9����m[<8!�
���
��z�����1�������i'����*�����?���G��M7����.�M�#���91�B�(�s�Y���}_`��"��y�~:��MA{�n��cw����M8b�����;�68��=�'���&?��g�t-Pf�[�����Q���%PTwl<R�&#���~L�Q4�`Ou�e(��C
7��c�8j�7;n��DeM=�T<�;�A�����!�6UWQ�=+�c���|�cA	Ta-^{9��	#�uC/��^~�N��������E�{�
�?��=�#�D���8F�_<��3o�|<~�	H�e���In;*PV�k�W`�=+���,n�sc�-<�l���8��p�W�P�[Wa�����:�_���(��%P�����l	�]����G��T�����a�Q�12�#���/$�����7�o���p���������pn��WQH|D���JnuV�Sy�
�X;���$�E���������uDZ��jQy���{��H��{�:r1���������#���0�����!�@�!
�(�@�!
�(��������
�U�*;4O������RS�����j�7V��b��������Y�V��n�����~P��o�:������NV���q�w�kj�c2���^{�Nu��W��������R	������|t���c.PG�����~����X��9���.���f����~������)O���d���W�
k�ZUW�PR�u�-����U^��]���G�O����0L��HA^,<�M��
�N�@-�q)�r)U�ZM8�~	/��>�hB�S��]���Axy��)2�!����E}|��������jC��A�7��"��U]��w����U�=\�w��b]��`��#1mer������M�F��^�Sye8�/A��|x�m�Y��bx_�����V�]G�q�:���v�j5������T���r�zZ��;��\+�\5��K�
'<��^�r:W�l�����C�%f�r��R��y�mT�n?qk��U�PDg�G7�U����$Y?��2U�����RJ�K�<�������v��n����	~q�r�> �}���h����UnS�����Nx�@p�o����i��S�SCg�Ek�(S��K���-������F����k�X��(�s���_�^�[�?&i|{���w�z�����l������*��.��������I�2o�������?��&��R��0�g��+����+^X����Z�����
��W��������=������S���W����df�Lro���nUV���G��=��;$Lh����@������..��������z����b
����K��������K�)�{�����gC��_�/G����gmQ��7_�����8Ua�LUTl�QF��O���������S�V#��B�I��A�j���u��������
#�U����A ;��>.w��jJ&�t�,��o�������8M��u2[��-G��=[����N�>�T=+��r�9���#�=�j�2vYR;F�
����?��41h����}���@M�['V��S�@U����^�h����������C�J�E�D�c\��?n ����-cc���L-t����L�uF�s�|������0���o�����ec~B������������L>�������`�������'�vdu	���������M}P}vq��Z\Sc�+�����n-ba�������S�y��lg�F�.PoG2����������Q2>���u��w@���4��Y�!�$ w�R�������P��p���-���]�O�-����h�����������U��`���[��P����r�q��{�b����-J�k�8[=�����V�$=G��}?�W�����v�^�+��f���>p�������t��G�C>w�W
�q��'�R�x�N�������*�K�����R��6�i�$����{�!	�8������e�u���2�+��:J�'D�BQ D�BQ D�_����T����$��kQY`:=L=7�����L�������u.�90v�(d9*y�pVl������9����� ������G�����b��2���9����-�G�������{��,��z�53��"�H[��[��oP�=�S�[�#�<u�l��6�xp������6"'M�����	�^i`t`�#p%��;�pck}������4���6���gh���yF���+�N�c��������FY���l�����U�E
Y������+��o��5>���Dt7j;����%���.��h���41�x�4��+�a5�H�!�A,������������w�`��wqK�z���Mj��b��p���9���O���kS��&�v��a&V��i:I:�P9V*6��(k -rI(�j����v`f��p��+���14�!H���������r7����	_Q���x���p��k�Y_bF�R��O���������,c��#*�\Q\��n������z�'��c���>j���\�TP���?�G�����C��������qo�I����V����cQ���v�Y�w��#7\�'����K��U��oI����"�D���R�����#1�d;w��B��%X�p��]p�qT��6�m���n~)�����*�VB�k{~���V�'�S���k��]r�Stc,����
V
�E���U�F����y.�i����0����y1�r�X�B�q�./4��4�����k�����j�5i�C��t|d�Oq��R?pBc�����d�KB�+}��3��I	�,C�A���$��.����;O:�w�EW�����Vl_����-a���N�zl(��/*����]���P#})��n/���X�8U�����c������^f>���������g��+mN��Qx��L28LG:�@4_Bzh�7M�{���8�;�;��?�3���U�U�4}���?`������o-	'��(q,����,}}��d���l�~����	m��O��������2R�\4������%���������D�x�q�&�&�QI�N,��S�Hjs2�	<?<BW�h��8��2�kSD6:�a��*���
|�^��}e����o��`m������6'�����55	���F?+��#!����-�X��	������B;�_�I��$����IiHNH�x��R���u���xZ�p��6_>!��A�Ur� !9����R�H3c��I;g����`C���!3�K*<����?���2F�":�'n��<��L�������t����1��s"r?�7S��Gt@Z�&�[�.�ws���Ox�,��W�o��f0�+Sk'�+S}�k�{_T��q����$�>@���A�V���qM�Kg�F���0��D��y&���6WN�����W���p�
������H�������������I�|'Q#��j ]jij��?�<S�b��W`���x|�x���=�$�)|�sL�������b*+�p���n��1�[�Jr�]0|�@���A`��x'��]�X�^�0q��(�@�!
�(�@�!
�(����)���p�Nsi8i�����ld��LuF.*���*�c�~��=<��A{�"�����]��m���x+��#
�qZb't��&���@��d5��Y	���,�,��E$�/���3������>G���,Z���7����d4-6���\��q&��K�h��Aa.m�VV"w�|����ax��M��S��v.�j�V��������z'6����S�c���]�%��V8
TP��;�aS����_$b����Q��=P��tm{)fS�yQzO������=�[V/���A�L�F��=����
�}�!\x6�R�\<m6����7���z���#�I�(M	��,�hjBq�;��R����HK2D��7�7c\��P��-�
PZMaHz[d�NqmT[q�l����mS1keW�������g�S,��I&����s�
�5m�8���=:#�i��r�~�:���=W�>�q%�(`�Tgx2:�����IH���o�#����,����������
�)�vR��}��{c%]�'�C�K��(/�=���������(��Y�`�?��"��H����&%�#4���2&��4���nmY>t���L�F�8��#|w6&S��x:���T���"���8�5	���E����]���8�yH��Op�M��KE|2��:�U$�)FUI��/��%#�O��9u�o�{WV��!1H�by47p�f��	���Y���K���v�
���ew�z�#:U�K�d�6�b�AlH?WG<�S�f(��a��9�9
�(\(F�#(�q9P�s���H��y��O�wI�^J��F����v���>���C�T�z�-j+*�_�������<�m��<p`[��s9A��3�F��/E������||��c�nX��hG�pt����>�#;�T��p���?X�[N��M2�>��M*�K�QGT���6l�M��%���6�k�������}[��%�)_�~�U�C{�����3�PE�E�7 �u�N��v�;��.l��,���-Any-
]/��\HE��.��-]���h�m�l�Z�b=M���t������(v������Erp '��I�p��F&����#�&M��q�j9-�h7�T�h�2�u��
M\i���:����C*��+8w����*l/��k�Al����uK1g����E�`Xlb�
E_�%��O"���q����H6���FB��h���0vg�
uh��������or>V������H�T)}14+	�R�o�=��D������b���DE��H�-s7m�F����.��7���_WY������>N�O�_4��:�G;$"+�0���R�%�c?7��#xOk����nh��E��'7�rw`C-��fo�:������d���AM}Q���~����]�����	I��pM�1(Z�����v;�1*����e|p�&T���oN�C�Qg��Qf.+E��)x&�~�����:p�9� ���8�����D�5	���E���#�	�u�B�zh+�?v*��K�QK:5�	Pq��#2G}�*yWGFT%Eg�/����Y
G�|l_Y�����-�(� ���}6�k�0)�!��s'�8a`h�Qz�44�4�f���OG�;��DnxF�3#t�q�|'��V�n<_��
R���J��/)G����taR.p"�#�Z���_�^���BQ D�BQ D�~�����e%3x����W����uU���4���e^�&Zy���vN��q �suE�z����vp�����V"��vE��=M�t�����^V?v'�6����+�����{9����Y"^���}!cf7b�[���%������j�2�N���c��B|16'eaA�L�hu1e N:�~������x��?�J�l�]��^>C�?�6N)LH+Ycu,�.���\�5��Pt�������%����x�]=�rg.���xY��8���������6�:.W��/}[���.�#���hk!�25&�?N��,�yaZ,����Z@�G�T��,���`5�st�
�x�R����(�+�iQ�[,gq:�0���z#�^='�^{����-L'�-�
���2,�x��5������-�T`����
j�"���2'/�=.��lzDF�,����*��mC)
�E���p`�g�������U��L?�2����3�kpW���!���S]G�!/�,^�����u�������
���I������a��2��
'MM���)fj�9[a������vbg�	y��3�[�}��	�����F��>\nW�S�X��#m<(��A�;PS��4�p�N*��E�K��,�(���rtj�����e���d����4�-��P{:w?�d�g@gJ��_^D%�8����I��E�.m/�><��[Q�k���������L ����E������I�=
PhLZ('�	�MGF^=�����@(xt�Tb��`y�x5�?������f")8�\{!<{6�����o��.���,�o����2�[�{]��}���n��C�c��LK�P0���P����Y8���|@��
(��X����hv���A���M�3!I#Z�Z[��^X��+�q��Q��.���V��e�$�I����V�Q������v}�C��@Q���7���q>���q��Q��.�<#>�n���n�+7c���x1��X����xd�����S�����5���S[>}s}?z(���A]�&�D�����Ln^0��`��0��g�p�`��9�+�w�y�p���"1�dS���By�.,>�t�utO������(x��F����H(s8_�%�}�.��H����CypZ�m3yakj6���Uw�����^��I��o�I�-�}�������0��v+����'����n��7R�q��i��)'���W��g���^�0�|���U���u��M�R�}{�^:.��>��;�>���E��Ds�r�r��R�G���r�-��t��>
/:�]r�e\��u(���N4��8i��r�#�������_�w3��Y���������N��w��h����f�M>g�0�����<O�������S�X��DDl���Esp��"Pn��2]����F�*��WFB�'�\=F������@�V���f�(e�7�n��,.C������bD�dp�G������gR����
9.�������Om�;��������C����J���8}�	���uGk����R|qU<!�d��vGm��g��-cGdr��������B���uu�g�T�1���5�-W��t�J��Tz��?3M�����V����}��u��q$�����5[g97����-���C`��z,>�����2�Q D�BQ D�BQ��E�F+MY���&'��w���
��2�
����%BY�'t�d;Y�������d<���G��+�����'
:^�"G	�m^�&�[�$^}��L�����/�"pJ/z��X(x�QJ>��"t_�����
����i�Jv���[#��Z~$�'N�u��x1�����y�������>�L������g�����:�g�HW�`a�7oyk��h��ykyL;��I��&�����qw��cn�Wy*Q#�@jb!s��Cs!s��������l+j�x|u�W����x�4^�G��d�:�J�4���P���$����)���}������~��L��o|<x�8��;�p@�1:[Y5jj�p���h������j
��>�K�O�9?�{ss��b^���/�#)=�(X�5�W���qQ��E�����|��S�
��_S�I�y��!�b�F��{y��Y�v����EG�f�S�Mme
:�M����;���GUN���:WL���>������:8ez���~bBB��V������x.���m��q�c���W�t�������tNC���0��������J�6��)�p��-���I/c#�)��d���iB�@5����B��Ec�������qV����$"������]����~I�0���b���,������bND\�������������nga^���J�n����!bX
�l�=��2���/���=���������v7b��b�7'����a���0)I�8�>��"���=X�V�K����uUQ9a��e��?}��L�s?U��gt����Q��=���.�	�4�zp������p?���y��f/j���M7����^DL����K����k���>1)�bK�Shw�_t~[�:��y�FL���S��*��*�&Yzk[���Q\�U.��UX�t#V���w�n��K�P��dl���'��;��o�Z�k6�4��	�z�f�����W�r�q���<�`2R�\�-�W`��M8D��	�����{���Ax
�����i#� D�V�h"v~�.;�}<5w5��o����X�����f�����>��%�+��_�Y��]C��O~H���YK����=�2=�JF�;�O$���a�4���e�^�&�����{.��h��@����FbD������0p�h�4y�*7`�k#0���1v{�f�����}6��Oo`G�ycg/��-[�i��a�'_��i� 6���oa���p����E�P���Y�+xZf�
�qIo)����g���+���"�����H������+�f��8���x��dj\S�z�y�<Mm�������Ki$��0u�:���
[6,�:��?�=N��s��<*f����4drn�9F&SFU}����B�s?��o��)��1���u���v
�T���o��j���(��VG���(�;��.����#�&`�����Z���'p�������2��2p�$s'�9Uz@J�R!�)����s���������{��}s0��Op��\��:��U��>;2q��V����}�.��
�6od��O�l�'�{W�'��m[���Qq�(8����V��H
�
$t��O�!
�(�@�!
�(�@��'
{G���*���30������k���4I���q-��k8�#+���
|����{��ytFu���N�����1N�����
!89���������w"+�#���r�Z`�u�[�9���+.���W��L���-X�dr����ai�P������5zB��+���9�����2�s���!���FO�Bj�\6�6�i�Y��,b��3��U����p����{0��������m���wp8vn��=j)Sq�Z7����(\�5M}������u`��Sq��o��������Ea�` El&{yeA�$ml����!��vSx�v�������3�����A!b8�=8�<?�T��u$�{w�Uu$���6\���>����x�71��_�h3Y��9j��eVL^�9W?�E'Q��JT�D�C
@f77>��C_{��I���(j��������`��R�����`�z���I��C}X�xZ��	%������^��>�J��G��;�"�%v5"������
+P���'?�%G���o������G4r�G��@2����:��@�<z^�\{�������<��bvM���U#����#:�m6�L���M�������F�9\�;i:���W�GndP�����������uE���>B6�_�W�x�p��l����3���!G����	��D8��� /�G���f��1�����y��)�Go��6�=1�(D���<���vxBo���;1��X�oN��;_��iHKv������:6�������ZT��������������?6:K;�hRH����)��?�����}��c�E�9X�.�����F��S��hL^>Mq�SX�E�O�@��"�Y[�M�h�_�N$���F��Pm�z|��z��[4�h&q��8�}4�R���#�B�7���W�v��)��]i�v
����~��Sl3%K�0z�
t�������k;�����?�t����5X����p�Y4��{�x�A��c7~k���fn�!��\Ly�&{&�@z����J���Sk�j�d�t(AX�r,�G>��	��B�'f�E�����_�W��^H���0��)G���y�@/,-��v*�#��AjT�+�EG'���QY��f��,N�������o����H��Rn�0��;G\���)�M�2���S�����x�d\z�h���t|D4���r�p9����a��'$�|0�!�"y��D��b���K������1��n�5.������";f����"%�f!$a��a�Q����-���&C�����(t2�G�X���$#���Gk�@4����Y�V�,-�87[��-<6n�;���=#��
`?�L.�l6���}�����7O���n��[�NU)4������wrp�e���m���	��x��'a���1��9����@�k�n��D�G1<=��k��1�O�������Y
X���K?kS&��N�|^zab�C����
<�s��g��*��y����K�d�Q��
����������
��o�G�%#6w=�w��G��-3!D�BQ D�BQ D��|�'YN�e�����������c���$mw����	*5����k�|Df�aF��u��8=+��l,�J��n�E��G+�"8p��C��exm�-��i=��[��(��u�U��3'�\$hm*x�yL*��)t��N���S8
���oQ�3F����q�)4-�4�%��v�a������1������������o���;��Gf��8!�
�'��*QU^��B.���1��z����MJ$R��w""+�1���E���"k���`X����`B
������"�x�8k_��6<���:�w	G�no���yq�������aF�����f�B�']����tu(j����s:�K���>�!�
�������K�&�e��$�&;�[��k[k�o��u����^���c��#��M���U�'�I��m��O�o�����
�����68��H���aYA)�;s�N��vL�/:J�?�OR9�#vg���i�h���>��~��e����%�E��c��-�\��"����#0��:2��`Cl�����c��?"��r�U/��^��'����=����&-mDEtG�c/��5[�"_�f��J�Q�#�/��h�8�&B��*)5"M�����
�r
ZcjQ��:;}��F7Y���)��aD#`E��e_��"vGV�i�I�����wc�`ZHD|��Rh�|�k��h���V(�@IDATa�,��O���/����w����S<x�o;Q�Ks���@�"k�n��f#���ww�`	!�!�9�p��������p�BH��x6��Yw�����W�3;3;k��u%;�]���W��u��HDG%a��hMM���a��QD�{�������q��c18�#U*�����������f=��w?@iL_��w2��>R�[��"|�x����t�����4atQA��|1�O��
��"�q��k1�S�]�����f�c�{��Ul������jP��\������^�X�~�s�S�	$*�|I5p�=.X�����W*���9K����H*�6�c���F��L���G�}��'��U +��2����aH��I�p����ox8�R�!D����0W�NA������
������(�pZ%�F�l=�
��'�?�;�|U���z�;w����!#���4v0����O5�����������>�����������gS:�Z� O�O�r������'���V����
��@L�dt,�a�� p�v�F�sq�a�^��
���6�IsN<����.���c����S��sz���Q:	���|���>�T��^h�tEL��LE��������3���`��.�o�N���c����v�-�C�������@M~9��;$]i��*��5���	f�K�[��\�O;����g�O[~�HDd��������Q��<a:�����=v�Ey�����3��r����K�����d���� �
��1f����)�!|!�*|�����T���49�5v\z���	:��BY���mq�R(:�c��[�����bn���S1g0�s��`�H�E��������K���H�`��*��/�r9f��{���&h�^�|�4��~����7d1.�1;���^�C����j-K+�B�B�B�B�B�B�B�B�B���$��Iq����^�A{��-�{{�z���3
Sy��
��Mo��@j���o�9Xv��x��#��������td��<|h�/q�ona����,,+?Z���`�����������e�c|~)�"���{�\���:�U�z��xv���\�3y��
���������{�bT�%r�U�IK�T���0�t�3<�7`�C������6/��[\g������;O���h���DY�|�]�������O��Xy����#R��Q�x�{����c���0���X*��Y�n�l��1�n[���5����1���q&WH=�&��t1w��#���0yy	�|�c�����>Y����	g�!\+\p�|��M�D���[|F-z��wc���'H���`���rcM���cr����^F�v2�X��&��c:�b��2Y���7���f���y�zN�DGl������G���zR(���ll��'v]��>4M^S�;��W���q�X�7�?����s������nQftt���d���|�d�o�����f ��{��4���uRf2�Y�x���G0O�`W�D� �2�����aX�����O��n�B�DC�������������+p����!H��E���_�#6 ��k0�����I���.fn�NA��@��?�J��������������}N��aSr"��Q+��J��eRL]v���kx�w�-�P�"r�@\y�/�u����<T�l�I���	����]p2v���>�J@���.=�Q�1�2��>���c\���xh��g�0�����u��eO},�������Ou�l�I������s���
 ���e?;��g�qk��'	��`G;{B���j�������Drw#��LD��.e�yw
!��I[v
���5'_bDL����u6��u�MV��Q��������l���9�/�����'#����������"���<������%-#����C!����Ou]�ki�B�gW
"����o����6m_�tt$ J����1(�?�*z7^>�d��
xu�E�9�'R���!/���I}�MXx1b�/J]Jhmp�n�p��xr��������b��!6�!T��Cbzp'+�'�W��b����g�i���B^�2���h0���C?1P�=j�w���
��K
�b��g��y&���n�����<�Y���p���������L>�2�-�p+��������-��B��2F���VO������6��b�]�������8���P�g�A�<��`�����G*���r�����A(��T��0�}���������<�1�$,:
\�'��:�H5�e>��Sw�Qp'�����<����x9����v�3��/A2:�����4U�1��d�E��_'"�f(��wS��x�g�Nqo�i��������q��~��+7�/�!�}?(�u�e/���������������������O�����3_.D�������3�K����
��aJ.��`�)�-��������m�b���������ds�/bx0O���yO�U�,J��0��<������,�t m<��G���M�����gN@_�%����BL3��|T�����$�Y�BTpU���_��H��B�����]���8�o
�BN4�S�������1��3��j���+��_!A�&�V�����I���+��b�b"�
q����+���tT�)N�R�<�>�7�AM\�t�8��0�Jznd�b����|8������s�x�/�;��gv�i��<��$�UJ�np��2xs4����4��da.f���D���o���1?��*�2m8,����>b���F]xj ��!]f]K��0
������O���]D��X�q1��[-�f0��B���D�=���W'�i����	A�}��Y�U'���Y���/�7k��-u"w����z�����d�����WhhgX�������]������p��8���I~R�!�Om����_O��R��y��0���9��\��?Da4��Z9+�0�(
�>Z����P��h�xa��!���qg\M��PI����h:�$,�;�"�b4+��0�}1v�G*TB�ywEi����%8���U�I�6;��h�nT��j��3L�����V�h>M�fYD.���`�.�nz�g_�%�� L��&�A#������H�9�����,��]�}�����CY�EB�B�'�QZ	����������]�A8�a{6�������3X�}z�GR��/B�p���(^uv|�*�p��[W"z���KC�3���$��[E������
�t�k�f��8��
�>Er#�� ��w����Rb��_����0%�J<��u���N<���@��<�=>����2^t�������s�s-w�]�@k�Fd�0��v�3�i�����;9�Q::-EZ�i<�a����rr'#N�y[��e��x(\=�I��	��3��Ie
(���
n;2rCa-<M|Hw��62Q(KFbO���{$�#:��i�%
O��	
����,����}����r^���	�*������2�a���q+^{t(��M�y���<5���I�\���V����Nz/���~���+���Ss����Q#��2)�i/������I��v�?�5lt�������W��1��0OV	1����������|�B�IW�����\x	*�����7��������8yz/�c����� ��(����C�<����o��,���Y>G4�w?��_o����	O����q���9��$�8	�����'I`���f���������1��S0�gD�a��������t9��=��v������5������U�M:�&N��?�N�(\�~�F��U�v����P,��49	���/�XV�1�/��hg����Uq:O>��3�~�<��W��qK�D��Be�C��(�Ey�\�=)�=ou�Y*�e��e�w�����^x�e�4��pa������Qp����=_���&�+���Q]�9pOa8'�s����(�Nn�XXXXXXXXX�0���8��ENwdn��O^������s�t\���X�@4�g�t�r��8b��(9�O;���&$��F�d�������'�/t�3wj����KO����E+��	�f�a��sw��QQ��5���6���q=#i�t���.L���c�G�
0odAB��#��<�E�Ofd�bBG��c��k@��������6�h��������Ac��vg&��N%G�~vV9qh��.���g3�!�ES����R��<}zd�����z(U3R k�U��/���m��cQo�T2w��d��0|���wf�����yh�(Qj2
���;�0	��bT���\�������j[��������`5�h5&`�T�d�V�����j3.{r�}��+�`����+��*P�'����kc>��y(_4�7:2�K?��G=���Wa52����#uYLe����>�:#�����8t�.n
-w���b-�E;6������Q3q�i��@�"%�g-�(-,����e���z#��;���3"p�"$k+v|�6��Qq��\9�0�O1��h���E/�K��'<H;���d�3%�
��Bd}�9V������`6�kl�k��G��c��D�p#���w�0=�����I|�M���^���b�5�]b���� H��@tfa(D��]��;
������VgD���O�*Y��V�����8q�tt�L�$C�������I(�tF>��|)���P��|a,;h� �,
V���/�����}l��/N��C��NXm���L�nx\M���A*|�L~'�����pg�'���bd��>�
%7���sk���v�}|$�g��������oeBBv`yy%��������;~�8����/��t�[���1�����o�Ni�#���P��|=�$�?�3�K�M��v,�4d�@V^\`��H�W������7��C�~�-��o����M3&��qJ:OE=���3p�{����IH�	�4qQ*��6�Xo���c*J
����cO<R�Bw��`�e?y�=��<�y�g��kgb_�'���x2�qi_@����z�W
��s"�q#V�(��I�D�`W�{����m|c��:�EMl�q�c>��k�1�;v'���}������>�W��a����kf��o���,D_tDpp�����t���~��c�1`��/�(y�$v@B�.�,��}T���o�����u����'��&uF����N�����i;H��1�u����q5=�f\I�.�Mv��U�t����o�2�!< R�$:�u���a����s0sB��mk{2��q�x&^��;W�tA�d�YX�1(Fi%MP��8�������m|\:'��}�,���@
'�����+��pD�u6F���?�>�,�����l9F�"�c���bbR�!I�������N'ax�f���cp��0�m2	�ce�c_���1s�E[�cq�l��u�#��8R;P��� ���X�V�\��/���S�9�5��A,_{�y9�]���>Sz����t�����R���d._�w���9	��n��p����Xn�)���f\L���|2��w:O��LDT�sq+������O���%�/Sj���\�����8:��W>td"Xvd9��*Z�Y�8j����d<s��>u.�M��av���BeU5�i�����7�$@u��iG�	s���������ZT�2p0}/^�0����q���S`7O�j��A
w���B������I���:��B}����7�xM�<���(L���S�b6
%��-������������*�g�2�����8����~������w���������[7v�QwO�������>uf�i.���pp�V4�U��[S��r7���"|���;�d�!rA��f^�Ux0�����h��\��7���Ocgir�#��$
�����6
3��E?)hL��k�����U(�����z�����w7a��T�p8�������UG�<��L��{���W���q���y�T5�jXo*��:��}f�V�h�����)%y���~�����������A��e����Z��.������5/nD6���@G���zN��)c�1�b���8~�b,Yr"N:i6����!�a�	p��S0��xc4���Z�p(�����gc��.��]�G��q������>�/�5���V*F�h�I�����7������SgN���Z$��
��|V�:PG,�0c�����H�el������<\��e�Qu�L���~9���&��^������i������������6`g�lc��SO���JT5��A� �d�������n���j�s��s%>����L�y�#��&���j���F��mu5���������!
�9g����x���S�E������=�W�L!��qT+1^(������y:��05{��+?�����i�1�;��_1���Tx
��!o�~���S������/���8�~K����������.Y���<j�(KM��C���uT���Q����s���+�/���0v �@��E����p�{��Xt�R,Yz�2�7S�����0i�B�q���9�;M��[Fa�]�x��:�[�����)�\7�����Ta]��k���i���o����>8���C%*���}Q��)����h@�	H�0'������8h�[�S���WH{���<G�u��JwD&����3p��G������C
U�5�g������l=�2vNf� ��L�c���,>c_T�������K���6#2���fxh�r�����c'b���!o�>��:T?;��]�Wm�5���Sc��N<x����p���X��~�(�����D��J��xF���+;c�Mx��V�i�Q���`������0wT�2������.�m}5����^�����/�:���K��g����+]���H�t������.��U��cEUu����TADX���sP�\�>�����/��[6�����,_��}H'�-�X4�����N��'��a�u�?�eF)u�.�}�Y�J�uu�@��,_�.�X�u�^��!8�r����O�h�1i2?��yrlp}�t����Gxy�f��20�
t_�yN�n����5�h?�l��~-qg?]C�
����X.�}�$G�h���l�!��s������s�:����I]����=��jb�����5v*�%��aM�|����9U�pQ=Fq#��Q�cyv�5D��Q�s�����+�<�i�jh>*���|�F�_q�w	E�sz<��z�e?��Dp�hUK�
�����v��4f]�yE�#�����^�R�F��f�����s&aBb����������Jj��R�<C��9Sa��4
�nF�����e�=���umO,��	���=.����X��n|�J2��2�]����T��d�������������� �'�d����|,��*M�?��`��$8����������j�kw�K����p�<��V")�[�i����Pg���������]�J�6H�]*/�o�T��J���2�T.��a������������x�K]��fM��IT�r���=��#'4�a�u�G�:$)��r���`�����U�����n����-�d�����}���j��v���*�t�
l={����������c�I�M�g���4C}X��n])*��7�~�'*�xX���R�BVc��#O54<�n�.��P�Sme�j�G'l�YF����rHH67m>��b>s��F=)pkq�7�w���w�>P�9�|8p i��j�������Z����*K�]N�,�Y�VW��
���[�[����O����u�_�#��P�Tu��=�Q�G��F]O�����7����Dd~*��\�{���?�|L:C�����JTY���/������w�n���B�a�e��(S_��zN}�u�DT
�����������P}v�lu��;����������p��*������������*�&S�8Y�:�q�_2�n��`����F�����6_?Ma�
��_�����
��n�����Sp#���Q�^����?�?���>����I_/V�W�R���Kg�_R�F�w�
H�&-�u�<��7}a}e����o�����������[����!o����#~��v��m��j�=u{�����Y7�-���;������<��g�XQ'�RF�V�G>�'���xM:�)�N�+$�[9T�S'�'��?��*�YW���'6���nU35�+���w)!�����y�W�~Qm8��N�Pe������O,�O�������
5�)����Q�����:_��W����i+��O�q����1��S}\P�
%n����w�<�'����:��ZK���P�4���)���UO6�Uh_�^��a���?��'������o�0����n�I!r��Q.��@��+����8���S_�U*v\���.�%��W�>�]�d����0d���/�.���<F<���'����;�?�
�oTo�eoL���)�<��<��9�E���;�fP7]?^�{���#��Z��@�e_�?q[��7��3we�ZaVb�x!�z�Vik�W���\�p��*+��W'�B��� �Yu���u��\�g�}�[���~�*�����~4��y�{�)���.�_�.��n���3�m~iNQg��!gb�+��T���u��n0�sM3����[%L����!���G��~t�*��\��.��������'��PX��*��yK�����-8`\���K�Y4���T������%��Q~|<�|��W���Vo�-��B�B�B�B�B�B�B�B�B�gA���R���������Ohq�0-k���*4��#��4C�&�D����LY��x���������,BYA9�����w�� ,���w;r��k�3�Qa�A�����������Ch|W�t��Tn�
������+Q����-��H�K�]3�h[�X��'/<���Oje�
yv�&�cBz'�y���JQ�W�����������tF����^�>�|.K�6�>1�������}��KL�5?#
�3���H@l4wcKD��hS��,��}���g)���T���������deH�&���
v�C��!u�?�w��$
WAO����ht	7x�+�g�y(q���!��w@J����������]����F��q���[>�5k�U��uS��� 9P���H����N[��(�nL.��Yw�%aP�~���D8���WT ?�;Cb��;�:��4�A��r'u����R����l��.
��nn��/e�#zvO��ld��e�KF������D^��������#�;��k�����=��2���:T��&
��p���5���+`����#����x��|n�
%��b����H��z)q�������f�E)7]��1mx���	=���w&3��HGo����V���\�R����z�/�y���4�l�Y������
�e���"r���t:�S~iG����
*KJQ��z�#&J��j���4�!�Y����������&"��]S���	)��E6��oUr�x-q��A
Bh=�So�M�F5-v���_Q��PL���s��"<:�z'�^��_���U���Q���/4�U�b�������V��^�����&@������7?��U���k�����]�I]Q+�QWQ��v�MK?�@���������T��S��[g5
�����'��-��3����u1m���/>D�y����?��p�;���fc��� /�&H�������8D��`��~5���P%�%��1�'m��Fm�Ys��y���_}��d����n�ea4S��?���px��<d�s�g
���2z$�n�Bf)M"����/B�r��+PR�~L�(�)[$�(��/�>b�h��Y����2M5�C������#���i�(��"|l��H���2���d��)������8�OGN]�(R�n�-���dh���6�R>1��~���/L�: �����o�:�3�E#���}����e36�KTJ����D-�U��(/��W"4��tF���L,�i��#M,E���o�RP�A��#��0�<�pg�Y>�������I]C$��uMSbBA���Wq�N&�V�J��4������QH���`@��
Vh��EY4ya�Q6h��cT�9FI����'���M��xl|��q�>`��������Ic��vH�#H]�h&E�j
m��r� ��}��E\��I�v�h��������U��G���O`�'� e�?�)]�������E�T���
�=^��cp4l�FF|=�:��9��C����e�!�BS�-�q�a/.���}����G%4�~����&�x�%��+#�F%�`��|��H(�z��%�Kl�|���_�_�:��(�����Y����<T�7�[N�[��XlH2YP4��I:#���Q8
����|[�o�/�&��4��@�Y6Z��T�|g�<i��Dn
V�uP��6����r>����S�����B�3���&�z�6�{��g�}���L��`M��Ak4���t�+7��'��5x�f}�H�=4I�r�D���'y`�x�$h��O��*�����'!�+U($,���9�D^^�7�S�$Qb��	Z�[�o�By>������f����%h���n��^�<�3��7�Ow$��o1��-;z�*�&AX�%����B4X�`~~��&�M/?����H���Vn��A�������k�{��Zxh����K3��9<�o�����e���6�
Z��[�������a:^`�f���-����p�M#����1Q����7�����,,,,,,,,,~~.����DW2��\������D��]d2yL��%�^�U��x�0j��,^�';��)��+�����B�6�E�6v���>�l����c�m���4MW���������<�Z/�����F��qQ����H+u�����g��/y��k�0�<���f��7�4�������GK��$�g�����BW�h�/(����4Fz�M�	~r���(��<�4E~�y80d���)��u�����.������Hn� ;����e-Xf��y��&d��L)��3#{���/
��Q��\�e����{�3��7��X�e��X�<�gdd����v~|�~F����5wo�]F�E'X7i�M��I�[9\-<:��!�����D)jv��`;
\��Y������V�U0&=2b����������������k����'���A�i[�����>���i7�C��G;�,_c�k�N��4)sK�t{���`�j�-�(n��jS�1�������w��0�����F^�������<t�f�g��(/��+O��> ��G�$K't�b	�F_���6�W�R�%��5G]<�_�H��{����Q��� IGFh`BH��AO]�xm����Z�4z�����Nr5�`3��Pg\3,�����*�izbxhc���R5�[�40Hi=ZXXXXXXXX��0�R&cZ�9��m�l���\Y������*x���
Q��K{��!k�(\qxG��M�H�4�����.l�F��~���������aPk&]�1��Ipnmqg,4}S�v�n,�D��/�<���O�vb�y�C�'��
�[%�N~}��k����+ +�]n4��xk���G��^<<m����X�TQ�xx6�`���?�Ob�l�l)Lx%�7�z�X����9^=m%�NHA��oa+.@�����%M���#�����xH����H�{����z6wc�����(?��G6��G;�J�]W�_��������|����z��qhR>�D�������w���H�}w-���v����s`���"F7fc�)�1c)MD��CG��%�6(�����Y�b*�$�����j/�m�e�'.ek_���>����d!`!`!`!`!`!`!`!`!�{C���Z���{+�U��YL��#g�3v�{{x \�F�N@��S0 ,	��o(EE�H�|w�����-Z�u�wE�N��9�����+����������������s�f��������������L^X
�_�2�,-,~EL�rK��U+m(^KE��,,�g����\��u������������ �s)�}L^�^���a!`!`!��5����G�F$�k=�dW�}&�~�X�ZX�2XJ�_g+���B��W�V�,,ZC@����B[��7�������������`X,[XXXXXXXXXXXX�>0w����YXX�/"�;����x>���m��B�B�B�B�B�B�B�B�B�B�B�B�B�B��@�T0������A>�)��>��g�5�t����}��������������Q�(����!�~�?�o�]<����u�������F�n�I�wY��&���2��~�4}���y0w|z|~�5/MNgo.V��v����?����������p����%��f�G�NB�`@�[�����x�M3��	S>[�W������l�A$>���J���>6�K���!nO[��1���|��)1��u�%�o���������^�����S�"���j)�v��C�����-������|��`m����l��2e3��&�����Z�f����~�x�����K=xd2x?�[�������,���u�TL��������C���~�q�Lz7A�e����d��T�}x�-��33��2����5F����8>���ER�����\J���9�Me�)������L�����g �
j!`!`!`!��@�C�8w]iP'�S�AW&b�O�2���];��{���3��L"�Q��c�l{|��Lb�U��%,����!�m��,lz�00���	�04SaM�x�I�L���7��'�u^��������=5l�/�<"@[���^zD��R]_��'���}���{����E��a���y�_����)���<U�R2��N��_s�EkDm-�?�6�����v�J��8��%��(��C�a����+pxDR}�nL���1o���-��0���l�4|"t�-���%��<��=���/��N_���)H��u��`��I���a�p���|����I_���Y!�D@���|��/�q����s�4�=Lz8������)�o��.���X�j���Z���$��v������BY���<��s�<��9������[����c4�����h�>�yK�<����'[,�0!��Pi����kc"�v�Q�����/�-/<~x�M������@>E�[��3�
��7��3�_�s�v��oI�Q��%?��|�i����\������J�F��F��+�;��t����5�:6Q&W��#�N����t!q���
��@<G�=��DU���a���(�t������^���lU���@1����	�9�!-eG�����n������@lD�Ip0>Q&������Bd5�!����%�s��4���4�Yrj����PZ2���&�;�D9F�Gx\":����b��a����2��1�
�����-�q�.U7B�"�]�8�:� �����t�b���P�p�����B�������SpX=[�Yc�~Z�ck@mE����h����n�i��IjL��p9���V�;�j�FXHjFb\�D�H�A����`/�C���(!��}F�[jW��LYhT��������B� ���G���~)��c;�'�"wdZ�:k�!��)Amd8��|FvA\R�����ck��+-D��o��70�-,��1t�@$��D�����[5
��Cvz	*#:���H��B'��3���2�{-�V���A��@0���{&c8�C<�z��� �dg��($!n�u2�����]���Qw�h�U!{����"DQNKi7�7T,�M���t&>����C%��U�P���e�y�]FQ~�����t��99�^J�
CHh(��g����r�Y�n�3]j;���q���������o�3Y��I�p��!%4l�^W���
��*���nT�q�0�r%2oP��4����a�p�����v]�S�'#)!J��}�e`^�������bQ�v�N��`HL��]^@I���~+������
��y�m��}�-�)�M��d�������~�p�$���a<��+r�>�x/���X[����cd����,��.'�7���*J�pb����4f0��t�J{���=�B��#/=��� pp;����"��P��>�����LZ���v2�*���U��ID������"�d�������TS��oq(�{j������a�KIF������J���<�������:�uLB�I#����6���k8�����,l@nX2�M��x��4O
��nG������.8lBt������������|�:�[Wt=X�u$�n��~��h��8�7e��m(����>��%�5;�Vyn'��k=���@����58>E�u�s��i��zO��P�����z����}p_���*Zd�����m7���P��l��#��clG
����R������������������.0��h�J�.E$O!�z���p��t��c�q�$w�����k�������`�L�e�����0�2��&/
�� ������rL�!R��4np������������P���]��p;$�Df:�=��H���A#� ���7�A��W!��%
6�:���>����nw��lIAI�S�r ��8�
P��[�;���>��%q�2�.�������Z�F��f�qLY��#�7�����c�����"�����AH��K��~�u�[�� ��G�{����+;
��C��% �[
�����A>unFV
��.\��q�E�t������7��a��1�:|&��Q�����T��r8��.�S����g�c�6�{��2;N�c�B�{���e��e�u��Z���QEE_����,i.~P=�|K���+�������T4��;{��2y��2u��4q���S�[&\�">Q*�R���l��~]N�����57��n��g�WP#���)7����;T���)8���Y��������,������F�~b��j�:��Ya������O��R��r�mV����YSU���j�����b����j��s�4*n�N���W�C����������Y�4~�������R�n#�O.����JU�UC��{�����'|�N}$���#���pd�����.=a�85z�8�w��]����U:���k��L�>���<�.3y��������
��P��T����NAo5��1G��_=��w��,;�*>L�����xC�������Y���y�I�����H�������r:�������s��yj��5b�,�q�z�@���e�R��Kn
�YU�jv���P��qX�n-)U;$9��b����3T��]�e��QI����&�X���{le�����z��N��5������,_����|������f��p�
w�����L���\�����f�����,:�����>g��;XY�����?��?]
�:S����f�������������'U�g��//���Yj�������g^S��R3��Qs?F��j��ja��|���~L�����6�x�^�J*���u�e�S�����O/������6[��5`�|���jwF����0�"Se�zG�B>��0U��6P��3�|?�Vn�T�u�����,���5u��������U��:���T�o<]�Jt�%������_S���#�������H�s��j�}��
�i+\�#K��-O��;c��/�+U��i�����\l#�Y��P�L�����g�������?S�1]y�Zs�_��(Uj���;�-f��j���j�h�!'�EM�[���h�q���~�{O�e�i��[�����/U�r�K���"���+�������
��p<1�S�
O�gVA~���r���N�����B�?�&� ��QZH�N��������x��/�Ml)z��/����
!f����E��d��;��9E�@Xa�����J���W�/��0t���q���)����o�_��]W������W�a�V�����)��qy��o�e�0����J��j*Uue�����N(;2?�>����u���u�;I���
�T�9^{P��e�cU�����.�\5��O��� �D�����@U�lQ��p�Z���K�=�u*C���O�r:*U}�v�����E�;��#���P����:��B���A����
����w_<�n�t����S})tY[d�@IDATG^�lN���?��zH�o��9'���P����Y�]�x�>&-��9���F5{�$5u�T5�����f*�����b���,�g��a���F��#����1�45k����S�>����x��q.��T��:w����j����c�����j;�8M�b���#&Z�+(�U?�,��i����.�z�Z=�y����m���7�6�};�T30Q��0[M�fSS� ����M�Z�oRY���n0e|��es���GNy�ol]��^a�Z�N�����E�jCm�Z�������������j�Z�����5���l�?6��v|-�,,,~Tr�ZVV�����?�USS#;���j�����#4=��^�-����s��������x��)�E4C��j�_�U�s`9����6�9U����U�P����;�RHSQ��W�����G/R'.:M-��i�2��	A��$��
�����,P����.���HtZ����:�X��ss�7gA������6�:u�Z��[8Y>N�����T�WC]�V��b������TT'F&�������������=�J����k�s��|�	��d������Z��*U[�V=>�~3�R���$W���|F=�}��=i*-�P�����?���N8]���}������*'���5L�����#{+����U�/1���M���L��@��j����K�u0������l�$G��Y� 5T��A��%���|u�d�[[�z=a)Q���R�7lW��0�/ �^���'�e�WG�V�\u�����7'�����{&����v�z�Mg��I����I�Z�m�
\��Vx`���)�|�y�Z��cU�S�W���U%�$�Su��v�k���q�(�P��nU�����u��'��r�����Ce�j���y�n��O����]�u:�-�Je���^�5����o�yZ[����,��)<���s���������D�-�g�U�8_�|�#��5\�qK�������Pga�:�_���3����/T��}X���Z����|Q�~d2��{��OK/���5��V���8����+Tfn�A��]?����^���|��3>U�r����r&9�j/����V9��YG��]�>L�(�E�������A�+����Jd:�v]C��Ru�%��>��{20�D�7��-WSvF�f���O.W���l�;q��9j�2�Y�����f��:�V?�X�p�UQ�+�TX�Wo�Sj�g�[�^�f��G*�����=Ca�����*�tf�V�g����s��1,�����%:L���7S���1�~H�v���ygP�ya���T��A��6c���n��bk����^^�9��v-����jt	�{���r�K�}A��������O��+�O�����m�I2�-ocI��=u������d�����J����������W%i��������v���3�����C-(�e�/ XI��K��qW������A2 rm�<$��gbc����)����<��4�jL�xF7�x�6��#�~�u<�3_�6��o�M�U��Z�W��$z�e����n`���z���������^g���Z����[���e��/���l�r�1n0,�|0�>�����,{��O���N�<�I����'���������8^6V���������J�B�����S�p�T�������e�>O=��t5��w�vrgg������8'����>�
�c���R�P9��m}M�*}����;��������U���
gCy�j��7��&�yu�U��X=���e���/Pc������Y+��.��&���7������7�������:�A*8��8Y�4$UM:|�����Tn��m[��TD���o���w7�S��u������k����s,s��i��������+��Z��������/!��s���O�5�����U�������z�{0�����p!��[�{sKKF����D�Y�[��G�g�n#
��#�r���7�6�h�9!�f��Z��CS�{���*��8�����N=yz��Y�5��B�Ps�:���.�U1�9Y�/�}�������i�|�����w+7t�G�g[���s����<6��.��Cj���+�_��>���.�3UU�3����K>Q|0W4��]���*���s*���Y��`s�e�>���~�#����<h�(qu���������W�+_���=�'��'-x��-�H���..U._<]��i5W[�2��w�SW�G.\����"��������B��R(�������?��������#zQ�������;��|����8P������oW���s0���1���
4��4W>2�V���������pl�����]�%�#�.���1����y��|n=^�W7"Q��J|�u(���i��#-h��>�7����i(@�m�y���y9j?��}0m�`\zG!��;x+��LW5�Cv�����^��)%���Ic�	�����k�7����!���e�=��	�^d�����q���0����C?~�<\��5~9>H����c�����d����37i��O�X��[�|��/���r�V>��W��S�D����7�y��� 8a�'`n�\�P����?!���=g� 9Q>^�_9�����?5�y1�!��5�&����Zr�w����q�sg��} ��@���6(\��9;�9��M��@b�h�1yo,�8g�����Ua���!6�i��81� |����S:S�B�.��U`��]x��A8s������iX4�+`�:dT�Q	���]w������+�bE+��H&�������9y����L�e�x���Zr���4<�O?������c����P*�tZ�a�m�?�"{���,�{o��i����o�����{ZO��@2�6�18�?�������X�(C&}i�B��R^�a��'�5l`:����Qa�|���d
>�V��{�B�GD���vd�B'��\~��x��m�j�|TjC9-	H�7���;��h�� ����;
�D�?C>%��^����o�1�P��&�����������\��2�����������8e�I8��|��[lf��������l���������X��Y�7�/bk��S�!a�����$��|�>��oM>�����>�-�B�a�����Nd\���P~H.mw�L�ovfo�4���������V����D$����._�I��������[C��z>��������6��Eq�p�,����]��.����t�'m��(���kz�4?���#��C1����HF&��	g�G E o��*�f(������""��GIk�S�a��W��1��d�����F�F���	:�*�W����%b���l�vtv���!X����<�����8��i�W���L�=2'e� FS|�9F��7K�M�����<4.6�h21��U����WCO��j��Lh��#�3G�@�f��I�������C#����+�4��t�?�4L��?~�-���d�~����n$Q;����	��!�����Md�h�=|���o�4p�����b��#���So�}i���F�<eE����i("h�)J�d��k����M�[������#O����Icy[�3�2(���9�C�i"��y��������5
B �ad����y1���;|#���E93O>B��C8����s�G�c��opn]�������I���>������4�3�;:��g�i*;�}�<�j�����CpBT6��2hx(I;b�`�.�����#U��������2w�u���'�PV�5^^��?���������Sx7�:��1�.�]g�&l�l3�:�������8�<W<�x������:��$���+h���&���EG�X���o� e�w�����m���p,�����3�r>�&7'=�.Y�7��
CPB9�g)�1�x���]o��I�O"F�mIx���J�L���0#a�6E""��|�Y���q\������t�#��#"����48HYf_$���:F
�T�G�\�vb� d=��'�i����D$o��hz�[p�O���6�u��E7��O���	@�,8�����������"3cW}"�]ec���3s;V�O��'�F���[���0�8���	n�	�g�0����n�����k[�9W��FTH:��\����DJ��I�D��u�C�������	D=w�L��L�������ee}�m��[�4�{r��:�_d+�_��Q����D�Z���8pp�������J5�[{P��<�R���6���o�����XDs�"������_��W�[Q��r��g�����>����n�������7f��I�LP�uP9X��W/a���H1��2�$5����hk�@��a6&�����(�J�DUON�`q�2��9�b`JzG'a�`TM6�Kz������8�6"�(�#'�kX���&���f�c��E^V&v�_�#�'"����<���D���/���O.0������?�{�e��[
Bg+E]Y
��������ZSi���n�v-_v���1e��SL�h�V�6R���z
��$�����M�a�������8I�@�x�;T��|
��CRj���k
��$�l�G}��X�+e�F��q���hQDG�E+�")k��7����IAs�ox?�
������8����Y
�U������Z8l��O����h��%J�}��O�&r��_'c�������F�k�zu�X����D���0qT�d\F�Ea�E|�+x0�H�&�������CO������&4�Q^���ZH/���'���Z�N��D6^i��r�f������t@g������h�:uF�1����'���h�`Po�@5h��
�Z����g[��6�o/�&u"����N�A��@q����b����?f����������QCB��A����P.{$�(��U��[�
��������)�M����N���]z@`D�Z'g+�Y%��:�$�6��:l���1��~+��"�<�c�b���p�}�Mi5���R\<6�����#N���~����&��oX��r�}����/��E�&�������<�D�T��D��
x���xjt"��"X�R��<�����_����;���`�,��%sGc��t���K�r��	G�@%��tm�;j���0�����p�D�����39f�l����(Fuy	�i�3"�v��'7f����J��
�����Kg�PE�{
����	��>1)	����"T����4ci�#��#Sm��^_oGA�u�]��e��Q�
�%�l��(�BK+��UDb�tG"����i	6l�Z�LOr��\b��������Y>��.e������
U9�(���:-�,fV2J�`g�*�����i/�Y��\�I�`?�mGf�ul�apG�vg*Ah��������Q&/c�?����t�����&��}���E]1r���[
&���������k��b#�j�*D
��{-Q���!���:�!��wmJx���3���#�����oQ}��!��y���aoj
D�T]�
{U5fA"�Q{ JHg�>�|c���6��������5�����1�����;b�Tl��P�C��������x�BMe��*�lv;m��Q��c�M��.�NLD7Z��r����-��|�6�^P�������������9�XT��\z�-��wq�����h��s/t�E+Q��^�Z*�
��qN�����;�[o�?{�_U��?'���� ��{G�&�
HU��QT����� 
�"�P����P�{�������@�����}��������g��Y3�f�*��`m����htZ��w�$�T�R8,�����}]QfW�T�g��K��������
�� ���N�-D^�B!���8,�X�4���E�d�$}/N�m��	\��[[�yk�y����������+���r�nH��D!7r5>�,��PgfP������{:b��7<�Ql����@�P���$�����?D�Po8����Q�SA~������n���M^$�]L$7�-T_�f�~� �(q/��\?�[�\�b��P>�+��?�����s�p���C��GyO����a�
���]!M�9u�hO�D�i���������N6�Q``F��R��
��������t)�H����l��A�1������pT�c�[����,G�RQ^6��3�k������6p
��YJR��������>��>����x�c��MUc����J�
jm,��Ic��s}1��Dyq1Jc��
��eg��45�y�H����oNp������O�Z�r@�&����1!���y+��V�����
3�[����ia�d-�$��0=9i���Fr�+���10	��-��B�y�O)��s���/�#�g���np�
�S��&�b,
����U��G����<��
C<�B>����?u:*def 39�4%�M:�G�L��Cx�7Sy�k'=.�J2�'���D�k��K����FJ��$6@�q*8]���lN����#�j��2�w.�5��j�=s�b;Z ��/<}-a��Z��*�kTI�9�o�{z�=D�y=�5��U��:�a���1`X���F�K\�PB-�"*yz ��L<�SeP���\����~9���q3$Z�7����g�Q��)�A���	c;��)��d�*�o:%�J���j�������������t��p	�_uMG}�}I[��������h�P�R�e1.E��w��{�s��(�!wi�C��G�������>T�c��	�^���D7n�X���1�-d��g?�����%D.KV�)���k������>��P~����9u��;pq�/^���]Y� �E��E_`LTGo��N*��	�T�w��E��66=0��	�oc�n*t6lW�����H.JBy�p�
���*V�wa���R�����|?!A!Oc������<�VI��(�,��G_��	m�*8�l���{}f�Dmj���r
V��Wv,��(r�8�(�1�rQf#I=����K�`lH���FDd<R�C
Z�Q �A��]��VZP�3�}�3����m�(�og�{e�����0��8{�?��R
�=b�?��AkEEc�4���
A�RXH��/��y������h���8�UA^�����;��Q�K:/%��PKZq�k�<j)���Hoy�j�?WY+�?m�&��%qU&�;i�FQ)-1@l���J�PQ�M���}w�(|�3��CYw����;K�����U���������a��m���DPJ�'d�(-�F�OI�?��8��}�n(������cxO$RL����/O��]i�},��bS�l�M&f�T9o��d�n��#��V4�_���w�`�D,W(��g����|��w���
O��H$qF��`tr,�-�J�^���I3t�s��Yca~�L��@��E�f���e^�%r8!s�l%����K���
8Ww�{<���<�y>F�km�&��g������p��P���������>�J�N����H�����q�0��t.^	Ep����[�K8!�:Ptv+.��y�|����5������x6$!s�auI�4���o=66D���z�C0r>Vow�u���K�����[~�X�3/��h��Cs���b(S��ySR1�g_�� y'H�5v^�i/�Q�z��}���\d���/������$`f!�x
����p+U[Qh���J>u�����~EP��q:���L,[��\p����	$���

f��������(,S���{`0�y���66���WpT���T�����2��#���Q����E��2�{�NE�b��pw����K`��.
��G>�ak|�Pe>�������2L����r�OM���x,P�N������z=AY�������������cG������-w^y?s
������V��M��x:^d�
����(�������_7D!�=6c~���oal��h��@���<|0{�eQ�9������uA�x\����'/�AFw��]����3���*Sp���`��8�ZF�9�3��F�j���xk�F�X4I���6�9�'�]-BT��tX�.%[Zt��[0y���u���3�@�/):��(/iI���ynt&�fSF�a�T�p�;��
���pL���2j�������hsA#��8��h��)��S�*����&di����1�����kV�,.D:[M�������L���_�qMQ���A��H��&�j�5|�B�4$1��H%	��q+�
������X�M�]������M��D�{)K2����8�@������U��r�o���?��0�q��u�bG��(�>���?�C��3�cO<��R�T)��L�d�DJ�n,�X��*��TD��wl�d��5w��X�y>dp[��-7�:4D��0V�C�7p���|�#Ww|�y��~�^�:�����[.b�����T�rXC�xu���{�OA?*o�>����q�U

L ����}��9o�|/�fH��xq�>���.
��^����fl�5J�n�q�{G�U������P"�3i��U��r�J����q��%
HfT6��4�������Oa��4l�A�[
�o��J�p�U�����6����<�j^��W�D`0q9y=^R��B�H���8w�$y�\4��O�������n|	�F�q�Vh��-,;�?�6=��&}G�N��Y\�R-h�nM�syt3f;�"�c��S�d���bq��5�#����q.�Ru�u��@��b@��j��~����A��"V�����C���y*oG&V�xqC`��)j:e���9�1���8��<J!�xc
�U
d@d�g�rj	I�@�T�#�|$�K�K�zp�FM���L��1o���Wd�����(���&�G��%$g�����p�����w����2��M51�9�3^��qM#��#��H<{d��
y�x ��\�I���%�+z���1Ji�����""2����n�>4���	-��Y�9�>�O�����V**6O���Och��xh�jl���������)������G�
o����
^2{�T�,��5��w[4�N�G
��0I�	��u�����c�p���]�!�Bp��R<weAezF#9z�g�#�17F�%�$��{�c��^�M�P����S	��BP��	�m��_SQ ���('�<���~�Ij��Fb����,�VXR�L�T�2���������ruG�m�7f��ofg�S�nG���<SK������}������`��+��3/R<�_�jU��Rc�����7��U�����o��#��p���&�|������$u�����������o�����MM�����+�8���F���,Jw<p�P��Z<����n���U/a��C0:��ta��g*7�$���j�ak��&��4@n���j��r�?y��z
���K��m����-;a��t�)|��.�����z��q[S�|�l��qi��M�������s�.X�g�xO�%����?
������p�y�Z+)p���(E�����{Y���h'��9K��������2�������.4 �	�����[��=�tp#1q
��8Z�#�����k������c\L������������A		i
���w�`R�:��(���`4[����<T��G��tt��Tf��$������b����^�E�����Ofb������\����_
������s����jN������X�Qx���%�x8���6$7���,33��^��
K����)?����&]���
������U���vY&�2�Q���|���uR����!���O�����F���'��Y@m^j��Z:���
F���U�P��hm�#��a+��=��S����������8�3OcZ]��=����xs+2���CM����c��L|�������427e2�FnA����wc�3��8�O�������3�|)<73NG������1��
�q�&�r������G��s�����JW
r�c"����!��x����s~�P�/��J�|:vk�;ZG����rq����l5oWA!��2�
���'�Gq��FI�qs{W=����#�*A�/q�&���-���K#c���K�����;p��������#_$#���N����~H�=C�!��{�{�W��K���	T@ab.N������0|�i�/�}r_�������M$�����C��V:�����bOj��_"":Vs5Ek,���>�h/%���>�&`��y��C-4�xps+;P�6�g��a[��lk��/��-�.
�lG���a��<�q-��HMK�_/=���`��=�rX����r|�S���Q|�w8�<������Ld�� 3��hb�F�BC��k���M�daKZ"�a�������
�?�_��?.`lC`B%o]�:���q�S�c�nf��%�\����� ]��B�����)(�%\d�1F�[�?�����������k8������f3���r)�T���#5�����o!#+%0Q{�����^�g�g���g0�����F�0����qKj���w���r} �d���Y8�[�Cjd��*N���!�����(�����c{P��n��0:�9������_B�Y0+?�\Wk&����0C�v��Q������������Y(�pZE�-�L�V2��\&6����De�msq:b/�YS���4�q���5C���++�g���If�
x�M>��^H|�+<]L])�6�+z-�
���WBj�/���,���Z����q
#_�
G�A�H:V���+����(-L���5�l�����(`����X1�6~�_X���Gs�/���"���W���g�8Wd�q�t��'#t&�'���{F]��C�����'RB*L,����kX��;�\������ca4,��+����h5�	�k��Z����_����Ng�+���73k2�9�F����-��:�u���Q���I������Kx��5�u+y�TH�����`���X�~�Q��|��'�dt�?v����0��-8]����Y���?>��~t�&��#v�?&�X����!@���d���_L�����qc�!��s�^$�������a�0P��:������z�d�����sj�G���n�0u�/li�F[+���Zn�
�����;��=����I��}i��I�F�[�4�O.�?��?}jp��������p��isu���#�b����@R#W���E��G������5�N����0�[�J��y��P1�Z�7N���c8�J���+��z9�0>:�����h�OA��h�Q]P%d����b+��c �
b�Pqu/�����������R/���e�$Y��NF����9��������qm<�]:����Q��a�����w�DZ.�a��
���CWR��($����H�pC�h���C!���E��|?�����`I��3���$l��S�z�Nt��f���^�4E)\6�F4���v�w�/�����6�PQ��D�T�����?{>?���7`C��CL��*N����h~��JV}{4���~������9p��'Mx���8*y��F&H�x��l�At��uq[1�0'������F$
/'b��E�(���F{[�mqB:�(���H��@�w�C������C[���DL��"�H*rN���N�h����L�{��������-�	���T~KFbR4���8>]�6��=`��i����7���`gmB��\�|�/��NC�.��1(;9�i	�VO���+�4R�)��
���^�}^?P��i����~�j�UC]^��:�������'�=d���:&c��;1t�jl�w����9o�4DR��p-��w��f4=�u
�"���=_���h�������M��q����������M����n��(NE4�C��V��R��C�yT��4j��dq3kNSy}��OD�JV�K����0��K�)����8������%�<)077�E�v��f�<�6x������y����
�ej������9�3�9J~����"��R�B���U3��|!k���(�����>[��#��E�>��q�����cw����'�!��B!����)������i%4���a���-_C��0ra�v��1B�]`7�B��b��\�f��������lNStNy��`td������mzQTQ4���b���p�r}< >�������uB2�E���,�UO2w\>L���P6a9;��8���5�G��/���U���	.z.�Z����6A�{�/~��7�[C_t�L���e\��k��b}G'��
VfJ���@4��� ���:T���g?WX�����qb���%8��v��<T�&�����'�`3��)�
��-�e;�������:ey�����qi����	��S�]Bw�<�m�����Z��B�[7��)�p�v�q�%�c�f��z��W���/��W���Iq���!k�f�
Ag_3X��T�fH�p�M�[�bEXr��>���|��B�>���p?_d�<�Et��D����*�g�r�i�_��j�:�u�HF��� ���4T�~��)]��G����	=�[�Wc�����@{o�3�B���p�>	+���)Td�vw��E�u,�<�BGL��0eg�����`��mh^aoC�h�g��$��%�K�eq[7�F�F��)���|�5F�0o�y��`�����'�v5{�����:XYJ���m�1*_��B^)�EZ�`�~�Y��h��v�T���_�������������$b�
��^b����@CW���Urv.��[�_B�V����
�d[x&Y�>�f�'p��+"6��C,��f���C���m��O�?E�i��
�'���uK�����{���-6��&�\1������#]�����s��X���RX�A�����S�q�X�9!��v�"c���^
�&�����B�+�n9�nCd��<=���.�RR�n��F\�j�4��
?7�w3�{������5��b�7[YH)`���������h�m�~rB�v��Fk��7h-�:��+n?������[���Yj�tP-e���"�����^�[�p���u�QG���l�
�?���t��J?�}+����ky��V6�����z�����������sR����������/v�0��'&<��I�D��5���5�q�@+=��)=p���S)�z�n���O�w�B8��{5v�r�B���w�K`C�M��D�w�G���m(^}������V�
�8�)���
v�n	�����.����'���"����6������J����J�x������i���C����j��J7uV��������.�a�u����]s[������e�C��?b�!�V}�����CS�,�U�
$E����1v���h$F6�D�#�If!��&���n�]�a�"8 �VqqI����G������4���f����Z}4s����O���Rd141�p���
rG*���I����yx�t�y�!�����K�%,5IdSX���e���Bg,xv����~��@��9X��;�5�������I�if�(1��a�	<X�!QK�����B�^c�r�:|1fc���y�%L�Nm��f�`>�m�5"'�� ���0:oxS��T/4�|/53�|�
����'}�9�h�����C�[�r�����5������u�N)SF��~��'{a}�a�@yH%k��N�!h�9�v��t�q�����:�������|C4�4�oy]4_�W�9:QKtn<��kobS�5
�]0��p�6��5� ?�����~��O���n�<@n����vd	<z����"�����������jI���j	�L��]w�DT���f�]4�x����,6�c��#��3T�����n���R�k����j K��o��X3�M�X���z���
u4B���0�����
�3A�1g�~?a�����<��X�Tzxi�Pqv���{>����7���1J�x��&����i��V���*j~���0�9�����@����7�[J���;�H�"d�vqGP�QJ�E���3O���6��g�b]<���7��t@o�lL?�.���$[���#/6�WL;Q[�s�yi��]����h��3�X�1�Y��{�^�S��M%zZ�Z��p4��XL��o���	���8)��	�7C��>���*�=��(������Hf��2
FX���<6�f�k�#�"#
e�t�A��<H��)��x�\���u����.Gs�R
DR��**\8���=�5��������K�C&��9���URpgL�f����k��	��bM��p�����1���Q(�<D�����Zv�ajH\O����|y|;4��q���iEc���PxVDM�L�_�n�gS�;HL�1K-.��������}2�R�A���9r{H�I?��0�����#�rK�V]��J�9V�Q[���_���0�}<�1\�8�P� =o������*��������wwje�����9���#B������!��]h�����M�����jf�����0��#��	����
��������������}j��.������xx��D��
�1���E���p���f�9���
5A}�Z�_A�L��Vx�S �}��t-V�E�X��L1-����n��W��$3�!$��Sct��4�H��Q)..��o\�EQr*$Q�_\���kX����{������v�e[q���;������|�f�n0�n����l-m���>KH�y����B��<<*��+F�n�h�TL�����/�k�_"��t�_AH�V���Q�2pn4.�����t/��~7sD7?t�6�(�f�JO��l-����eb�#I�����q��2����R������ei>�Y��_�u�������H�X�'#0f�P��hFQ�9����(`��������� �"�F���DOw��	�����[�� ��5+Ie���
�s"��{@}�P,��:v��4>����0�c�Z~%wMR�>q�7q)C���p��8����_�?	�!��0��t\�>z��q�_��,|���/}BA�����?�-��)��*�Z�(I�{�5X�G�2�u���J��m�/��qV�@����W���	�q�������~��p��	G� ��f�\�<��C3wCc�-��t�}&CVsS<��R,�I
DK
Rp��t�=��r�5����H��z=W�eh��6����[A�#s��|a��;�P����\�c��=y
���4�S���9���&��|�+��~�����*W�2�J-s��
-�l�)�W��W4�����o����+�f��@���3>�=���Q����>�,���=~���W�v��Gj8���-�����[��U�g�*��BG��k���������-<���]�:&��������2���M��'�!�k���5x-���?�i���*�����{ ��5QQLT�Wr����+I4:�����[����;7B�p�S'��3����N{��#G�Ow`K��T��g1��2������;�E���B��O��"�s�]������qx&k>�`8����9�o�C�v�:��U]��@�0P�����c�'�����Y�Rq����p�Y?GW����T����D���x�Z���Y���F������G~InQk.*O����UO\���du�����G���N�������-�L���@YDf�M���<�w<��H,�*�)���K�����g�����8;�
��)�%��	�5��O�B6���������I;2[�������^D�	����+H����z��#8��O<�k>bo�cq:��u@w"��A��������2KLAx=j�����[����0�f�;����s_o�����x��
��h;}��uN_;]vd����n<���?�;����s?����C�Be!�c�I�������"SX��K
{n���6k����D�!-�pa[�e27dh�~"\4e���4A�����:_��F��Q���,�����f���&��"�<����3����q�SxI�	Sh|j��>��w�H_2��we����(���a{��QG�_gF-�� �g_j��K��sWc����M������R��������[�#gG(d��t2�1H�?������2��$�`�*�����t�v8*����?�O\�#0I@IDAT$�%�wo<�u��<B�S��H��4
�&K��Ep}��gcBGo#Z��p���T3cQ"L�����3��Rmk�����_���[��+�QQ�������B
��x����^�`T������W����`���8PNAs�����1,�c�/W�WE1�2~����*���&�����o'��������I�*i��>AL�!D9�vxgl��S�]���=���	81�5<��V��(�K�!D�+�c�������O��q���(rFyGM9q�~�=0���x(�>BG|�q�����<��8�?��������E"����U�:t���"��9�������)���[���G��SX*	5�%?�F�rb������a�������|s$m������������-Pf#�T�'"Rc��Ux��T���?�?���8��������2Ll9�����=|��(����k����G��Z�vSJ��3�T�I����Q�u�F�p<�� ��u�
@C����jz/�S�"j|�N� X��I+����0�u�#E;V�
�\�jAB��%�&��y|��+v��2�v�U�'B_Ce%�������0���f��&rY��y�o�� r���%�/-r���VB!�d4���k,�^I!��D�����"l^���{��w'�C�j�+J�Q^@�O�j}�/
nDX���2�k3�x�v�n��t�P4H�����O.6�p>���z��Y�
�
�-7�X��+�G��"���W����4�=/*�~���l��}%
aDI�(�<J./B����:��D��7
4���o��o�������o��B!��/��O�1���q��H(���%���������VP�!�������W��h��-G��>��%%�^�C��'h1��a<������(%�Q�v-Q�bFw��c�LQ��U��S��n�����]1���p����c�Y�b����D��9rj����G����?��h�q&tW3	$.DVa����t��P�=)�!������`����g�Sh�I�Ri����j�9����v��uG�m�9��U<�?���W��-�253f����~(�(H���z��xL������k��"?�'ie����D��
1��A��R�s�3��A=a
��BbYP9�@M|�W%��4��I�=I2��K�39���H��5/�_�]�����7n��!7���;-��my�"�L=@�`d�'��9V%I����n>��rI&G���%+pp��t����%���1N��C*��������O=���{rM�$�?��&ol"�a3��$�V��x ��p��e���T���Na#�k.�z�EZc�K�l{�\���t1�yM|��JDER:R(x�N�gD�����y������7	���$�M[������o�[��������x��&���wW�A�����1C<���q��E�9�Ft�]t]�:�a�u���=7/�����K��u9����3x�U :�z�Y~S�>�(O������������	��(�V��H<�ao� ���h~�5VlU>� 7S���E������3�2�-��} ?���O���������h��O�([5=4h%v�k�_O��|����������JM�y��?�S���EF�*�����<������as����"�"�z�!-|���4n �
>���Q�8��{92�I�����O!��.1��D��K@q�5
��C�.D3#�G���f��E\2bEiQ�����9p�j��U%�?i�f�5_�_�K�'hg����Lm�dS4��=��db��3�,����Ad�E��?�A�v��l�����h����c��V����8K���c�����d��U��q�.�{b��n�i�2l��	����'������Y���*�&*!+��U����,7�XE�7O#q�J,^�
�O0��|)�61�A$Z>�$�
��y�~�����0T�Y�<����h���
���6����T�K���lX$�S����C�
n�D1�0����&���Z]��s���gB3�������|h'���1��u�%�V�S����O_�l�nO�u|^�#���DW����U���c�/fy�f����������������$_���#,��i�nL���`M�Y��d�oJ�S�����-0�iF�Q�	����-�/���p���UY.7`�q�h4����4
�/��`b�k�z%��U�����?���[b�y�z���p�������}Z��?U��j�U{GK����x^�I�2��\^LE�qnr�I�^�z��9Xp�N[�c��Q"~��a5EX�z��_�Z��Kz��6g��Q��dF�������w��$��~^�#�r.N\��C����x����u��'/`�O��:v��1^�i���-�yq�+x=����@�>2��s;�����~�K]k��kM��/��l(K��k��R��3R� ��9��,��Vp{=����[J	��_k?�5�G%�&yt#����0�wg���-aPm��-5q��^$+�):����E�Y�B.A�B���ZE����"��;3�VF����&������3��K�M�yN�Z+D}V���(��`'��E�5�-O�M`J�5KS�����]�'��j�h���_�����d������Gl���>-[���p�����q�E2�����Z�MIrK5T���2S>�{�^�����B+76�&V�pC�Icq�	g
�5����J��<�Qb��p��������?d�����
��LC�rX�^I��"q��^�Z���/��_�G��-
���yi�o)��B�v[	��^�S32�-�'�Wj�����?}�6o��������~=z*�Z�����<a��f}���[
I��0K9��z�,��d
��5P�*�M�a�&oi�j��������7k�*(0���5f������3^��e9�[�R����S������N�����o�`i��X<��M�rGZ#��ho��IR��	���_�t�A��4����lWO�d+#���8������n�o���Ip)���.aj�o#L����2'�{7��I��
������!�
tq��i��q:��f�����S8�k'�z�����>�]H���N������������@�:X�/���9j@IC���]��eT(*+����$*7o����/Q�D���\�G�^�����`������l#��F�p-�f!�������) ��MM�����,��>T��������rZ��X�m�����~��c�Loj~��qG���K��r	�<���a������>K���%��n�M���j'Nj��=���$E��O�~�G������.}��h|���>��h�k���/��)>$�^�E�
jP�W������*U9���D�S��Ji�Z�����p�R���Q�W�a���!�������������3�rK�PQ�:5����3���W55+��U��:�a�������JGf��&8�	���N_�������hKf����������{4����[��y�:�(�LE���8�x��
��Q���oyWV�i�v���V��E6B�����q�7 �������fF�\�R�����&cS{�o9��{��_� ��mA��Z��d*�X�X�eg#x���!�LKFq����)YyQ�RiI1�����Wu{��/��$wK��N3���B��YH�+i���&o6
����>������+���������LMG9�Je�+x.��g�Z5[�>7�����x�T�O4H�GT������U��q=:7"#?�nD���;������������2�,$Dg#������{�W��
�/���oG�sj:�1�U	1.�"���*�v�2��e�D������K;LF�(������t����Fr<�+�,��	vT�����CYV2�n��]s���e���5�xS�ob���J�x
C��.���y�@AbUtO��#�p1�5��nOn��0����)�Ma�>��6��59j����_�#�����,ZD����P<Q�H^Wb���xP��+���'�_�����.a���h��=|y�!����w���%��Ne���E�"�i�U�Y�U=�O����q^"�����ma��fQJ!Ee������+�Rj5������3��-��}�:�y?�|����J�,��/��E��(����a���k��Q���noyc^��V�(��J�@��0�Fb��	i�	/0��v�y�&}&������x�����:P�,�&N
��S��Bs���������#O�Zo���������7�rU�z��>8��iA�t?��E&��I<�e;�c�e����nUU�B��q#����X
��h5��H��5�u�/��n����[5���"�5��5~���.T��]Ko��L�����ZQR�F��Y+4b���4S.7��������|�~��]��u$����u�O�u���W?�~4<��0<��C^$J�����mm�cU���<4���	�H��S0t5!�&�r�G���J�f5��g%�\������p��y�
Y���������<������@T���[k�MZ��/����ap8��k���FMAE����R����D��i����/��T�>/4�o�B�3�������C8s5����in2R�q!����VB���V�?��T�x��e������W=X[��/-!
,���H�}G�2sY��$�D�,�2p�*��f����Q��~0�:��o}��������	;�|Zd$!�2uoN��9F��=i`�v�������S���B,.�$�_H��W
���;<����7�����!�H�t-cks�y�`l@P�W5���w�[uC����y��>+M�[����1���r�,��q�F3��O�,eY��>�
��?�Gts���@�����[��8��t�6o�����C�s'b0����.���}_�����T��7�OZTX����u��M+N�9������Q�����F.�'�1I�D���d$��M��],�H���1+�#b�%�'�*	��0��n���3}9�0���9���6���	��������O#jC������Y#�u��K�M���cP��l�%�������>=7����Z

��>��8��.��G�#��}�1�\|���)�c�����z����e�E����xs�����7�W(������5��>
?����=�	��s[kjL3�^<e��"<T��0[�z
1K�mZn�^���E��p��s���e���A���'P����(����(|���)�ar.�^=�����vs�b�`<��,�	oN���/��	������"��)1�!��R=����	3r�Ja'=K/W���=P_K��;"S��$�Z,��}�3�3]�U�9��/_vm�!j|���0XF���La�_�	��PA�������}��{+T(�9M������3/��`�\C��SY��C�����\���fl��
�$��K����-tr����cz�S!\�V�Y��:�a���0 �W)Y=��)/�K|������7��	�����$��Q+�Y�y<��m� ��op�:����&���X6l��X�oL�y��-D��KR<��w�#��kO�)��g�\���E�1?�x�=Z�W+�;���xg�����h0QPa�i��������'�z�V�����O�����y����H�c�_vp�����{	7�������,z�'�vc���ye/`qw-h40�5`�3�:b�}g4�����b�{��s��Q��:V>=���sM[��F�����+?����v!�@Uq"���#8��^�>=�.d&i�����(�A:��V3�7M��h}"O�@��C����o%��&[�o5s�E1�8��+������y�2>��y*+��%�������'���#�����1%�!�����������gpc�s�����$U�O�(������`[G��9O��Q>��<R��~��.Rv&�����b�����<��,U
�^^Z��_�a�G�J�E�h�M4[+��j4j���s�i<����w�]^�5�d�����b,�+���1r�F�j!�k,��)>^C�����v�;A&�]� �T#�WB3�����1�jw
�*c�����Fo|��F\��t"%T�]��T]�v
6���3��1�5�6a1�j~�_:j���k��
[;�UH�f�������!T� ������eX��ov��A�j0�a�IY��@JlX��\�������������1����p����V�G&�q�k};���Q�5��$R�E+
�>��I��}������P��h=�7&�5��0|]���<MB[p�����8oMI����Xb�*�U���D`����K$I<�V��Uop����~�P�MF��6^�	�/��r@����V��9\S�j�G��G�T����a�"��f��k/2��`�2����gH���q�H#�it{c������/80	�;6T��Ai��|��@u�[:�FM�pT�~��]j��T�{�&�k���3�r���������{�`���\�-����eg�?���h{�ZK{�������*NDG`��	�
.��$���<�r�5M�Y��eh�'k����u�U��Q���{o���`�M���%&�c���x�=���D�R�y-��3b�2g�n�I���*�Y��!�yvDx��8��.,���^i�r��s���� ��������x�kWSKq�:�P��e�k:{7�(i�����)�~���?�������	������U}j�P���$0�geG�)_4�������%e����8��;���!x6�`1�SU�\���!�����
�	_�Vp�;�����������:����j�j��*YK��\���5$6s��-3��t�<�Kwa���-�Yh��@wX��'�'h1v���H�##�>�ix�������^����W�y
�d�x�d.�PO/U�Y���]�]sGt�s���~U	��(��9�a�oA���>������	w�%��k���4(� �Dzz�$8��d.��to3I�u�*W��P�u"y����� y�/�+���z����CsVa��9�g����Y
�TH��a\�������w;Z|�����B��>>��r���?m�������yO��=n�����*L0T��Z��;���
qs��y�\m?��T7/���2$��@[#[��(%�'���p���*�����a���e.&�9���w�5A�����o.F~��&��U��h��@�\W#�F`��v�8d_AZy����;�G~��q��:j
��pe�����@��J�D�����
$A��9�����j�p�����S���N���pU�)���{v`���K~�=�W�������5���3d�&I�Cw��'��{��1 ��~��������N'���8�N$����a���+�v��i~���0���� ��roV�c�B4������>�����@�)�sa?�#b����{(�L*�ju ��ZZH���kI��u� L=���X��}����N����xP�H����F����6�u�D�5*�x��e���`\��I�2p������ }m�#�����Q�~�#�t�����r�E&-{��[_��������>o/=������������aA$#�L&��M����m1>L����`[�6k���F��-|a���a�����p��	Dq�
B,.�=��_�o�q#������C�~���W��:�a���0����?�n �x'>~�F���L���<���LM��rv!��x���
���������'�@��J_�{����z��
������FFq�����r"|���{/6*4n��S����.���
�DGjm�F!%w'�������7��"/I�T�����(�������5�x����0����[����0�x+6�~����jC�(�����]�V����������,�Q��a�t&��1vv�Q���L���*��v ���g���+�J�G1k�z����������_z�Uz�#sa�k���1��-������a����b���x����p&\���	#P{�����	�I����X���4�5���kp<w�$W����� t9�����aDSO��+���o��|
��D�3�Z��h�H(����d4wq7z�(�R������"y%�)�OR]2x�	<��������Si��3�Y���(,%�F��YM�$�}tSi��
������BS/�����A�O�-Q��h	�U!��$2�d�;�7�����x}�r,���U4o�91����/`bg��nT��I�P����~ObB�o�)>L�p��*\�����T�"P���'�q�R�B��@���Q2�����vc�}@���*�3m�3�t#o�~/�3aw+z���0D�����:��=�>�8�h��[�������QDM�3sc��B��f�0n�7��?#>Db�`rco%&���U��C�/CQ�����/���T��]3/�|s~9��w8������q�����:%[��G�@j�s#b��SV����Q@j�:P�3��	�]_�^�Vp}1�hV�k�b�[K�5�	��LQ��e-^�����
p�L��������.�q�@4(��m���z�&���V����I����
m�%c���ZJ�����Dx���)(4cP!jE�\�7���
[���}9om������/^A������yK�����n��>��<m9p`9:�Z��6��'�u(�,������aZ}�v��z7�Q�7��5F��jRx���P������|�5�H1��A���M�G�feWL�����|/���i��H3��j������%�6��#��It���p6b"NGD�~����z���`r�]p�NC�G&#h��x���8i?9��K��7
�b��H>�j�T�=�B�l��`���}��?'�(C������F���)�c���f������E|fZ6*��7�����\��\h���,�����A&�����_7`��h�yZ�Y���1�%��[&�������B�������t4�>�����in��"�_m�����E����N�������������1�d�o�*�~>��<�����IG�1�9���y�~X0�7�~�%����_F�G�]�PTP��1���-v�������G�`�s�n�}
��5���xl�4��><�*3-���=���0rd;x��A�>����������*|l)����~��u
&�jo���4	/K$��P���I�_��@82���cO�t�[x�m~���
[�`�G�`��$t���B��e�vC�$2*((�y��E���*l�@�k�+1��ohq�����L�-}�����`�6��o28�%���,gbz`�}���tM@a
��S����&CP-E�Et�A>8����X�4E}�z�r�����^hU�����0f�@p��gh~�F!I��j�F!�~EK�=�/~�UP��������;�05���S���\���u�2����u8��|����x��T��FSJ��O���������H#�T-�B���/����e���o�q�����f��q�$�X����f������d����]K!�V�]��
�6z�}�%o�4~$��`��{�����z�}���5)��%�Wa�?������G�a�:�i="�<��>}a�m�+H�`R���=��MC��g��k��qzV�����>�
�`y��������9�����B���sX3t�������H9��_����K�N�@�w+�x�#�X����?b��R��� t�9����3�.��w��cM�@����h�D����zg+����(��������:��S����s�P��!{���WaZ�3����sX��'�B�0,=��9���U5� �7
��n����9�/����eS��A����
���3&��L���VP��}����E��O���E��1xf�t|�����[�z�Q���OA��+�E�5�M
��X����^�<=�'J����m�����Q�������&E���m��w��4�zr
��Ga����6x:���C�w�����ER�;������`|}���w����xr�������=��O��/G>.�E�����a��(������1(��=�p����E��b�M]����R�(n;l�����������2J<�=��.�n
u�H:�'�g�g�B+?
��`��X�7��MaDD����E���N�*<���_���e��V��l����]�C�B5�W0v��
m+��{�U��������4:�"HU��{��>�S��g��{����b)" ��)��^6��w��nv7�d����d���3g�|sf���3g����O��Q��j�����C���8u���s
Z�5��������7�	G�A�L����%�f1����7]����?D���.O�#n�����j���F&�p�cC���:����x�||"f6-����p��GPs�D���W���cOO���Q�(���������aE)Z����b�$�����T���?��1$F���(;����9(�j��r�N���Z'�9�R�'�����@Aa���C���1W�y-�����A�1��H?K�jb���h���W<�i@�9|y��D�EdR���M�QPTA/�\Eg9[���_F���GF�����G��b,&r�	�.#�M��@R�+��}�Lp�����[[���D	�m�#f�5-��8*�"B��Y
hd����m�������\3���-1���oR���`T�GwA����f�(�g�6�r����3�����x�!'�6*�FNA
���I���/�A��-�j�v]�4s(�i�;r�`����� l,L����������LH�_�te�I	���J'�-���yh��	Mr"��_-�8��V��M�����Z9q7�b�-4���7&�d=D/k�x8���h�D�e]O��e��*�A*�m�y���~�Xn9�I�g����j�_2-i��:������$�7��M>��3�?�����~l"Dh�D���B�����������B��Q<�������	��<�'Uo��
�\a�X����������)$R����FX������`{ja^f��hi��vR�}F�M�����5Kp���J�����8c�'!9�
�O��k�x@����u;�����<�9	�g;��C�E�n���aGnc�g$A�b��>m:O��g����chBMn�� �o &�Jd���Kl{DI%�y
�?��o����9�b<�h1H��sa��
���^�~��U�Y���~����cp$�"v�t�Y���xj���<���cFK_��Z8������C,fb�oy�NF��t���_���oe*^*������ �_d��-������g.�?���c/�������R[�vG���Y�q�{Q[��E������A��7�'�r7�H���?>�U k�'6�����%Rc� 1�/�9���^�l{����r��y�d��m��:���QV��P����;�����Q&�HC����];&CB����Ou(�����y��jbAGL�9Ym�����j�JD��#06��v���De���hF�(�X��"�����H��rk?-���/s�-����BU61������
J\���������9����6�?��5=2:��V�s7F��P��e]�����j��������x���DLzF�U������W�*�����y?Z.���[Y>k\���(ZY�[T�������!P6s��1-�e�fh����,y���C����Cd��.�w������%b� .�u!���FT�����t�A,��e��[Z"�F,R�3���sGV��������5��g��"�8�?
Ow����Q�wp5��-��B�6.�3���f�4)�taS��}���!
�'R�y��s�I��S	N%L�.d�,�;$jh��7��al�fD����`?r�B������wQ�
�[k�Wv���/[\�:y�[�0�}����.1K�V�����F�IE���pn�O��1����GuA.w���Q����-�,��s4�9�&A��r�g~z�$,�<�"16��
w�]�n����W����s�M�?F��2��������7���Mf��B4�m:����t'5(������/�~�Gw������
�`e.������{`����� �����P����c2�_����k0:^dY�I��mq)���-V����wseL��h+�o��l&�!�}��9<�q������e�!A��vb�����W�z~>��*'���:>���������o��w�[�����Vt�6��`r��gFPP�qTp=�U�-k���<,R���,�MDCM	���
elMj<����������:|�F*�d�P�Ewi{��Fi��: �q��v�2M`��h�{a?�[����������e��%o;J9������3���y�g��:��V�}+���;"�86�
6�c�0.�%���������Q�&�h;	���������V������^��kb�`��t��*E-��l_�6���#R)���`���L�#����/��ww@`��P\����$"}������}��i��i1�C�0�3�6V���#�/#��sg��,��e�n�c?���F�f-������(?��K�5 �v���T�UY~5`[�6��EBh0BD���1QV	v����4���0�U��q���<�b-�������>��X��PN65���-�
���bc�!Sx?Z���$�-��������>��\����T�L�pj�P����6�r���O���p���=xt� \�&F*��W���Ws�}X��X�����&�����q��������L�?wN>�(��/��X������� �Xf����1b�`$rA2P��*U��m(��Y-2�)]���I�{V6�Iz~;������8�W�r���m�5�����a�*��U��j\�{����{]t8��?����8O�T^�v�l��$G xgD^��6S����#z{9yyoz�����h;�8C���}��x��-�z�Lv���#~�����"�N�$�1����"��p��}����qA�XtQ�]����-�~O�w]B�Ld�3���:oz�����W,��{I�������M���w�$7��@��(%������!Ow��c��S���\�X�L���;����]���sJ��G�r��v�Thp�-A�U�L��c,�����?��
^�S�-#�{�������1G{���yn�2*����8*�o�B��Ew�T��u��&������g��x&3��=��:x�����y�^W�g�^�z�R7�0�+��`�kn/Ao��"��=W�=1����.h���nI\����J��G��y����(���8�9��Y��Y�E����U.<d��~A/��"]��,���v���������#�Ij���i;���;l����Yt��y�2�./�+�{�x�w&��7n��o/��Fs�Y�BYO��^<�/2"}�'���]>|�	od�(J��~�[ro��cEJ,�r�~����X����_����
��|��g������+�9���I�`����������Y�t��/����{&���Q�T^�x����w�r����*!���y�+��Q��[���V�Q�T�<��'�����u�����E/1�=�����	�>��d�%��6��R3��w��9OO�1K?�YG�����[=R�?����_�G�����a��p��q�����<�������y���+f��s�����e�x�x��u�x��5����D�c��=�q�@�@�@�@�?��B�k��	�\� ���7��'/:����]�_�Q1$�Y����^����_O�JWx��hr��?d"����9����.�'�)�S/������'"�����X/$$|8b�����&9=����?���P�W�[~;���O��z,�<��r����H�����(����aY�������
!(9	�z�r����JD�\�uh'`��eH��| yPiK\���%�.|:�{^p�xP��kB�*x���
)/�X\���q��y�Wn<������_���g26���%�{��:�.Q�R�X#h^� �"A�LA�����Hv���*�����1��C�o�����^��'}]a���� �L+�Z�z ^���"L�����;��Z���x����2��&�hy|(�����M��o=SE�#����3�.��6!r�2����I�����"h��w�C0r�c�M�\�/���������#����T������p���*�������e�+A����v�������"�X�9���>$���>I����Qo�E�Q6;�:MI/pv��~_Y�{��H"eQ�	�����b2�ou��'���?F����*��J��|z$)��vZy��T�/�[>�vxQa�������m��������5�z�GEpPX8���������f�����|
=�������h�c#�Q8���T2�l��f�_
=Y>M��},��k���9���?E#�A�f���S���y� ���Cv;�$�x���(��
�Xt9���>�x/xy���0B�O�1�7�8.��3�,�< z���e�������C��;0u�{�<���"7�E��BC���L%r�U)�j�.����'�4���=�12U|3j�{�#E�?Ed�����+�z�22�P��A
������7�x�}������W����va����a������C���\
9j!��������;��.���	}�*��L�1w�H@v���;��c�1�+!��{��j���0�-524���!`W(����� ��R���>��:���i��S|��vK���2�_O�o�Z>�T���q���C��8�:��
������.��a)���d�����l�v��>]�2��,.���Wn]�u��U{f��	z}zh����c�@�&����qKG\X,,�}q�
��Zx%��Mx��������"��ow�_w����E��B����n���eP��xoT]�����d�gF���u���G6j�xy<����?��n�&o��E_�-�>�a�0{+���H�gY�1o'qU@/����;�D�]tS�����sd�]��=s��������4�tS�C��7u�����I7�:��]�0�$XmK�*������B�&.��R����Z>�M���A�-����wQ>�C1d/Wo�z[v�=��kFt�tk��4L&QO�i�gaF�zS �����`�������OF����9���l�����Q�(��s�()z��O<x���<|���h��]��o����.
�
�|t�����DQ���Ow��j��n�G�x�~����^�1v�9�t����{��=r����g�0�����7����:ht�cn8k��x���x�gK�t�R'+�Cj��`��D�E]�B��c ` ` ` �?���B��lF��P�%��K��3��K����P������vtU�;������U�X	��W=�^{�<4}���I�b���m��ede ` �����]< \���������z9��>?����D��Ix��$�;�j��P��
�?�;q���1�}Q����A�@��	��x���0��a8lD����]7��Q�J��������={1��g����<�S�KxaJ�6!6Xv{���w����7|����_�y��s��\�z;���-�������%t�@��X��x�;[����N��Rye�xH ���k�3r���5�n��z�7���S���Du�������da�50000����r7�� �I���0��E�K�Id� �����C��G�Ue��I��K�(��m ` ���R&��%���nG�%�R�Z��S�T���>�c�\6Z.F*��H�d���-�e���\c��>��?����6]����(tH���=�������F��N�B���-�)�����;o{�To�=_�~H)�V��z:�K_q�E8�,]��{f����t�E��a��������������P(�KQ723��w�@IDAT0��@��z����	%�X���������a\^��6Ew���b��g�-<:\��r�+�o�[<o�{)��VIM�����:�"��2�^�����QZ^�Z�W�u��������)V7�Fq��#M�w�����M��!������E�DD�!$o{�n|r�A�������/f���n�*^�%B|R��f,��t��9��aO�]��'�>@�Q�t��D��=����W_�\u{M�XnGv��
�:�r@�s��KT�����;�k�S��&G�2o^����������\
��K�Q����{'���.��-tQ>��r�����e����O�|��K1���^)��T���������,e��Z��N��Tc��|��N������h��u��:./c-�����d�w�o2��|�xu�����A�+��7>;�w����������[���������������������@Wt:�O�'2p�<��d�'%I1���7�j"�+l����I�[�COhO��qWw<�����O�������eRW���[��e�k\RwA�k����J��t%;.���������pE��.sf=���k�=���.��s���75��JZ���zF�����g��:]��������zj':������{��=���q�+�GC}������n<���HP|��s�����;������{:�Gr��+��Z�������������ER�p\z�.��}!�"�=��`�-Aw�J�N��#�n��a~�H������NXy���P o|����e�����^��n�g������~<�Vg>�:���9�z����{�k��
��8�yR������Q��t������z���wK`�000000000��B�w?��F+���Pn����yU��nA�-#i5�f	CHh$R��u���(��*JP]Z��v!E�_����������s�������d����Na�K�����O,YLM�()k@iM+,����� V�y$}sD2�#�f������Tw����Q�n�C�
G|R��T��S�
�PY���I����������@ ��������Q����6ZYf��v���x� @&D2�15��V���j4������>��������(���)����}:�V4�W�4�
��}��h��JS�����Z��+D�2��u���b��G������J����j�����)�1I�G�?����O)��m������Z-����@BL��"�	�/�i����*T�5���RiYi�5(�������kB��)�C9���qa�������P+q<$ �<L�&T������@���C���P�TH����4���&���!
6b�~	�.%��5���U�uh����]�C���]��x������RTW��I��0'�2�����p�*Z�GT����U�*=����t���(�o+�CUM
����$,��O,�$)�]��(w!��;]�l�Y(�7n��"�~��G�O	�g?�Z���`��$�5����`zs4k��-�_�[�6��������IZ�j6�Q>��wF ,��S��������eJP/7�����{��o�VpD��F��b^�g���b
@px���o�K�����p��tg,�/�}Qm�j���>}���G9�FD/��l�����V��n��Y��>�S���\�����-0[�3���s8�!	�`�E�1?{K�����=% h��LUU�`K(�b�o���U�5���8��V��������W��o�G�C�/���s�����9	@`(������fo�mR�a����~I���S�n��9������=�[�T9��{�<��uMh2�;����p�1���n�%nuq)��^���weR�Q$���u�s���6��~+��V����/�l�Gqcj[��9)=���������4����h���SP��C�?B&#�bAyJ&S-�Q����G������S�XC��j'h|xC�1`���4��^��/���9VF�.wk?�Zb0���8�$���?��v�;A������
Z�D`�v��sQ�Q�55m�>8�XIs����y������*����/���+��i�i���V$�2����?����TN�R{�������V����vbmm
������gw�%�m�V���N2c�|�_�2���������F��q����-_"�3E7K�,{^��-��C����-��m��A�i6j�5�X���������Wk��M�Q�_�VY�T{�q���q��lG��b�^��R��F�+��m�P���K��k�7K��M�����u��3���������T�l��;z��6�K=����7��h�q���$���������E��-n:��a���r"��+>uUF[k�����W�E�lmNy��i��F��t0K���)n<�\<����f�M+C{�����p�v�[�[��[��l�W�I���f�`��-z�*�n4�u�v[�~m��k��C����'���$�_�kK2��]cL��[�8�A����n�~����rg��~�����O�p��Zy���T���Q��wi�����Q�}��
�R�"rU���,�g�R\1��H[��@"h"��#]����Gi��Z{����&D���j�#�k�;���s�?<:O�[
.t����&�����N��v���}�ggdo�����7����o~F[RU��K\>s-�Jno#ue�������3�KZ��cD��|�nm�����I�22�N
/���[�^��R�����n�����E�WP�z��"v�[�k�����gj�<��������:��!f���u!�Z���aF�]�NC�����nmd�6k�����u����=G�E��m���D.Fk����-�{m���V#���M�6R�����&W�[���$���:���}{���������v�<��U?$q�8M;��x�6�Z�t���2�u��P��F�D��J�j�?1_��T�We��1hwqL�>�t���}���V o��-����yy�I\�/+*Y��c�:-k�}����1��j_�Id�
��O#�!PSS�UVVjUUU����jhh�h�F+n��Q[�
��?����W�����M��`�G�(y�+��)�+�.��w�4������yX|��X���������Z���e��j�g�l�$6fc��
yo^KK�Q0�J${.N
m�=~��G{��W��[E
-v�,����u��,�v�
|1g�hQy�����9��B�[����Mh(-���O����`�d)6����y+�:A�}�������f�mBs��8�q|�u�|�M������~�������>��BZ���Y�r|�GZ�X��h.~�sn���#�V�����x��x���iQ'>�+��f
����x�l�]���zTU� ��+p��yX��R��uh��O6z��X(�����a|��?���_������"�����H�IS�e+���*8��p���UJ��:T��j�I��&�m���r�S1<?�iZ�2]��(��~<����h����K�u�F�W���n�e#W���%hm*G]�F|2{=~���/���&���	��w����!�u��������7��������2���#V-������YaO��������<�y��zK*�Q����O�����
[���u2�Yh��b-,��t,�n�����<ZaG�}5����	b�+�?!}��������������K|��z�X��mw���}Xp�ex~��2�
�l�����d�x�u����t��������K��d�I>�s~�PXJ+��&��b��[Q~�����_��2K,1�q�����\]*�^��{���n��|�W�3|�M��Q
wIT���������L.�;�dh�����	���r��"��4�mDCC�J���~�u�����zf���W����u��3�.�s~k��|�j�u9v�8��1w�-�s*��R����x������x���� QI�Q>��u�Z�||#���I�u~x �x��o���b����]�~�[���/��������Mh�o����d�fYXF��)
m��]�XE���5����a�g[|<���,P�e5���i�wf �����/>�w~�/^��M�2�h�_���x���q\�]��g
����onA�{�aG�_���6l��+u���M���<>��"?�?^He)����g�x��V��������q�*�����C�`F8����#8�v�vD8�o>IC�d
=1��a@D����K\����-y���[G|����g��������G^(�n������<�wKM�?�O��9<��F��=�"���	|�����*k���3����[�\���
�o�������c_�������{u���?� ?E����z%/n�;�����yi����/p��?!��M(>�*�M;��Wz��vK�Y��w���S'��Y��q��ak�g�K��>	w��`��vi�e{aY|.�x%��u���c�xDr����v����l6�9������;���_H����p�����~K�����h?����:���Nc��9���N�	h�;Xv���r�W�y�F�+��������l������z�>�]i1a�����:�?����h�;�� Y��Q|���7��hr?�1����������������������pN��^p+aP
�<�����1�E�S1 f���_��y���M5,;�e��=�8<�D�
B���7��[����cYn%����j��=?/���8e��8'5GE7"�U�����T�q�@P��B*a����4f�AA�h9h$��t-`O�(����7	��Uh�m��9P���4z��#����?\�����<���8���u�������MKE@0��">!#��������.��8IV�=}��9�Wc���������I�����8S�.��[va��q���r;�t�F"&>�
�`D��!y`?�c�����C�P�){���V�I�&��=��|1N��:�S�T?5�i�R�f���K���l����/�4n��� �������N@e������
+����E���XW��q_�I��	���P.Z�Q��?�
���?qH��43���	�k��O����nf�:Q�%����:�����D���G�q�0\p�	A�9�����!~�f���a�����a�F��������p��%���P\�� �����aw��)M��&���������w����Y����(�[���3��[z-������(�<����u�En�yi\�)��%��F$��C��� N��"#5_���k(�TR���3�n~kmMh����	�tO�����(L��5Hi}s��J���q�c��2�r��&�?�"�������V��_7b+��J�sH���&�jA8�6������6D�c�����v+�����SR8�rH������0�9�}S�SG
�aluoo/DQ��k�D��L�������>��Z5��!;V�����G�l�RT�6&a_�����?��}��5�Q�$��h�~k��Q���1CT�5G�~��-X�������L$�9�6o�s))��O.��:� ����+���o�~e-���
{�4D&%���
'c�i����oX�m�rG��l���?�������&��1���#�-��)iH��F���D�����q�+.uxH��u"����� ��'v���h�3�x���Q8��+$)�?�������y��=�Y�����N��B���O�0f.<�lhq}O^��Q��	M�l:�t�����c��)i|/�����E��������K[������v���:�������	��-�w`��_���s0��	�~4�:��7eb���KQ
�����&���t9��~Ld����H���b����\�e�Cq�����dL�i���p���+�4�\�����9�0cL_�-�{���0��
���T�r�R��?�����Y�&��(.�������[����.���3����8:c .�h3~yk~a�U�$V���rEwAa|����>^r��w\���B��:����.9"H�P��q�Yt���~�P��di?r��`��h�
�qV4���������d�����1{;8��>  �V�s�NeIp;~&�	Fz8�ym2��F�5
C��>����6�2W���g�Y>���a�8����PIKJ�0�
�s�n�����2<��5�(�8
W5i�X��by��*�/�"P�Z�?��}��T�`��ObQ�h��4�����,�,�jW�{L����"=��^�-�w�CpX��i	�u7�o��3'�m���_TN�ZD�N<l���:��@�Q��^���)
}�B�y�9�=��ME�YW.��B�2C�����Yx�@��m�\�!aX8��iU�`��b������K�05��$��e)��{.���O���'#�?8��}Q�����^z	kW���g`���������+�A�&g:�\�e����C�U���hw����m�hm�Kv����C���o`�p����O���1S+*�[is9d2�g~��-�R�J:���-�5��H��Z=���K���^|~��c�1�c��*�r�@s:��d�����F�Y#h�;�Q:q���q�T�����������b�-��u�{�]�Q����C/�E3&c�����C��B������������A���(���c"�(g��T����q�eD�nO�� ����F��ObI}-v*�=q�"�|L��vk�}JnjGd�(�;(�i�������E*�8�K������H;f�9���W��T�6�����K)��I�*�d)V��S�x��`�z����H��X�����!_uTz��a�ZZ��v�_���Zde�a�����%���6��'cL���>k-1������h-K���@�����G��;���^��~k*;a,�R�~���������^����U�%d�_E����1G�|�7��~��#�����L����\�g��i6u��\������Q_�w����fa�T�G�W;eZY���#8c��R��{�e�����R��u�uw\���k��0�sZQ�U��=w���U����>��QQM�JZ�;��,M�_�8���*������-|��e6�"����~�+h�����jT6���[L
+w�����t++���k���w�5.����D#y��?�D)+-EYm3y�wL89���6.,���w������Mh����l����-/go@w U���*.�	�\��iu��up��+,_q��d<�!�Uc:�������������A���3}��]U�r7���~�U�,.+G�-��TX6����,J�n�j�O��+�\�]����h�]�������b�@*E�x�����
�bR��x�`+��+wo�S�;����#�������\��N�l�V���1�����"5����zlf�j�gg��~*X���d'}��8il,�G�T?���l��v�xG�=�S��`�L1��9��������V�+��9�N��d.��|����r7���~�o�g�&����e���%H��q���n�&��jk��JNU�������uJ���Z�Pr��03���P\��������?��~�Wtc(^�K���t�/�,]���	���P�d^�+
y*MI,�r2gZ�5v��5�������3S�\T���/Y�!���!r".��V�r�8L�vC��iT�w�P&��5�������?�R�D���y�7*�{��	��X^B��P�����Qb�!\%�H��o��[�>����HNp��ET&��H����x�����{����W���7]���q8�TD�n����������(����U���'��E�E��>��e���?[,���W�h�����������]X����~?������G��#N����J9��C�TRi�s��\��2Q>Ft�S���Pj���IH���h�Dy0���,����d�[*��W�m^��$d����^ZB��*�<Ty�[cY��6^5-T'`|���8�<�2�R�����;$r�)M�41mt�Pt�.V���������"��A�����|�8it����������y������4��A,���R�z[6^9����2�����|dL�#�2�*b�L�5�&H;��P-�.�t)
�_��i��8�L���l�u�n��B���q�����h0C�
�yt�Q��=B7�<R2��u((������[qv�?I�Pm��.�Q�����U�f������)E��	�{,���<�58����]G��KQ���������"/�MNAX*��
o�/�)�%�s�d��[���
��x��6��S>�����V?l��_���u.�F��V����3���a]�?���\�-J�Z<�t3WaEaS.�u����%b���u{qpU,�����FLD����=*b-p��ml'�^��+��o���'��v��"�.ST���]��k'��z���N�f�����CL�3���V����]���}V������w�f��<��wG!6:Q�|��y1�Y�w��6��p�����~������<�W��R`t7��+���O�[�1,[;
B��W����4����c�6�jy��W��9�F�
3��W��i��t��z�D���TY����`&���R..�?�oY��6�M��(�����va�y�8��|��'a��mX�����,w)����?�Z����
f����(D����/��&W�:�����X���H?&�*\��bd'Y��	/���UQ�
s�fJ��<G!&�Ox���lU�@Q���xgRS`��y������3�A+�x�����pC�;�m���.�c<�����+�u��mHf��H2�v��?o���7�]�L^� r������Q���<	�$�#�44M��3q�}����30����N�&��B;�$��V+D�q���)#�����w;�Y3������x��8I"54��Q��,��|��9�Z���-nP�����l�����$b��[�|��u��U�j�+�Y��{z~�`>n����8������%�\�_�MDJX�cp�������8�a6��x4���r4C�����wq��,LL=3HR^��\�?�O�.�1���
'���X
���>��fb�/r_{4u���sDN�*��=.8���W����a~^_d���?<�1mvW��R=��;���n�+[P�fVo��>�cG1
�+���-�d�K���L��?���� ��o�-�;����D��_��G��������3��]]�9��������O:a�b��1�=�&ZG?�3=t������Ut0]��p�*G6�E���xc�^l�m5F�{��y�L�8[�6
��������K�����qV�B,?y��/��r�De
i9�p���k��O�[=��������?|
�����;������r�nHt_�?�
L���k�(rp!�UZ�m[Me�{*�a�k V4K25����W�}7SWO���9����)Zd��T�N������1���<���9��y#~~�m��\J�5�mGRjh�T���V9�TPu<�_9�^��NMU:��n��y������@b;'�,Ec��D��_Au��i�|������qo������9�3(����`\%����F<R
�}_��M;�`uc ��3����YSpK
EX"��B���p4���?���3�c�+q����,,�Q���Fi�I��#S��l��VDaDkz	*�s��x�����G�����I�����e� 7�����?J������~��w'Z�t��-�]h�rR����]���SX����`)��a�����h������7��7�B��{��1u8~"����L�X�����O�
��y��&�7=�d��~���	S��9��Zkx����v)w!����V��hx�+<����������|�;J/���W�b����$���a��r����p��V��`+�`�b����#�����>�y�v��JlWo�2����s�vF��.�)�ch^G��p�m�t�3�!wFg��o�sW6��q�`F,{�`��w����q���p���������3����x������~fh�[����xsI��n�	Ci����5s����p�Jy1H/��y������+j�g��?�%
[W���k��q������E�J��u�"��3Y�P��l[���_�k'"�nlha������'�[k��R���k����q�����#���4P+\������w�Aq,�Ku�X6��Z�S�����������_��O_����A�8�Z���h.,��|���O|��sGq��9�c������p�E04.a��U��.
��-���P����kg=^������K����a�
c����8�($L���_�y��1���
_�g??W��K�?}io+�@%�5��_�pB�{Y�"�Z���148�|���|��<�j���g��S���/I��]33�_5SQ����K���w�$�r���$n9HCXb+��|>�Zm()?�S�����������!���Y����0���q���"*0�*��'��-0��+�2�b�Rdi#g!���[��:
����9�0���[���M����P��^i��������7����_Bz6e<��n�1}�1K]�����b��)�<m6f�?w�1�o<��[�5�C1���8�kv�Mw����#�L?8h�Z�������V���Y�DT������A#\�������!������0��
��p@/T$(�}�P������[�+kr���������A�����XF�I�"�z����Kl��+%
�y�Qf:���_����s���e2�<n�5�U����+DD!q��h:�I-<&��n�+>t�9�!/�0�C�l�K�p`���j��������t���Px�x���jm����p��hB��`�������@lV���#AW��r���8���S������6��V��
Sl3*iQ@��{Q����J�������t�A���I-���w�����<HYQ;E�[,����a���x&�A|=0	C�X��*r1=���?Z6��g7d��/�`�)��T����.����0<�X��#-��&������Z����� ]�GE��h��b-�)^��[�c	����x0���&�b��'AT0��v g��X�-
c�����m�ah�o�J��p������0/J3=�/�,��������cK������AH����"�}��M���o��Tv��!Km�bd����-���r{�v�|�XE%��P����G��l�Cd��e���wb�3����7���z�|�b�0�>4)#�T�H�v����`������_�&�|h�-
6k8���-M��I4����<0�
V�!��#0bB^=+�~��Y���C�������e�hg��S�����$9�}�{F����a\�XJ�w0�_cB�t��h��e���o�ln.�6�f�t!m��z����1��F��oF�-��K��/�d���m�2��w]DT�"����PD��2�����2���	F���,TZ�@\0�i��]��A`����RQi���}��0��.�gQ�Iy��G�yo1	�����������,x��s��Z[9�t�{?�w��~}tV�I�h}�-�{{2� :���L�r�=xe�|0a������]�^��g����Xr�C�p�\\p�T�O�VSB����������I����B���4,����������a�WY�w��xx2�`���5�	GR���z%�-��d�Z|3g3�>������|8{2��{�_bA���04���U���y8i�h�86	�|-��������D+����;���n��,:w.<��K�P,�9r �������O�p*���_vo=^K���q�+�_*N�Ao#����cwF<V���t?u<��	�l������	�p1:0)�����(����CD\�z��E	���y{PYV��M����u�0ii�����V�B�-��fHK��t����������5_�M�A[>����M��Z�J�t	KHD$�/�����#��4�m��(�&+�'A���r�r��q��P�������f�,���������T.67��5a{3:���9�����������,�����/a!����z�}fHh$}G��Sk���bj�VQ��h+��{_I"�$�q���Em�ee!�(?Mk��� ���Q��@�@�@�@�@�@�@�@�@�@�g��~/
eNDYk��e''�z_��@�g��i���J&O�>�?�������G���5���a8�o>�����F&����=8&���_���o��"�z�`N6�9�w�]���1���2	1���K���M�u�
�����&�a�+�*	�������u���x�.��[��#w^������j:�j|q�6l�!
�S�B�S�R�����E��[��~����3p4'UG����+����l��S��;��U������~�d����CV����[193{�6��}3�>�/����Y�.a���I�L%�2�����<4��������{30���(�Jy�M�����c0w�0���RJkA��8�����U7$�)[6l���q���)o�G"-�9k6Q��������v�!1a��~'~��z\������{��	����?�E��(�[�UiRZ:���]�T�^J.e�h�m���'������|��p�	����PEf�w���������8�o��sp��d���b[P�J�����O���i�\�4~����b�{��K�B��/���I���B�i<f\q!*����p5^������1�����r���T���u�E<�TN/~K?M��@��o��kN���(D���bY��P�7x�(F4<��E(�� �NX\]��DP�t�_����&���/��`�C/��y��O�Fk;���>�V��x{�L����<��B�qA���m�$���������+;�'�_F���^-�)�g��/Q�#"����N�v�E�j����&��9��������g�������]VE%�(�mB�(�����?G��2�4k��S?+�rE�IV���q�>������$�=L_[�'��`��WIL�R��/�����]�k�(��%K���T�x�I��E�*��S��l	A	�(����h[K_���SF�!���v~?�~�gqW��-�W��	��~�U\��t�)�Keayb;����<
�F�k�����~9��c�Ec�1�jOQ�QIi����'_�i����k���u%�|�'�5�r�	ob���xp��x���������&*����q���>6��`6�=�L|t��C*)�^��F��S���O���p����V������v�p��������)S��`����i�c�>�{�(��Ee�/��Z��v���!�Z|�+�=!�D�-�0��^
�&F��������F��F$~���� ZSKU���Y	���hd�m��ekif/@u.���R�J��%���-P���_\����?�7f��k6 �|�����>s�O\�<�%�`������U�r�^�"��:r�mg������%t�����,�%+�/e���L���
o\1�����Q��,F��=�)�aj���/�m���[q���quJ5���k$������]GD��x�c�������G��30b0E�W�}��g�[G�1��Oh��dL�(����33��G�K_��Wf�������7b6OH�t�<7����^>	�g����E�^��E��@�@�@�@�@�@�@�@�@��!��'Ib�Ws�;�9
�`�+�p�I��4N�,fI�Awk�[>�-/��
���U�gc �������Az��[k��}������c�����(9oh�e=J�m���N�SZ�*6'|&I�T���ex����by�
E0�h�_�{�����`�D��|����;�lN���)l9c*R�_O/?HK���YG��J�%�7d>��w���Dr�10b�"������'����`F�0��W�L+�{pp�8T��`�8����[7��GE��N�Zy�a��X��������pXB��@�~Z���}e�Q��~����]�w?=���'�0"�V�������1��i�sG��h@�������*VS��@�
����q�k���Sg �r�f��9�nA�z��W�a'3sd,�Pu���r%�b��(�o���Vo�
U��8p���~m}JAP` ����������! ������o���)���r����������8>]������O����$�r�B^T�x��o��}Sm+v?{=?���{�_|)N�%x(��T��V�����s�Qy�sXRy)��D"�T��n��Vco�	CD��
���>q�����#m���+�u���#�@�c����K��y�3}���..�)7^��?���6����_���/�q���&��RW����z�*��s��W�����!B���~M�])�N?��5�rQ��4aw5+�Ov��+�\�y�vy�����v���Y!ROL�P����S�{��g"���X�4���c��#�p���5*����)����m�������8>�kZ;�p�n�}��p���c�'P|�����
/~�k�H��e�b������J�&��~+���~F������^
#���!t���]R�h�Z�_J��0ICA#u=J9jp�j8�H��Z\��\GE�d���Tn"�
��\���6�]O����u�K!!����]�Eu'�(��z	�w"f6��[;��Le��������vjW���P�WB�c�qk�9���V*\y(f�&�����&)�&s��KVL�!\L��OZ�CKf�:��*~��7�@u !u��*�-�"�Q���F}��P�wye��������>'D"%�?��,Ah�W��*`:�O����Y�yY51)9����d���b�n�s���;nl�LG���b��*��z.$J���3f_���y�X|���p�w�������_�l8�%8W��"�q`a�A�E����!�.����I�}����	����,i:�Y)���I���fY�����&x�.Z����1�yh ��lzs:R��#9)��#����ZU��!�z-��a�k?"s���CZ
a��<99p��������W(���q�iH}�������j����s/@ry#������\8�`ry{�m����z�/���K�����������Nr���yt ����pB	����K#��mo�G/�/�,�F�~ wEQ������M�c��i�����0��;q3]�l*��\hH�^��n�~���y���x���=z>6~'���i���	�c��yQ,��^��|�` ` ` ` ` ` ` ` ` ` �D�>��P�����K���g
���B�q�X���gNgT:1��K��%�!l��I���3�J��2����r�)C��s�����}8����[!�n]��+�j��	d��W���Oj�F�1�yKL���Z�f��F���P��&�������P�U�?�~�p��MO���,�?��8�H3���`����k8��)}RhUH"�/��e,"x�y"��v�?�
��)>��O�L\?���,v��=��J
@���%}��!�e�lT]z%��$�?5%&*��\��2?T�i4���A}���w�Q[��d�{%	I5��B����]��g�}�A�H�#�w��[z����3���n�4��?�@���3g�93w���gv�3�9�Y0�	�sY-�'
S�������I�e	�Yt�����h{�j��HG�n�.�U�P�eN���	i���w2����}��(��.����~����p�l6P1C�m*6��L?_<A�G8�EK:�N
A(��jM��d	7�;���5h��kY�@_t�
��r0���E3�{�!8��gL~v!�������a4�RE�VR�������E$7�"���@IDAT��sg�uD@�4m�"n��������H*lV�-��(@��p����A]����C.���a�8�;*h�?�n�F���y���,���Q�82.k� ~ZL�WDD(��Q��t�H��D<W`0���p�Y��6C���J��h=�����
�*}�F��x=#�j�P�
6b�H��kP�rO��R���0�{�!8��m����p^�z�������0�m�Z{7]����TB���[�|�	����H'���7���r���t�~dR�7G�������������f�r�R�U^����s��bi���+�Ob��X�
"pz��u�a���Q7�����v��o��]�P���Y(�8����Vd���������bbU�����@�&(�!f'���X�����=���qO�}�)���.�r��.�J���4��@�����A)�����Q��RV��e�M_j��������ShJ����*��0��
�F6�uG���| Pep�?j��o��Y~����YU�.�o?���.�T����~#��E@������/�~+�z���=��t��5H��FSr�q��0G���k�ozd��dL��l�����H���P3	t=��,t�k�#��z�;�Y����K"�/�r���u�����@'gE��g�GKf*��ts��Ur���
ei"�~�\�����������l�t�u�(�s��G{ �� i=\�`�Nm���Ap�	F=��.r^��M��y�����!.g�����F�A\P��h���`e�A�?Jk���Z��������<�-�oe�����H������7�������}����P��L(�Jf(�j����(:���F�������;�,�/.j��#(Z���!2b"6���D>�|�,�k�h!`!`!`!`!`!`!`!`!`!���1���iN~�J���~�����w���
@/�{R�8��U���r��:�$�;�n�D���u��%,��By[�p��K��^��"�c��6S�"QF�j�n���<��9��U�|,��/���m����JWn>�O�P����z5�,��J�@T�F%��z>��"lL�C������-[s����|���� N���b�4�h&��������Y���9�����$b���O�����9'����'�"k�CO�D��[���VJ^BS��q�P*�$�7-�l�6^63�g#�y��V�{,�(/�-l��8r��Dj�L���sr/C��T��E�T��K)������"�	�f�i�C�(�U�>�2O +�7���QO&��X1!J�B�drB���B��93�*�~�n=�6n��e�����O�K}
h�|��l�_����&[<��1bD�L��2���R*J����u���A�C��)q��]l�w1���rt���PZ=�����G?��B>�|:�|u?^�F:}��~@�����s�}�7��U;!���Q������u���
"����Jn��b���CV�%���Jq��0��B����6��*KP�N��1����+)�R�+�r�p,�*�KZ�1-�8mV�Fm�2���l6WJ����0~Y�
x%�h
.q�Q�=]��L�:�"�pU#��A�:/L,�X��,}yC}&.����Z��7���C�"���I
��H�^Xw�5;� Y���N�xJ�J�o���DN�����n;�r��I�Q�����S'�|�6ln=�Z5�m3�����6�qk���������Ue����$�_������H{�����c������[!z�Ee��!��'��{ ne��k�@�K�� �'��\����^u�!6��7���|4@$;(�M�^�>s��7�M���Ii����0#1e�	\bO@zc�nc�����.eAB�e�J.��XB���x��!A��A��7��%G��K����rF�Y��
��o0;�lo�=����WE���"����h��ew!z��3N|	s���L���
I+�OZ�-�����E�v6���$9'6b�q.�Q�� ���
R>.�qQ5oo&����.�Q>�ln|��@f.��&Q�t���f/��p���rN���8u�v�4��\G��".�R*��OE�D#�����l�����_�
���CE��}Y^�����Q�����8(�_������R}����������2��<�O�k��F�����\*c���YZ� ��Q��F�Q�zM��#GO#{�J������Y�r�,8������
t���u�dQ�z�������(�JB
v��.�s^�����X����6Dr�Q��'��g�	Bpz:����^�BY���I�\��R!��%�|�����o���v�����0��
	2��8G�����J�"�|�o3�S�ENOdMn�����.��CCj�k��i6W��6��UH�D^N|�9���m�����Y,qt�v���V�����������]�`�9s���Ig|��h��c����Q��&��e�J�g����)�=�V.�	{�j���3'w���ocz�t�=qKf->��U�}�X����`��#����yNCev �ep#s`��/���)��'���
����)��|������	�L"B[! �J�]|o~[�o��3�28��+W����/��~�v$r�����))0����l7k2��=Z�O����05���0��#y�����z�H�e��M���U���W�c-��6���}�)��m]Z3��=C|-8��Q{�R���2N�89���N����W`�3p�/X)�������� d�#�����Z��SGV
?������'X����!��o�G�i�O�o`Qr4ko�
#��Gj-�Rq�	��8�c�]�,�~���<P7�Bc����i����m�}��c>���fb����6�3L��n���>>Ox����^�� �+���H��O�s���H<���X4����1��f�����;bvoz��5@\�;���nE��2yT�R�gC��7`���1,�C�8�<���!�)�wb��p�r��DF��0������w�Ee�|�[R�&d��7��B+��o��NQQ�o4�}���������Wd���wM��e�N��]�ndI#�V�Q�(>�\�O���.���Up����gR�t
j�E�1��6��K��~p+�<#"����:�?��*���^M�M���2L>Z�?�v�������S/��V;
�C������G��-].�M���e�� ���'��iB�&��W��s��;�������,���q��_=c��rq����Ulq|��7����>
G�M��q`����\y�}�+�=gL����0}���:�Y���v|�������?�f��p9�E_��;���l3�����b%�
��n��o��RV�n�R����(��������L����U��:R���k�A����&=��Z�Mi���v*�w��	�
��i];����A[�-���p�7��������2Y�3�O}����I�a+��w�q#��71i�^c
Y,�K���������e��#q��# �������������,
�a�p���$O�.>��S�E$+���`�X��N�{�n��Z�Wo���w{,��������n1g����>�u�I�������Q�f[����@||c��;�8&�8	{ w�v����z�������3��\�uHCk�_��]KQx�f�;����S���5X�;w��C�L�n������H���?�S6�����Nn&���=���gc�"��+
b�]�3��i���mi���D�	0DN��2��r �e6�Z�������������\�j�g�J����i$�9A����B���z5��O���oc��������Il���.�������8@-X	��
6��/�_�~Z����6o��|D1Oxo������f0y��S)���W�{�FM�^��y��~}��b������>�a���|��w���Q�w��m�����6�x�f~iUr�[���������e+0n�F������Ha���'v�K�D<�^�b�+?��W"~�7�@>�{	���X���xkU7����\�AJ
��C������*P�$�����G�b��_�MUe�Z��WO��� ���Xyp2��Ln�2��{+�f��5�����'������_Z>��|���C�
����u���
���O!�t���!�a�k�Q7��<�����VC�v+�cW`b6���?p?l��{0�D&R{_�z�z`w}�������q��x���x=����A�>�0�gL0�I�y����	��@�og�����{����3h������y����������<qt,��Y�O/���gZq����Kw��������`xr"�%#�$�DG���y�aL��^4������-����,Dha^��6~�7���1�LM;��'|�6
w�{��6FlZ���|�"f�������	j�L�����e�������X���Z�O���\3
�H��%���mN� ����Q-t
-E��/�-h

��g�O!��������a|��tLKT
�28���4s�j�4v��B���;R^��gN��E���h/eb����3����/a~I2�haT\�i;�����#�iNWE��O��>�/�^Ug��*�����Y���"�����o0n�1s��c��<Y�Htpz�C������s��������������s��x%�I$�GQf �m�!VL���
e)B&�&��qg�/R���:K�L��Q������������mq	���=����Y��cN,	�{�TD^~;��f#��V�y�k����YT��R�_�
fE,��Y�0�?6�O��b��QXv���������Z��/o���M���G�R~�����
�2w���T��O�u��#����vI�*,�p�b����9��I�7x�����Gm�oH�b����7�����^H��0/����d��F,��	�q��z����M�+~�h�q.CNp[|��a,�����F��������2�+��H�����!��D�����$���������G2��<d�����#P��N*GE	�����{����c�e��������������.�"�BUu�����^��7�7����\�����dZ���*��\�,����u��Kb����`��k����4��v��(w������x��t��������C��]�n�0���0���[��h���������4�^�O�R|���r�d�������h���cs���zR�Ui�.
��`����
��W��O���&I(�� �O	����Hj�K���4�t�����9k1�=�uo6t
G��p����_,���e�]�4����/�c����b���ZS5�����g1i�-���\�E%�/�G]0l���r���E��o���'���H�� ���X��4��r�Qq|-c�=Zt	���"qw��������V�-}�}?~?\�
����|g������<
���AUgI.ehe�5iRa����������3�.�O���nA�����#������P��>T�����D����k����8nx�0�X���3�x����s��,�b_#�A�������q<4�R���y��*��"�o�����b~U���m�-4�hPD�O�	�?=����<�W��������ob�}]��di���.���5g�bP�.�)��)���GMoN`��3�~�n���g��W��lI���va�)��@��]q!?K	�|���1�]7|��f|�x�������Y��K�����=�v����%L����w����+�/p�c���'�F&#z�������H����u��X~���vhU�O5���?�C�uF87���W����\����KPE��b�����w���[���~.�R�h!B�*a��>H��s�
�^��v?,n3>�g��xJ+�BZ.oz�7w	����I5��;MI���u�B�B�B�B�B�B�B�B�B�B�
��C���s9�}o��H%�P�� �{�p�>����3���}�PP�	�n��}�q��	�Ee�������S��7;+*�h�Ce�����Q�>'m��u�p?o,������aH�BW���W@���wu@�z���E&��+H:�N�|��;������������������]�t$��E�(���$�$�D�b��E���������h� Mm���V��u�k*�������V=1|������������K�u u�+�����.���lxd\�B9��T~�0�u"���@zT7�c��"�����s4��2���mC	����yW|t�^XHk[�h����(�6���+�3-�>~�!T�@k�-5F*s�P��^��� �{�~b��Ax����8�wE!i�����f?��������zl��	��
*�Bq{��h��>���Xp�R���$��?�4Gf@2ZrQ�v����'6�0�]�)������(��A>7����J-��s���A��?�v.�U��c7[�E������yT��I�����1^�:�a���h4����$�!s��1�,���_B��9�����������ojGn7��&U��`1iJl�fh�M�r��N�*��e����G�:d) �����C8���t�BK�[���6]�V,e����_��:)����&1��B��[�(�/y#�5�ty��>?*����#�
��zal�&�G������Z�1�~>o�EX56�E�<���<xO�~W?�}U�V���oq�**�"!��uL���m�G�e�����1�l���;r��qu��Q�T�/]���Q�&��:���:
G�W�'�i��V��[��}������h����"e��HF������7���6o��_7�b_�6c�Ki�O�C��VJ�2�)����M8��YE8N�s���G����1�;)����1:��?��F{x��$aT�&�M���1(aqv���S�I1���>x��z8K�����5�����`�=�)�/��7��
�w������IHi���:��G3q�}�����'������~�BpZ������G��g���G���h��3����vL$����~6_�m�����h���)y1;���	��6AF��J�l'��}w�ek)�;����g >}����^)
1�j�E���#&��i�;��`�IGzK
}����;����@��m�2:�J;K�tdt��=Ll��T����^��m����b��IHf�)������]�#">;4���E���P
)��Z�%r�d]w2���Z]�.����c|'�Gpaq2����]���D\�d�_���k��B���8Nj��<����()(�>��M�W�^��c�_�&�G���i��{���Oi[\ri4o�u#%�
�N/��C8������`�0�"����b$4������V�X�r�
wpa�$���-�
���l�����������:��#����> .}�7��o�FT|��|!�K_�!��'�����Q�[\��"byG�%/*�WO���s�������V{���=:���/�J~���\V�.�)���`��<W�2��F�ao�]wP�_XLl�D%��17Pn��.�E��~YC8�"[�e� L|#'�����=&�o}������_F��
��[�B�B�B�B�B�B�B�B�B�B��p//5�g��{U�e�.v��`��
U5��.y�\�u����A�'d���+Q�V������IN)��*�c���+��������XK(���)?�i�� sE)�
��q�����$�"0� Cz=������t�=�'���\j�nR��T�����u�[~��]�T"C��C��d�2�������b�\�����>QNH����X����8/�y����RU?������4�����9�Ux�h|�+&a��7���s8�rG�Py����W>cgPuU)��!����Sx�L>��"�F�MT���xf^Y�Q�_�D��R������7n�w?�cq��0�����k���T���-x��_uy���,:��M�*�_\��x����������|<k�=+)��Z�}�+�^>�U��N� �%�(��P�/��j�pQ�T��*�g����'f}�Gw�tD+�{Wl/��z�������t+e����U�F�����j#$&�='��g0c���0��&���k���<�	YH�0TX��C��EE���|���u����,�s�1��a%l26���Hb���/�J8'���������������������	���~�-�n�d�Rq	e����+�q`*"*J�����!�(���Df@��3*�W2w��W.���I���;]xQ�t�M����F������G��UTu�}������	O�2D�����s5�,�� MQ0p�Cn�o�������P!M!$�d5�ddE_���y�x���S��yf��T.����9z�S�d��Q���TZ���5�<=���g�WX���p3���w|=�)>��U�����#*eU����R��:'�x|(|������:a���(W�5���PE���by�����*��W����qd������Q��4U�*HO>]}��������~6O�����m����
�{��[��x��f��/���BD�OIQu�eD%�r�%�^��'P�\��;����OX��@~(�R���������%��z��>��tJ�I_e����x�E*��k�.�������|���{����N�+w������*�P�����'����)��w�N�������T�<W�5�\��������_Z�+'�������;�|����P�E�AsG��.[��Q>Y���)L���D�
,�?��Z-���h�Ga��#m�����m\�K<������q^y����ct��c��O��<Oe������t��p�Uy^�g���2Y�.1�J��c����{���*L������h�{�2Y�7��N+*3�5p�$c���:qK����:�����������#�L�Wj�oL*N&�>�2�IA������+?��=n����s���`Q�
�g��K���T@�B���.z�N�2VF�[2J�W�^��k�
n��c��qj�o���=�L���A��2Jy�2U�l�
95�vg����T5U��"f<p�(R
�k����9��m�M�=H���{�p$_�

�Z%J�1
c6q�"�?�����l�Y��h���~��5��k�Y��c�c��w���=��s�����K�^a<������(��FE'��������k�	�X�����b�6#�G����#O�z<�C:���c:A7v��;��C�l�|��3
&��������y�x0d��c��rw��?��o��zU�J\�p���Iw&�O,R�*���hQ�\���3/���5�E-2��Wv�MEF/H����l�g�S({<�.,,,�_"���������,,[�=��� �A+���Yb�U�7b�G�	���v�v/��g��L�XD������G�FaJ��7+�����?Q�J��+��h-��U��:��b,,,,,,,,,,,�b�q.y�"��l��j��f��,�kH��n!`!`!`!`!`!`!`!`!`!�A�/���A�*�����������������e�����
���_0v���Z<�\��?I��������tO��ql����t��r�6�F���>�-+��M%Z�ZXXXXXXXXXXXX��"�E�,��+��y\.����n�$J��u\�����k�M�Q��O.t�}���yT�d�s��d�k.��T<5�t��U�sx6ye\��P-�_�
'�+0S�'T��R6�/�����.>$~��5�^�@��4�;�=�7�k���)u#`x�O�']�_�����E���S��%=�_)]y�
390(���WV�_Uf
���8�]XHkQ5R	��kd�(�.k�g�O������^Z��:�_�T�_�����T0�U|���,���N����<�����"R�������)9�$�Q�@�Tz7�]9�eUi%���|\��RIn�{�,WDS�b�3���7�����W@`(�_���e?5�9��
�I�-�[���3U�k���6
�Q�����RL��?�@Y#���y�,���=�m���k�o!�
�/�3�����H�=��
���|�`����t��H�&��e�O��*�����5�|)��x�yN�sn�1NH�+�7��[n�N����Qd������G���G<��R���p5Jg�P|h;N����Yv��Q���h���v;��\P������/	�Q���b�=M+a�������[N�8�v?_��' 2&}:���V����2��'^
�����|�#�YH�#��*�����������������������_��Ol����U���Rh��[������_ "#�,V8)�2�8/E�(����H";B�B����yWj�Dii	�3��������G0O%��Ls�"/�q�J�N���#h�����H��k���)��DQ�������'����BJ@^JY��f������saF��r�B��gc=���qsR�U���B�&��R+�Ey�'�.�j1��Bd�-F��#�L�IB�F�����^�e�����DIQ!��P�
�
c�A��N�"�gN�R���|H�������
�C�PE1���hs���y9p��a�'/a�&U]~�2�PB�m�?�p�A/���9��|��:)p��y��h�S����c]9
P���B����?$�ro����RL)q(��'/%p��t�|y4aP��>�<,���<	�E@@ "�<����,���Mj����c�'�!������0����-�1;ll���e��m[d9H���:?���l�f[��"�>����Ei~6
�g���BN�G�e�X����Q�k w��k��_q���1��&�7�.b����/�����y�(("���0�VO�6J�!
@h���������b�1N�K)y
���K0Q�����A�S�������d{�W�u�c��V���b�8H�������
��m�q������8�6�&N�R���G����������,��Q��r�>�q��a���w/DJ�f��eb����}v(�-8�"�B��G�����`K�i{0�B��u�/��_��2���An1�_����>�1o�%��@�t��5=G�����l�|����w�}M�Y����[��2^�d�wq��Y1�'�~�{�B"2�O�J����5� �c����k��Ic�c}@M2���u����V�����q���1N)��gs�������\���a�-�-,,,,�#�I0C���i�<�Q����Zc��T��/i����b�����������7�j�+�_�
��.���q�hY�I��S�c�|���-��7���	�sV�gp����7�I��������\����M;���id��PZ�t���������E�k���n�(0�p��j�����i-<���>�k�1��!Y�QN�J�%*V�����~���h��t�6c�Q�c�:�S��_������W�C�	K�qgY�h�X
&T�RM�$S;���G(2�;��~M���"�j��+�O�Kw~�\�-����:U}����+�$�xJ;�e��*i'����k��N
��1�Xo���"L��=�Fk_���D�"���:?zL]�ks��A��Ni]�[)���9��������M��h�!�]mQf�&UBFj��$p���T�Qm��g�/�i��9�m���HQUl����~xp�v�;���j��]b3:cK�0d������������'k�7WT;�Ri�{��<���A��d�6��Q�W�[��t�cm���{o�On�V�)��J&��>��:��S���_���j(wy+��~}b��[h�NI������#���+��������*�.<U��>m��+�[�q�����S���C�[�j[o�B��Dm���:M�A�>M��n���=M�$w���Q_lQqM~�E��m�o��3����W��Y���t�E�����\n��|c������Y9�i��Ef�wCQ~���&hW����=����IZy1�Cqu�+m���<e��>:�qqER���U	�7~0�E��q�W;_��zf���y������
f��0s.vj���H���o����{3���~��� �����7i���6��m�p�/m��������x��A�����M�6������l?f��!����S���@����@�����<oz�������
��j_^�V����Q�j_�n�A��"o�Y�,,,,,�F ;;[;{��������	���|�����J,�r�"��^�/�V��9i��i64�_0w�J|��,�P7wtEL�?_�9s�Z�u�����������k��_���x��t��D�a�o�<[���s�Z��s[*���M_o�%;��E�;/����U�Xj1��Q�31y�������i����(��,�
N����oa����p
�����a���;�G�[�_X��u���8��9����9�E��7������Gp�{3q���J�E���T����L�f;����
�f�������#�~-
�'����0q\S
���:%�,��+VL^�7����%!=5��NdO~sW����@���j��a�`u���T,������_��E����C�y
�>�k-o	C�-Ywa����5q��g�^��z�A���U^@,b#t���Rf=��y��_L�������O�R�	OKV����6�\����&|�Wb&��y�����0��IX>�Y��0�}l����JD�M6HK��r�������k��6]���)m����._��n���L��.���OK`_��-�M]�iI�`���$���t��I�������ptk�<�,0���u��YJ��9��:	/�:��i��}%�.�I���gZ��|��IyY=�}�Wp/��x�����A�7k�����k���oQ^1�|S��������;!���~Z�)�M������E
Z}����<�F��O`�����-s���������pdk��j0Jz�CG��Oq"��~tz����#(p.������3{���0�o���];\��Jh�������w��]�>�����nr���Y%r����b��"V>�p8���Vh�/CH�����h-�����J���%��E%�N�hZ��9H�s9�1������a�}�c8�-
��R�(��2�^�i-�6j/<Gkev�6�a�c����%�$9
C����g���MX��L��	�-���
3iA��>]�'��ZBm��)�!�rr���()d��1��#A��}Y��;��%�$��Z_���;g~�g����t����Q@6=~�;3O�C[!����S����#�\�4�
�WN"~���C�����pz���p�Y��mGz��n%_o�������2#�
<���74!�t�|���<1���  rgC��I���8�.��+���%�L���������������R_
)W������A�D
b�h�����[\�p��� �WL��<��s����=�s��&S�1qO�"�W�*��N�'�?��m>�-�%.��#j�����H<*�����#��N1�����I���~Y�_%��9Qxf2���g����n�k��������M);/��[����V��� ��n�]���������>���/���so�
8}<e�sM9���+��j��.�A��8�f>;��o�����3����3=����������V��7�X���s��s_�F�e���w����U���g�=����qy�_4���"�IK�7��9�������'���L~��d���-T����UD�[\O��I��3MH���k�,o]������c���P/*�Y�+f��e����5o�>|z�_D^�c����r��j���hK�V�������"@����������~�;6A�F�H��#2h]� 6-�
O5���Z�DtvTm�r�����!C��vm�RE��4>7��.�t��-���h~���z~�r������V!�qf�s&���G����$��"��r?�
�����qM���o1�"����T�;
�����7���&cD�n��D�_��X5��X�g��U�������/1����H�6HL6���C���a���c����y<�2��A�+��N���|��V}�;���#=�i�
�u#K0r�|���D�6�H�?���7�����v@�t��	L�F��j�����P'��J.�O��(�KE��Xr#�[$��:L����a�r��#��v�2|>�1>��5�5W.G��d`W~��}�J��M�r������s+���
iw=�>��c2�vYtS0��E��9�o��Z�4C:M���e�cv:��o��TRz�IEbI�g>��}��@�f����h���^�7��I���i;$���{���yc���(�y��KC2�r�m���5��<�R7
��c]��`N���c�A������8L��
������'lA
����?���E��D����%,��
h�6/��S���6������}X��CX�1���G��$DPn#[�������6��c�b�)��Q�����>�I�J�A�1�LbT$����{j�G(��H��i~H������'�0���w}c?��7���K$E�#�u���1��I8NEfd2�����Q��orW��:gRQ��e�N����\E�p��K����h(:������G:p��f���>��k�H,��B��%T����J_�������_��0?�*O�_�@x���=���V8;H��hWg+�>6�u��m���P;�S���(����~�;Yi��L��T:M������s����M�!!J_��g N~:c��C�.���B��n�������/��a��[RD6��&7�)NR�lfj�E��FO����6q����A���+_nq�rh$���Z�C_~��mo���� �J�����*��d�-�,0�x��	F�n���VH�\<����z���[U�s*�����N�0�/(�3[���W����:6��7�+��H���K��x^y���{LnSK��h<����������i�������(���_�&/�U��;�r���s�W��/��^��[�5�8��g���n:�f�B�!d��}<
����:rS���O������:���r�������q���|W���y���g>\Xvn�K�
�HD�dI*Yq�����J)Uwz��O��F���s��+�WV]��,kg����c��W�����0��r��H/���?����4h�u��|d�Qm����P�X?�H�,_����������/��{2"�[�s�������M�@k���X����h���>b�[�a@P@-d�?W��������b|6��{��7�wG��p:�,��v�5F0N�7�(hDId����`������7���v�mh�$������HZj��������#��������z.��]lb*z
����;���k�Bl	2���C�N����Te!]D��������Q����G^]\��-l��/�6
����B�A���,������o���9���=
[@6��\(
J�^����B"�J-"}<"���F0���v%�����#������������d���M��������aDWN35�^�������S�J�\\Hb�G��L����.�����3������
n�sWt����z��BO������V�k8����z�T���Hn�}�|�9�=���Q�t�9 �%]j�Z�A&���b$���������B���F�O@��:��/��c�q�J�d�����81d0n��%�����"/���7-�;�8���\J��
m�A_�X��'v��y���5�b������'&hO
nA.N��vx
���0�_b�	9����k6�~#���tw����>�p.��q���6�F�����}2"(������$��-�x������4���<+;�J'�b.:���?�N��$����N�����f9	4$�RZ��?;/)SaZ�m���K�6?�eS���B����6-Q�l�ef����
�c\BwQ@IDAT.PV��X�=�@�]0=h��>�

�����2YR�/N���U���������s�_:���r-mD�'i�L�8�'g\��wN>�AH@_4(�B^�	F�*-y����}�
�(�T����!.�922���b�
��g_FVd�A��/	RV�
���C�pd�<��)�����Y�j���rlF_�.8�&}���E������-�S�����V��iG�q'84��� ��u�P��.����Z�@o�:�Q��)����y���'�������
3�*G��k�nR�A"�H����+�_$�����s��m�Z`Y����(WTY��"$��N�dxm��t��`�/)f[�!T���#]���M�=R^��[Pt�������+��lK~f2��{.L�f\����	�g��Yu��l:/��t��Dx�Q��f���������d�4��@��j��KE<K��	]�v�����������2%��F$=UL�A�O*n$?#���<	���(�$>�0/�%�PndQ^D������,j�jqh�{0���6�YnW�r����O�Zg	��z9�,�
�B��.�f<a���������G�PY<���}��uhr#�o����QN\�+<E�_�����3����A��z�l1u�!�%Mf��j�~	R��]��V=��B��<���<+�'��W�P2 ��vY[%�*>�T���$����D����H�-�?i�e�q���W��&=���|H����'5D�P������H�:��"�w�A�r��-��j_
���z	�8����|�XHJ�������f�)2/8(,��		�#�/������u����PF����
{b�����Y���e���C�JP��V��Po���Y�e~9�h_i����Te3e������O2�\t8sz	����^06�#�2������Ut��r��"�{"���P��.��[������������?}�! �oR�����E��H7<�������sh���ll���x"��sr�;�oO�����~���~�8~'$�!����%�ZB�w=+P;�	���xa��Q����~b'0�s�Qi&S3a����$��#�_���	b���)�Q��Ll��	�X	��a��g�r�yn4�"��o���L*��
ON�=W�������A��>I���`��fK�!w�Y�H���uq~����)���M�����>���Z4���{2>���(*\W8���l>��(z}���/�p����tV����-@��'�o����?�I,t
��������T�z����M��Q���	���	�����Os��>y�N��$��h!v���%H5�� ���U��Cgt��w�fqc2�g$?O�g�. �LdUyd��\Z:Bvg��>~��{L(cl`�l����q������N�mrW��2�(�2 ����5\���(5�	' ��
�4/����M��t�>�s���	�� ��"Q�q �z������xe��2�&�8� ����,�n��Q-�`�H���tQ>��#t��=�r?���mW��I�MNh~����fV���4O$�C������	Ya�K�p�f�UsFCF}8(������VQQp�EG��O�������}�P��dJU�L������E���11 6n��`n����'Qr����9�T�Nr��#8��b*d:sCI�V5l���Z��g��i�Pq�K�v���s�s�d�j����i��7V��)�R5�30B
c�YE������������+"��A�O�&�,���S�|�b�[���Y�	�+�b�`p�����ua��e"(JQ4��.XH����O�t��p��c0e�^�]Q���A_�����nz�����e�C:�K������!�.����Tc#���`����������"��6�\�K)�R�E��`�}|��!�^�"���}~+����ab<j�n�����q�i,c����p=��;��t
��N��R.���za*�<#�
L47����������&�W+�i������K������-Px���������������G�c+��DI*��s�w��W.��R(�����5R(�����3��� "��������1���h��c�����8A,T
���2V/��������o�CFzk�IHC-n���u����j���������Ew���t#E|�����]��?~|n��L<�
����b.dm~����X$�a�������F�H�ts�����?�%:��5��~|�Jt�W��Rn�D�^����E��'i(��������e� �Z�����xz�r&\���f�����1�����?���O������e�6���{
���J��
DRV�xy�&a���@B#�2z�A�kp�}��-
�M��U�������.�^G,�U]'��gf�1��Dy����*~H[��0�_\��_��a�B��z���H?��z->�F���K&y�H��i�Z,��-�t@��F]n��{�ae�P��2�+�m�?yko�����I�2��7�6~�>�Wd��Z����^��G���&���C��?����P��
2����'X����u�;�����R�'b����	��4~��`�NU�|��U���X���V���vi��NW��1�����VM��VR�����v\>e�k���������~����]�������<�3�W>�J��v���W��~�K�Fh��>��z~�Z,�|�l�����ub�[��sF?�G�����#�����{Ne��D�mB���qu+_tk���h;����yS9NS�G���u��MX|�:�����I�����)����)��hs���o��{O<�6n�[w
���2���:�m�!��c�>��g����lo��O�����������j����~����>�s�zH�����k�H=�*_��]�4.J�#�E��|
Z
$��c���8���-�L��m���%�k�"%}�L��9:��'#�CX����(<��W�q�y��|������W��
�XU����
�o��~p�<�i#^y�< q�e�G�>x`�.�������O�`_�g�]x}0���m����c���8���=b�z]/���Gq��c�F���#��E�G��Yn������cs�w�C?�������yc�2��,���a�o�d�2'{�0���|��� ��������,Q�Q�p���n
��]�Wd��|���}7D�=�w��Q]����S1n�exl�z�8�Y<)X���h��N_��y,�4^�g��_������7D��-�4��|�/��%_��J�4�������������?�f�T���#V+�^!�d6.�\���#�7r��I{t
�Bc�f��zr��r��Q�9����2���I����1e��wv��g�
!3Y�'a��Ax���}������T��
�N��]I?����D*v=�!'q#��-���_8bo�N���b����u"�b&/���V(�p'V�ID�Zz�D�P� ���S(r&#),��,��;7�G*a^8I>o���<�!��������T�v�/�
�o	���_1�)�����-�f�Uc�������V���$ �2f�q ����GD��,���/6S�M�:���@T�yhI������c��m�G�|Ggth���4��
�
'�b�s@�Yh������t��g�>���P��f��4][1B��td���=X��l���9��5��t�����b�������O�:Wn��Sg"��r_J��
'�<�d�����j9�E�1�r�]'�.�(0=vo^���Oa��3���!���M��P���+s�"]�Y'��My�?/;���h1E?9>�mV�Z@����qCA%s��
C#��!�g�c��5�e_�>�%��2>}a�5w���M�}�����=��N-]�-?tG�a���-�rRF=@���I���(�����aA6��s����Gr�f�s�U�d-����������fg����%��y-���@)��adq%���3�8rfO���b�q>�G#��FZj�/a�u��e����3�����;���O���:aX*��w����������q��7lXA��{�#��l*������?f5x�C�?Kk�$�r��1E"X"1�Y]v�C[��q�t'�m��}t�+T �U�o}��B�
�`����Q�s]����u��n����;�g�/���Z�g\=*�_���p��2��\��.���,=y��/���'������Z��������1s6~GZ�&���i����+�P���Y�Ob^}�7R��J��(����*�Z�����#�u�R��({6�h��mo~��s:7ER�VT���%�>8����V6�	u�a��A����N�w%�4Kc3����w<:����-�����p������<��f�O��>���"U�����\��M������QtU�`;��6��($�uO����8�j��9q�'`�N��m_�����mx .����5��)5����D��_�i�2�-|�~v!���I��%R�t��n\����5|������"����y����t���c���8\�n�	;�H������K����������bb
i)*�����Z:o���q��|%y�;?����&}�����.P�d��n?���A�`�O9(m�!�����=?.�����MB.���{Spt�{��9��
1��{��~&��9&��!��gh���X�� Rc�aPk.$2����c���B���0��@�l�+g���W�q��<�E��\������!���������`��T��K�M,�!�u���e��������.FcFf�m+D��Ga��{��g��4s�^���T�q1����X1w=�:F��w�V��{�o��]c����6)����,�Z�}[���p�������s�fc��c����`B����������E�������X.P�p�(��}	v�11�-c|&���B��D��|�������o�m^�����b� ��I}T\#�3��D]:�\������a�;��,���sNz���@ �zo���E��v�z�����U�����&Ez�!=$!�BBz�����$'!	��r�9o�wwvvvvvvv&s�l���L���1���	�~�����:�d(��}��m�!|��<�z�/��Q�M7soO���;�vX���#�}h����|�����>��g|k������oY���^E�+��\��n��h�-/�U�.����&�`����	��4�9S��HG[m.�Lb�����`��2|;e�(��WM���g����� ��y�`�z�����7��G��8����eC<P8�;z�z0?��8i���w�9o���?x[|����x|���w���v��u-b#'a��T��VuA�eCp��X���
�
�����tS2Y�}'`jI�_�dU�3v���o������+�qcUN���\�3��C�����@e���X�=e���1��^�E�(K�����c��H*V��_ �@�p���4R��>����������_�-U��c�X���W�G�X���lXUV��O�b��zE���n�f�2���lY�[��;&�N�������k��Z?���kl}�g'9�}���_����&��IT�z����������������.�e_�r5)}]W��v�G�����k����]P�{�6����o��� ��
�\��y��(!��t���%h(�L����W1�,��x��
���x�������2j��K��a�LyQ1
���]�u����`�=��mk+
���|��p���n~�����ga�k����&���<��(EG6b��|����M��%����^��k�)N�%��,����X0`���e1�D�l�N
�tEPS��'vbu��?�B9%
kT��Ga1l����������X5S'����Q�����U��R�G�;4�������9
W����5[�w��������]���99���$y�$F }��9���4�:8�?]���B�hkx����d������_h�37!u�
l��C�<�a������vZ^
�6� ��R����4�u��Tq�2��P4}}4�{�?�NoDaV�)�+s���l��������u\�Wb������>��PF�F��=i-��:*�i+�������u��8Y����m��<������j�RP�i+rV�����1�
����7](��6�'���w h��W�Vp�r�2�����"�AkD.�u�
P�$�
��xc�Gx��c��/��n+�W����	X��)D��#�����g�>x���q�)a.�j�d��n��������.�H�L)W"����wq�_mnBP�X���
8��F���X�c<�*�����C��Fn�DnV�9�F�!^j)��J�9i�
����� �{�2���8��7�}��`�u ��{^�}5\aXq��Q�;�9z�l�����w
P4��>s��k�_�Y��/���;{��$�O����o�'kQ�w6���b>�E� V`R�����[.8}��@>

��T�5�4}��������A�cf��]��c���Za�������h	�PZ[�%T ����o��X�%�'Kakk������`=�9!�V�a[����m���8��u��sE�o8��h�,��V���v
P���bT�o�q��0�&��_���{E��"��N8����r[7	t���I���X�,�k�<�����\TrwxW��p�\����W�-�Z�����t��u���
�����"���y8�g\��������A��c~��!���CxrO�8i����H9P��$�����3�H\����������}�+V<;7o����pc�{��p��.^���\����/t�f�;S����_���u�t
��0�M�'�����3W����s�)��5����t7�BM�a�1C��+�Dp�rl�f*~�A����_u�1Z(��n�����(���j�G���~��
C�P�^{�����(����s@�DS0O�E�\�P�G�	�==~���������b��3q�(+�g?;*���T�o��y�
�F#�K�<���K0g�#�?1��tA
�)'p3#�
�:���r�q;�c��f��`0����Y<�����0;�}Y�>�}7/���%��l
�f�Y�
Ja����=�~����q�}/8����
���L�}�����F���*Wg��L{c&��T��X���������9���$6�={���W\��_��8�.�>t't&��S���,9wX������Wn<1@E"����S
+���N'#�
���g���a�������T������n7"�ag�t�r���#����@k����>v�T(��������L������LU��v�����T(w���h��~L��SB/7
���
/����7�0�
e�]F6��������GuF��FAUy� ��l�{I������J�-���-E��@��|������
�[����Dw8��S,z[J������#��7j���l:��}��4��uh��Q�K��y��E�`���9���TY�m�����i���B�R�|=�(+�|�
$l�R���(�|k=
���X��p��
:dv���0c�?&o
��w�pSp�(�z��������#5P���%��z��[�?����blg1;i��8������;�3f�=xyX��T����5��{�h������4��N����Z����1��RYy7�g�����F ��7��?�.�����sW�;�%O�Oc�sS�����kI[�mTR�~�X�����1�f���x�����!�������~��4X�S�@��E�&����a��B����U��|Ot���02�Sge1���3;�1�K���B�K
*�E�p_�����`d7��_�
��������Yc��FJ��#�6�F������M�^aZgw������7��7 �~�z��B��<sX������[zc�����?��g�Fa���3q8����#������d��a�&����0y���[a�(�yK�����4��^���?�c�C�v�Q������1(������9���X��w���?F2�y_����a���x�<�&��
R}�.���~�n���5����e��6�D�7�,�`������znR���~m
'���L�����ML���	���J��(�p�/G~�)\\�1����P���kz��)�(��3�K&xLb�n9[��>�����q�Q�E������|�PN�W~W���XD��{?����cvaY��)?1P�M+W!U(�h$^�g;���u<��Cx��HZs
�������f�/��k���,"����u.�8�c?���c�]4}g����N�Tl.�OI^J�Q�Rsd���9@�
���vk�9�3����.�b����d��&RQ�ni�_
#�Y����.�����]��Q��w^t��G������u�UF<2�g���n�������'�	j����b�0�!��/����t������x���C*l(���B��e7�Hq����eyh����&�����o�Kp���qw����.:!�c'<�~C~u���N���A������X���83��xp��&
��J�|<P��G�ty	���u��(Lq=����]E��5�������Gz�<�M���/]��G���1
���4��z�����:j����r�S�R���W�9�����\�s)�d���j�+��A��O�'����g���T������0��V[��gD�v����!����q��
9�z��D�����?��q�
 ��+H@���������/~#���'�SN���8~8Y������7���A�<�Q8��>v3>}`6|��������=�=��V��Tf�k�������E���3	��F��H����*�<
��;������%?�����qn��������\3��u�.�3����
���rE�-:���U�N6�\��u�'P��w�<���Ou�q�n�o���������������ri�����.�N�K&��e�Er�2<1�y����\�j���%�U(�`���B����"9���x�I�>���(���
[#�t#T"V�b"�"e<]SbcK��|�|b=(����5��/��&��s�;i"l6zs!MW�!���0<�=O
\�7{��h�^������v7��d
���$��	�Q7i^6�6l�@����T��P%�'�����2�F�2��x�4S��+Q0D����<x���3�x��� ����������i�,�-�hC�|bHw��4c$�L��1d��#�O=(@����zn�}�b�K
a)��S���M�h�l��B�wM�XZ����I7�7���iC��Kurd�4]M��B�5T.����O4�	�.'�zZ�����[�!��[}];a�]O`������lD9��P�C:&�
�?�tpE����n�fu�u]�082cp,�pK�6��9��2��1v�2�[���}&N��\��i,H��_\��	���5B�O�|x��k=]Gm��AO_����v,�3
����gk�n�&l>+�;35�]�I�B���l���W1��
;sJ�t��������������?���W��M~���m �Kd�,�=c��N�����g��{	-B���D�$9a
��X��uP��������q�n}��{"�������x��[�c�A"-sK�/�\���KKP"
e���n9&��5H9��G����h�QM����������dv��n8\G2W�I��
}�6�D� ���Wyg�|�������S����Ii�;�[���7��05�Ra5��
�y"sV����������{d/Hx�Z�Y6C�$�!��� t����P:u<�N3����b��Yo�����sN���#����~��?�{�@b�Vq������+B�c5��b}�IhR[QL��dBUMC4��k('�~��_���]_s�&�VT��qb�r���C;�*��M��YT������U����;1
�^��C�Q+�?��u�6p��~�]��w���b����f�0���2�v�EYS����Q��C�U���<��(�UE0�
~�y����O�]���A]�s��:�+n�n���������.#�7M�gHw�m��i��	";���F����]=>�����*�%v��d�|+'sH�j^7�����et�R*
���Lh���C���m-]�H�e"�h3�d`����	��*p��+0���k��.T�����I}8��c�z���b�"�cl��7�
��������<�mJ��9������� ����&! �#n�{BS����)xM-�X0`����1p�BY���lY�}	_��j*���7L���rrAO$'�
�Y�_��-�~���&���;�iUQU��#���)�!�z�O�h&rm����Yq�M����4d��%�`�J��FE�n,xa��JPl��]1��������3�rU���������?O�t	6�>\��s�[w����%b�����+�c�k�������B�����	�������o6�!�wE,�A������v����b�'���
�#��4�%��A�������b�+B*�+�nF��H���!�5�H���"V�x�����V�A��bN�z����|��71i���~sF��1^�7M5����9_��+[FY��3���W�a��A:0�8�����o�����G|�a�%	<�{���������e�;|G��<�_���7]�p�gek���m����y4�)�o��x]�,��Sxr	�&o���<F�+Y�K�����C�b�k����J�|�
~�2y�s0f�tL�Um-�X �.r�������9,I��^!<�L��'����H)�!���9����2
�r�(����4�e�!
}�|x�Z��j���O�B������B���y�A�
�����1kN���D[�dq1u'I�)$y��.0q�V��j������f�b���#W�T,���%�Q�W�Mj V��4��t��K(�BO�Taz`�����\�����>�E��(|4o"�>�8Z�����P��b��D�4���������J�>Oa�~`d{bC!��#����7r(�
�al�n,�������A+A-�&��7Oa��)s������m{cA����������+B��-7[�T��A&�B]�W�B���/��uF���@zo��T�
+A������a��A�������B�.f-��D�1U�_~����E�_�����4nU���d!J0��)��i���s��C|V!�"�����������Lp1���1Z92�i�DY����B��~������!,�p�nF�R�\��Z��L-W']j������i��W���+���J�F��
��4�b�(q;��2��;j����T����b����Z�k���7��~Cg|<�QLX�O��Pb���7@,�?����,t���M�~�A�t�G�-�9T��mC��-t_�y�G�5|�w�4���![�:]�:��m��Ofa����\� *����;� ��f�q$�����(�I�������N�}�v�;���v���9��w���`w]/��#�m����-yV\9s0��S�G�O��y�8!�OM�B��T��p"��%~�1� �\j�c�:��):�3�����u����AZ����I��:�!�&:*�e3��A����
g�I�Q`'u(��e}2g�]o���N���l�#���Nx��
W�������P�&s�R}a�����A��k���&0/���x���j�;m4��H:���W���r��W^�o���d��2���0��W��g#+1���a]a(=����x{A���M���}�}�j�w���g�F�2��j|����p������)�����Lh���C��	�����u���:�mCF�����C��`P.�����k9I_I���.���s���PEz>���&5�e\��0�>�D�R��gmAhMhJ_���y>��8O��4NM6��qG;�O�y���'��	��0��c��Q��W*�Zn��&'�SQ;t0�;�d�OD��@wF<3�/rRQ�B��*R��a���
�r�������O%�Oe9��D��&I�#���!r\������������4���mIF��&���!����eg�����q�Q�+�_��2��Jv����Q�@�	������Ek����>������Ji�1WG��q��fY��0)�5\"Q����Px�K�t|������8M�����H��7����[�I�](�����5��)���}����}
}-�K">�iY�������+��L��}���?�4�Q�7e:�d�
�IN
�F���)x����6�� tr,�N>k���afE*B
�2����e�Gpg���O�Y�;�|�L��t���G6]�{To���F���
����,�`��,�{b@f�FI|�� Y�6a�������Q�02����9��*�����P�'������!��=�JW[��B���N_����W���`�!X�"q�N�tG��~��
�DP�d��D��+]�b��(�*���	>TH���y4��&O�������?-�O��+@]!�CT
�h�����a�2���&�T�ZW��.3!��^���U�w�c9@��Lv�cD������[��bk%Zy
�W�������p�t'V��FuD;[B��.��PTP��0'�nO���G'O��Ia�3!�b��H�G�;w@��/��k�f`0��bnpIe)�RW��=�*i�K�!T��'�ll�W�U[B��(Qu�,���<���]+�?���`F�A��"����+���Vj����������J������Y�q���@^'��������B�_C�����E�E���kg�����+/�I���#�*�R�+�5�2Z�3H�r5���?_�k
�VJG^n8�claV����a��h�0�r�/����/�n����b7%��#yf�����0tI_�m�����C���OUG]*9VS�ud���Y!�� ������M�@�.��"��6>M`�F����8	������vr�� Q��0�K�����u��B�������.�H����T&�qC���	:wWq���X+�,'?��O��2��LI�M�<U��h��CzK,f��)��w���o������������=0,����^���Z����+�]�aK~6iK����X�i*�2�����pq
�����;�G�`r��F _s"Be�������of[�T���B���Pq!F��I��o���E���2��� i�|�Z�w��[�#J�p�M�%���>��X)`Ty�5h����r
�@�n_���x��?>O��<�|���*�y�@V�����N�gQ^F�#,���y(L�N��+���]��tn8���b��~1���
��(����s
���S����Bt<C�8C���6�N�s<��k9'K*/�i��P/������%�;��,��F����}����R��G��a��|s3��2�R���Z@�bl�@D��Q�$�A��3p���1�v���#(�����_iG��M�?�~�%�3b����i��[X�����w/�s�6<�>����j�t�(��>S��w�~���b��8N����H���(�
��:}{��F���������8}�*a���R/IjLZ��p��[G�N���x�B\����3�<e����-���/���@d��V���PE�6.6N��6G��%[���Y�4D!#3ee���H��hD��*�e�.�������
8wG e�
����?��U1x�fW�������oj_Q�T�T�����+x`B�+��!���i8;���8����)W�3��V!�����w�eR����&V���)�i9�X+���nD�(`�@U+'�*)O�2U���������"��F��/p+�����0�A�[6	�-���*S**������
T����f����(�!+���,7V���dB�(�9F�J�q�s'��ZH�N��Cb8>Z	��4FP2as��](
�|VUZ�l[��l@�,Q�R����&x.���4R���n�2Z}���oR����
�'����^��s�1`����ZO��<�+�ZL��l�m)��
�����{�e��&�k�D^d�5�<u�6���>��g3�	�Hh�k����\�������Y.��,�h��K�2'���t��� e��uL��5� ���|�9�~��H���J���������'6���2g���?o\��5����,�`�����Ek�wN��S�`����s��xp�m�����B+��E�1��<jX_��,A-1��g5C8cUH���4df�@����%���eq@�O�
��2�_y-����j��|��=Vcm�a<d����%}l�
�1��R�X�1����n.�.<�v��PF8��_1��n\�PMKJ����M�����x�������KKk.f��K(L�\��E�%~J��s��G��2�����������o�Y-�z.�l=�!xH4��_1P�\E���(��Go�$�����J��P
x�T����#J<�"��������L,o�F��Z�D!�u��YJ�>����
�4�N.��d����"h]F��e�a�`�1v���3��rv�_|�_��NvBv�"��J�����Y�S���Gt�A�iX�9�E���^�Hp������C'�sj{����?���Tn�}iK�����+V�x�m��r&���p��$��
�wpf��?��I~c!�;�������������`7��U����3'cu�3������E�4����@����x<Y	��M6��1H��#������'�3���G��l�
�NO������������G/y��$|�V�G����3�V�������Df�JFZ�f�����Ak���y����/bH{*�Y��d�&�������M��9��C���(�u�W��z{��&r�F�$#���r�*���X�%�eUVQ�S�v"�d(_�TQ 1@%���0p�Q����Vt�D����*Jy\9�
8�������P�0�=�]Lz*F@%S.���iG�~x�?�ON}�7�L"o
�!_�%M0������K��F>���C�\����o0w��O�8�]�Y
���3i���L�0�p�Ox'T���q��s.��p���I�2�Ul���qj<�u�������/��$��P��qI4�$p���2����jZ,K_�68�c����35/���nC��;X�c.;��N3e��;��3��
��T����j�T��T����
x��w��[V����b����r�`��&�B���?�#��k
]j"��w�� D��g`�
�q����w7�������M^l�o�<k,�b]�(
��
�~����Z~Q����{V�������nDs��q%Gg��w��h[t����������M����x�~���7��%8���_�;n��U��"�y�0M�HX�ec<����?Nk���:'�I(a�H�\Y����1z0Z1�dD�]���C��.�Ho�[Tz+n��u*�_���8�$����M����;:�$1e�������M��D�����
p!0S�>5]_�/!2��������\���*���p��}���Cy�\R::d?���l/{�D�������������b�`Lj����W2_=�&aG��%g0���q� PG�B����l�B���t����]��z`�A����>���z�9�B�����D`b@��Z��j�A�
&��FX�Wo�Y��+��4����d�6t�A{���+-@��c��4���c������U\&������.7��S�,M#Z��q��A�(��(�����Sn��tbn�9
xe�V(:�+,t�q�y7^�O���Y��Al���x�R�G�'���4S�x�a�Z���"9g��ph�-�dCV!�O
��.;���O���F�V1�h6U��l��A��Sc�s0ek}��d[�*�=C��K1X3�&��ETs�|'��r�D�2kE�w�_�>��{�0db"���-����x+�1��Yp������3I2�p�v.J�&8�\N�ZYiJp�o�ZJ{)m8o�fY9#���������`������zg�g�'���H?^�[pf��}��WB�@IDAT�r�{���]���������e��!t����	�Y�A�����,]��t�fL4���y��3���L-������x
*Q��/���>����hta;���s���-|;m!���!����� H_h�%�X0`��xh�(w8)������30o��p�B�w�����d�N��a����V���+��Q�|;7���V+g;���/f���S�0��UQG2)$�@e����J.{{�/kv�/E�	ZAS�g[��tC
F^�q��Q�#�*�������B�6���0B���p����x�J����8����V����������:�iB�uI�@���7��D��tN!VW�]�]���%����<II���*M	"f��`�H��v���9x
��~|��wH���;��6�������C���|�oT��x��Mx��<�)���w4m#j��%x�<Y��J�{�$���:���\Ke�!��wtP
2�X(�z2�8L�v~��[~A^�e��K�������>��u@.�4P
����2�}�NL�#;�4���;=������G��0��1��������HEa��OW�����<D������L���th�_��}*
/��:�M�{�AkG�"6O�����x�C<1�GS�|���g"[��J�B.�QQ����i�x&�m�g�x�;��JSh��S�rq��;18�Z�x�
,]��T&�+ }e�`�C����=����a,W��j(�R?���������?�B
�4�Q0Hm'}">O���#<p
{n����Fe�����U�A���pq��D|����j�1����:����awaz,y��8xp?��T&�)+�0���*6���*�/U�Q%U�/)"��xr��R.��R��2Yf6p�u��yGQ^�`��1#�?����2��4<�_/�dj�C���s�h�;��y�F�������
����5�����#<�d>���|>�1���Q����/�?��iZ���������w�#��V���#)>F���\�����-���Gp������p��{5�%���g��������g�B��JE�,�� ~�[%��S:�&��[h���?�=������mO�D�.��G�����k/��o�����ka��+�[���N�:o<�ee�L�F8��I��i�>�.��rq��s��a�p���b���m`?��yV_]�?�o�y� qQ���kn�"6�f��y���Z��o��f��8��RA�M�"=/��G/�0��TS�H���]� �����X�m�����da���t�g��l���<?��������rC���&�S
*Ga-�K��Zn:�����LLfD�[�U���t{�yD�Vt>7��O����U �A���p��Ja��T_��1/n�t�@.7����[��*:sx����f�7SL������E
5��ao�����LU�����qv�w
���pO-}�x����!~�uR������m���r��>���S�R��##���r�����s�>���d����81�w���2����k��[���D� �5_�j���\IB������+h��fk��#l�-Q6s����)�y��$��������`��r�{9��Hh��m7:���D���Y�Nk�����'�	�h�d�����o�p�/���E@�pq�e���?���W��o*�H����<QC9���L��F�����
3���-��G�p�T�j���}A����������?�KC_x���W����!����N�|Sh��?e� ]�C~�\I�t�8�O��[~���	.:������S���N��������j'���	$B�������{����~$���Y���j�:u�	���+���R����h^�/�[�Hg J�k������a>��m
y��eC��(��+��1-���V7��cT"<:[z�4��_Z�',xVA����`��X�������|���
����[�����J��>�Z�+�Jr�P
����?������g�����'x�R<�Q;f�C���k7c��$Ch�uUv9�?v��6������B"���d>l�t�}��D����.;+\�q^�����0I��.�	���������FA��\R��8�P��!o^��:�o�'�gC�a0"M�2�2��(��X�c��FZV�	R���b�;��v0�e49I�0��;Y�`�����5���=\��`���kX}'O����c�8�Xx
���o(�����$�7���?'<�s�ox��Y��9j_��{��X0`���e'r,hqU��^��y������n�B
H�����V���B�7t�����/���Xr������Z�e�a���z�0���"�B��Gh�6�FJjrX�������#��d��i�p��~�{���������e�J�b��s������cX�f'�D P�(���@��c�����/����������s{#�&��������������0����x��+�d�?������,�B���H�1wo~S#hm��"MRi�Dk�Q��?C�3���_��ag��A�
O��O����a@�v�P�������|�fL����Gp�#V��������~�xL����\
�&5�s+2�NW���S8�#��\�����f�R�en�o�`���%p4�<��JS�)�1�z�	����"�dYB��}3����(Pj3�Q�����,�_��>�]Up>����<*�����)��������"�hQ����2?@qV:�6/����������:��x$B�v$�0�/���%lk<��'i	3��
e� o5�?Ka�(V�����u�V�,8�.�p��J�?��E������@`#;�r'��W!����e�\��2zV���,];}�������@y<�r�y���g�!�+Jx=��NN�������m���������c���8���v��0����l�-E\�J����jl\����tV��c��������E���2lz�m|b���T�Y���`����!����������~��O��f$R�����>Q�' }�U'`�	����Zk�%�&{��oj�	]��b�Q��aP���'!�RY������f>�}�?cN"#k�Z$��!����9���A.�3~��,���.�5���QVxy��X�Evzz���;�u@���?�/���?���$���y�C|N������R�a%����}<�'��l�-��g,I��+h�VFE+>1���5�FI��I�e�����3].6�����3`K1���.'��z����:���*�y0H�8���E��a��~�$��{
�,F�w��!Z��y�643 ������P�X�f�
�Yw���Gj�V�;����R��/������6y�����T
|m���x��������X�����o,��w���r_�Hu�g\7��ee8�#G���N��;�{����k���u��J���{��������(��M�.��|��&x���_�����w�-���s��u�3��W�kp����=�nN�/���� ��vEx�Mi,�+Z.j*�jT��"{�||�E1��`KeC>���9�,~�|4zv	`�Ryt����b��m��c~%��-����m���������)J���$�X������ 2�f������5�M����'��z��m�P����:�0�F���K)yi���C��=�����r[zSxh����5i5LEE����i�HJ���(�^���5�Exp�^v�l��������x9�P�t�q�����T��_p���i�&�	 z��=5W�������F���}�'���?���Q�����-�k��I2p"b�����Sw/���C���:��z�e��F��1�e���E7!�O������?��qGo�(��v@W��J���%Q�tg����'��8�G�����w�b���������c�A�����d$��F�u��k����G����M��dr'�3A[:�T���	�k�X�4��o�Sa�l����Ne������y*T�>�Ty�7:���Q~�8�J����=���K��y���O��h?
��!�P)�W(��f��n]
����1����%�uOI��p��a�t�S�u�e�����=p�sW���}�_���Q�z	�i���m�5�5�/�V�Mn;���3|�3���YR�^��.�����V���n�p�����7��P�]�}��
c��}��m�5�������;�S����X���z������(h����*@�����|����<�������iQ�Y��5:���C��|g8Q��1�0�������q��6���;�����sE�z���pw�
�P��u�n,y�m|��_�?�2��+���_:D��-�����?�@|T$>;Z�
l*����y�S���	����������/��nG^���_�kvl�Y���[�����X��a�aS
O��<����3�c��k�:�n����J���F�XU���=�B<��d3�V�
���0����}A��B^b��������!��x����T�#?����q��(�wC.O�i���E(��6>B�e"X��:���bl�I5uKS
��1}���|p)�}v�]QI�zn���9��9}�w�/7"��<�}�n<��o���.����r���=�e_�P������.�t&�T)b��������7��I�����t���X������)]��g(�����B,�<	�}����Yg����1�0�uO����M�p�����<��QV\�=0>�gw��a=�1E>"]���8y=�q�_���Vp3/�n����W���e�R��E,�^N�&.�k�~3����<��q���}�Z.,�`��,��a�0{�����D����)�9-
�FF?�:�3(���TOLFJr
R��@\�$Dz9��{
�<��BO�@���x0'�;����0sB�������BI������W`�FW�
���%z�$l�����FD"������Jq}c�'^�	1���E_�
���$��Pr��}G� �J�s7���"�x��q����}�rD��=��G�����������q��]���.��kF���-�(��t����2l\�����U-G�'�d���N�=\��:)�����dN�
w�[U:	���q��HGi�A�s�d��N��J�fe��7Z����������,����"�i.�2K
P�3�G����Hx9#��������T���� ��������	�fZDP`'R�Z�=�B����!�����.]BT�2e	%�R���+��c	�h������@oDZSD�B��t��y������n�.�;��W��k� ��.�eAY�X�NW��bZ��vD���g@������/��,z���XG8�����n����I)8��T*��D��Dx{{�]�����+�����lLG�YU��~����]���P�R�fk)�R��7�Bh�`L�1}cF���W�"VG����#�9g�egao����e���=!�w3�_��;@WZ/��"����!��DN~2\����E;.�\�����u�����5�������iH:|Yn}1`�P\;��x|O�+���j2���
gy[�NW/K��FVPZ^�A��}g+h���`}�� 9�8��Azm,FM��i}\��c��4`����^EA�����S/���gntI��{�{�K5JXfU�Q���������� ���oU�2���e9������TyF*�9\�+������A+(Qt�D9��J��^���S��>��9����q�MC�'������y";��	������q�$�BJ<��N�W��DW?��#m�utQz?��������i��O��;1	�I	HK:F�<1>vq1.|��$?����h�-�"�a� �z���������b.D��P���D*{��!.Y����T6z�B���W�O���;���2�q,����c�&���zn�2]�y1@Q�VhQ��
){�'/N��T��$�h\71|�(�����n��e/@���FQ��.p����nzq\���q\_]�7��k��Z�ZF���U��8�'�#������9&
!����^�Chc�h�U6�����������N��1o�]�wa_�/E���U�;(��=���������L�%���4*�S���#���A5�����r+�x:�HG{���|p=^,7v`{�sa���<;���]�a��?���n�v9������u�37
\HO(-#�(�m	���0|�0t����t�(�x�7�D"����O������djZN��kbp_bA��nal���'��8�x+�&!�4��x���H��F����/M��t��]kb|'
��k���_�a�qEK�""n2�a;����B0���q��������n�8���X�<�
�M�\�U�a���	T�.y�'��	HL8�85������^`��q�`���U����c�$�X'��$�p>�9���yB��tA�E�����KAq�H\$��p�5���HE4����0��F��^�pw�wN9J��#�4��*�T
��E%j �i��������i{�c��o�9'9��v�1��p8i;�C'>�����Wg&#��'�"�G���9G& �w(FN�����E��������yU�0��>����`t����\����N^�psaH��-X��Iz6�r"
[w�'AA^T:r�����&��y��Q�;P���`� -G�D�}{�shO�9J��r��l�xbv�r@��H�6��T8�]=B��w��c��K$�}2���ev���2�~�T���4r�����QY[��.�O|�v� '��xr���O���_t�q���3ek����Sit���Ry9z"�N��w8I�o��m�d@�j�oy�Lz������`������3���w�v��;k�@�S��X��3��DJ
����Z��T;tA�H9���3������I����q��D���H=q
;�[���H�n����v'��.��
�����)��H��]z���E}�Sbb0�C�[4?Rnv�J��z�y���O��W� �([�T��Pu�F6y�'����d���#��O��Ry��L�x�w��*M�]Jf�u���>��w����,����y>)'r���
��������;-����D::����K���I����N�T5�d�{q�C����Z�/a��J��yK����[�:D ��<]YB�fUa~�����������+��>����#s����S	����J�X-��0'%���2d�:#fh�h%lK+jkn��/�*�Qt��������N�o%��}�kZ�P\����5�~��)�-�Fgp�.N��.vO_���?M�1k���������:�:1�F&����=�
���0D3����3���T����T�9����gqv�x\5}zy��*���=�aV���?c�pr�I_���:?8F�l8<(���������x>�#`���#��'�����#�.�58���ri�%Y0`��X0�'�@e%�����K�x
�NO�=�4��H�-	��?(�=wA�Z]Js"��������my��4V�����PC���2�O6���<��������l���>dw�u=bmH��xn�\.<��@6W\_]�c�K�NK� ��HW�
��l��O������R
�-����9/x!�r����<��~d\j�M�[�Y�^)~�Zo@�oI[$ 5�����K������M��z'^�E0]�H�s��-��`p�fb�A.e����2H��Z���h6�T,/���Z 1���?��.��Ll��7n�����4�X�XOcm��e�/]+��w
OU�j<
.����S�`�j���&4�P��Jx����tr.��.�/������b�n���|�B`>��M�7�=R����!��_���+�)�R��D��	�/xk�U���f\v� ����-3��w�qC��M����3����~���w�D��l��f^�K�g[���N��
�O5��� ��k�9-'������.l[��{]5}���i<�)Y4*�|7f4�|V�JD�V�T���! MyU�e����b��~�_����p��z~����4\��4�~�2V�	�����}y��dH*P�([�5��c�,o[/��>�"����
�����q�4�k�s�iD����M�T�������"B����6���[i�$�R�/R����q���B�8[�����5��rc��X0`��%�@QQ�rB�����U��������"�q�nEZ�`������]e�������04�<��ZN"L5)�����{vpZ�g�e�%�����q���y�2~�2��Pi0��
��g������:����sk
fm��E����:������Zn�e�����dP�T�S��rkT&�u}>�i6Qa�2������b��GM�B/��I����������6��B��}�`���R|��Y��&
f�T[��~�{s���sqd�+g;�]��$�_d�-���o]H����i��G���?iZ���W�)"���P�W�c_>�O�����:a2���3�['d�y��mk��L��f..�/���Y\4S��{D�l��}w~�	���r[����Rj~zF>��l{�����e�ge�����lf�Z�)K{�*_g�ZjS3�=:_�fY�%���9M��s�f��m}]?_����i�V�M�PV��4��h��� j1��o�e[�g��V��E�6���w�xn^#�������l1����#B��/5@[������M>��y�r������Z�-�`��,��b�"��Y �`��Z�@�r�n������*��Y�c�n����]���E��N0��T����5'S��s��c�3����EU%-+oK�`������q�c?s� ��!�h"���	L���hG%�R>��pcio�1 ��)R���3<�]c���;���������:��J&�K�Ck3�����d6�V�U��,�D!�:S2�azf��`��,�`��,�4�(�/
-�X0`���	6`|,������'�p�u7���,���B�S�?z��es]]����k<u��8D�;�!�����E��X�?��JU%�8�\,>���`�mb��h�M$���3����a������
�����q7x��Q,xm"Fw
��&��w�;�R�%��c��zX92�g�+��/XS�S���Z��`��,�`��,h#.��rK�d�`������f4��jZ%k�d������>��@�����j����E�����C:��QM�h�lI�]1 ���R��0�OU�`�������s��w�������WC��BGtx����!���m��W����yV��mR*����R�X0`��X0����o�C��P�c��,�`��,�`��,�`��,�`��,�`�Wc��R([��~u�X
�`���?h����������l��b�b?���U��b��(�%�|�Yn~k�3X|&��(oK�
c��m��%�X0`��X0�k1`Q(�ZZ��`���?��J$�b��G��/X6U~/L����K��~�6L��XGWN�#5m�Z����,�Y0`���u1 ��6G����H����m��e��?�B��*�bz�2L4 )S����M��zmm��T��A���w)`6/C���%e3�y��M���^���u���O���;s���l����k3�.nAh����i#��k��w��1�|0���l���y���_����8Z�� \������fi�Q���\,}��3���8����9��^�6���h�)���O��;m:^�1 |@���������� ������������6�f�o����4�.G�em�_�\
���sY��R3���2�G���
kT��t���tL7[�9�j�4�W�D�B��K�\��\��c�|y���]�M�iw��rYF�4��
��1��r�����r��U/�������'��I��P�\5ss��R^>?�?Z����m/W���`�����Y�_�y�O�CY`n4&�:���h������@�-����HN��H���X �`�����/����g���whSg!�K��|��"������������h��I�	A���S��X��B)�B����"u��R�����'���ww����{#8m���������{Wfggggggg�Xq�*���u�
�
��B���M��
oO�u��������)��Tdgf"�j!:7CM�"���������eQK�Q�7j��Fm+�Q��s_
�0ui	��->�5�g����%�����B�=�����E������r�S����r(�a0��u��//	g <k�m^��E��>�n���3��`�--�
g�5+-F���[h-oE7����@��j;��^��gg��D67u�2h;������qf	,����������#���[n��`�^���o���v�S�����(�?�J���2��a��(�l�������J�����f�������d��g��o��>���,��[��x�&�e�E1iaf3������<���i
���9J�)^����+�Q�(�7��%r�%���8V-8V���X��)'��"���8e��92���ce����mY{g���S��y��QSb�����-�'d����xO������'�~27�u�w�H�k9J�����w.r�T�,oqq��cN���8���[
�F��;��I��{��:#Os���cn.k�QA��R�K)5KYs�W���>���>b����-a����o���Cd
�h3i���������b�r����F�C�Yd��m]{�(�<�q\��H$.�t~-��M}-�����[���Y�����-��w2��������#n�����u�)(���][���+��B^i�X�����NB����0�P�-��
�m���������Z��k4a���S������GB�2��d�u����n-���<T��4[����C����a�J���^&����o�c���~+sT% �Mb��l�h��	�hT����n������>V��j��F^�\�kaH#:����7��o�����]�U��zIi6�
|�xm�I�Vh�d��������:���bQ�����FU��V>�?��)�w��� ��^\\�^��Q���z����q������*�(%�Z��>���n���a�����j|%�y�*�%���<���=��C#pF���\EXF<r���S�����<[O��%��&���Qz[<*�����A��z6V<"8����1�l;K���PdB������t��",�1��p�%o�zx�����;�3�X�@�'p�w����?�lo 9G�t���	�;J'w
b��b������|%}f�������wK��j�x��}�<���Z���P�����0��$/��v�G#�}�`=r��>��O_�	i��}�����V��7���7����J$
������D(R ;����7%bo��X����������T�<VhQV�������^8�����6�� �a�[�['X{v���1q�b,O��h 
��Q�8
p���<l�v��]������%����>�
^]y
k�j��4��o��P���J���e���"���8��2�ZZ�������8G�y���ge���U��h�v:�}�'�cz�`�6�{��W��H�:�U��a��<��@��m�r)��c������||6��nK�����(�@�[��?�I#����d\o����{� �j�Z@���������T<��Jla��������C��"�[�s�H��D�t�&���
�{�C��*Wk�f~0��|����p2:>������Uy?���d�FU��|*�����y18��5|��=$�|����t/+������yL<�O54���o���@�����,�?i��r�.���Oc��m(.���p������\����{N/��<�K�;��$��8G	���%�xl1��IDjv�V���=@�+YL��AA�%l���~;��?����_�^&��u��6�����j#���?��d
�b!���|h,���k��bPKL�</���l�@c���K���w��X��=:��`����~�
�eI"�8�����U�\�/�X�u}���k�F������l����~ ������7�0�Wm-o���a��'���L�+�8���B�_?�O�8���6����SW�����kx��S������$�Q��McLX�����'�FbH1�'���]_������O"�r:_���8��}Q\(�����|�u#�(���.B�?���[�[�a�s��w��_��;[�O��~�����j������xo�i��/4}��� #���Y�`�Z/����XvA��l{	��������xs�'Zy��<?
���B���=��ud����[��F���Um�b��X���^�o��YO�g��@=o��]a��k��
G�e�O��'���U��������m�����m~H`�b���q���,������NF<��#��O��\��P��lhg���i6�^�a[������62=OG���.��8�>�'����~�8����4����N
��
���J�����[�����?lo�K�}	�sS�j5T��������7q��9��&�;��:r{"��X��9��A'G���P���h�=�M�~h2�^��"hfc�V�<~I������P�����)��s�w�Y�8��F��q.=O3���6��
����H9�	N�������������8��)�&US�WHe-W�$�<-��,2��[��~�qz�>�<q�{e}w#�o�m~
"�����"8�PW��~
I	��l?p	��w����!���`\�.(3i��}���'���c?���=_���\� ,���}������@V�5�K���g�����T8K��/	������[6�5������w����r�GS�BV�=��-��g���.K��p�v�o?��x�hw���"�����`����$�;���#��P��(�bQ�����(F�������?M.:�C�~�:�R��~4������.4���A��Np����Y����y,��d1�����Z���c�8�k@�]��W���D�9�UW~�_v����A����1��}��Cum��/A�����bF�J ��F���|�i���?���lr�*�
B���X��B2r�-s�L���Q��������u*�>���w{L0Ua6
�� hc&
Y����o_�r�F�[��s�6\�� �X���������%��_�F������-�/#�=a2@�o�t��/K��Q)H�E������6WCE�j��H_������>a+T1r�}�V�t�>��4�������Q�������2:��z��@}��,v��#����s�����W#
��)���;6}���	`������v�����x:��11���aeh�� !�O��k�7|�b�Y��k_�|)rBD�/���=u�|}���i�q��X}Aqi��B��<
�g����$�|f+~Y��s>>8�z)�j�
;�# 0�\u�Wq�� \��V�-���.�����<��;i,;�B�Q���M�����`��B����M~'�k��x��E��r
�����<hf��`z$|7��������>������~8��������\DT~�9
b��y����'q�y!~��/�-X5�r��o�����qA��",�?
��j������7Y��i�2��W�Ar�C��K���g�������\?��V#���X�w|7��I�_{+�F�8���.�J>E10$`����	:����8T�
�������������#���z,�q��Na�����M5��p��e�.����,��	��:��>���i9�>y%�����H'��I���(o�k��@�g�`��7vn�]����3���H�}�#?=�{Va�/�����Z�#���>������D42f�Q����7`_`S�|���O���/	�gl���""-�:+m[�I�������������vb��p\�+�"*��K���lS�n��@���8��'������H�W8����@
���Pc����9(u�0Es��gf(�o(sS��27�&T������]k@�D�&���I��\�>�Z������7rm���o�je��p����]U������^��+����j�b��O�I������������>h�P
�+�2p����l7�a���:�p�f��i*l1@�
l��-�I �W��wcz�g��b������q������f��3���+���88���*��w%
�Qv"���S�����j�R��f6U��
��`��M�k1P����(����7
N=��7�[s_��>���vX�����]��Uk�N��cIA-4����e��9�b��3��g�"n?��}�@��6����S2LF�������[�W�}�_3��5w�uCK��W����|o�]����^�H��"�m�6�-�o��U�R���q�U1��0}YYm����V<V�%���3S~QNm<;�	s4)���Yt�����y�&<��GEt��]�!,K��pj[���K"�y��l*�����
�87F�W�cqQm4q�
��,�&����'k�u"t��e�	��&�>"��Z�p�6�D�	.�$��-�])o��J�&4L8�S��=o������K���q��i%5�j��D�e5X���6<W��������!��������mh����F���������[�i�9���j���H �^������2��;j��`�R�-�����;�.��w��Q�V
�1���4���A7
��aR���'��R�=n������{[�z�u�X�Ek[8i�n��X�W�Ohu����D�J�o�s��{�~�p�t���������%�s��4����H������D,M���E'�����9���W0�9�i��D�S)h���@��L��xTh����^-Se�+%����Z���h)�	@�o�1u�;����U�t)SQ�1A
W��_>��W�������k,w�F7��F:�j�������|����G;^Ge��u?Ao+������5O����~�'��z�0���R�	�����-D+�Mc�������o�����`��6��"G�z;���b������p)�T������&FxR�v0�������n�uKs���
q8H?��d�!��P�L�G\GsP%a��WV����k���V��m_\�����x������55���C{-�9��Mh7�u�6���
m0��<el��`�u!=�OYI!8;z�|t6�����U�F�c�[��B�;Z>n�y��E�%~LrbS����8�q�$� �r�;��tv]���El�v=��{[tm�#RT�u�Ea���1�t}4q��q��k�c��������k\��g���{gmA@�j���
��V�����O��/����~����\EX�����am��7�'K2��qf�,�3c���~�aO����X��><�S#?E/�L�g�b���X��<��dR�`q
AI�c�lO��y	.�P�8��<�m�]4�3#:��Z��[+���	��a��h��a���^�_�,�{��(v;~0�SYF~�]�e�V����[�b>�V:��j��T��&�4n���2��S���<��R���5Q�������r��;d~�������h�i�:i	�?�-f�����B�*6��,W�"�:
"�`��������&`��H�uk�1C��O�q�%`.l�3�>�[v��v@m�ABIF
B����m������yd��^������x�'�F�{�q��#�g^�"�6q6>�x8�z��;Zb�&����cF��7�ZU��q���?��><#���#���a�_����=���1��]�+"#pp���v�)|�@7t�d�h�|����cs7 t�\��vD=�+
�c
�{�A�O��n�A�N��Os����B�CU����xi0�mn������{G���bz�!p�A���B������7����^<REs�y�k#S���V.d��-o,#��qA&�S�])<����4j�`�(\X���T�������@IDATkWq|or���2����~�`�XV(z���$|^�PJ�E^V����J�#�w
�����������x��$S+�gY�e_Lu��,���-����d~���l����-���L��W����0��?#S��'��]/	Z:���������Q�<�`�1��0��oA���,��_4aK\2�P�<�&���V�l��}-0O����,kw[��cSuK!.�j�E��0��(
T��t1�E�M�Mc�pk:>����3#LQt��g�����)�;���*+s/_���b�8�w����TR��1C���E���2f�J���A��U���G/K2�����
U	��]�O�x�R	�[�,�c9�.����;����P��LA���9�o"����
���u���y�Mg�+J�MAF��������}m��W`t��P�� ��I��\�(�����+���AR
�v%���|������8H����V`�'�� p$M+h,���m�H���B����
F��4RkU������u�M�#t������r��|LhiF����61�b9#d��>���1M�T* <$��:$��4~��W~�����xYo,�x��$/W����%��x/����:Y�����e����W��F��U��[�D�;��>��L����~�dE2VI+iKeQ��g�"�"�?���xt����/?%��^�����?��r�17��;�k)x^����t�$�� ���f��k�N�?7�
����+�����������V��rS�m�w��:�>
���L����g��$�v�e�6T����UJ����u�������i"L�%�5D�/��2p#������Jp�(�S�������zi��)zd�B�2��zS��$-�rR��?���������#�����,���2V+��*.����������t}�,���'5|������al�5���2��R���Oi���W�����1����`ZO��"\\A�	"S�.3��w�N3�2WE}�R�?�t�����'j��^��`fY�On�K��J���Cp.�|�QH�&���N7��2*g}oj�d�~cD��km��O�lx7��u�N@��?�_�oBB���B<���>R�����;�8�Hf�?<�7�B�cJ,�C�YF�2�x�V@M���Q�2����O��Sc��aDA�h��R�8���x�}}]1�X�e���<I��]�����Qw�&�'u^���i^U8/�>-��Q���4��&mZc�s1��?�$z^�2�

UB���p�]��>�4xE�.��+�x�@����u�`vC~���BI�,m���������]
�T���<�V5Y���]mk�@*��v����y��s,N� �9[�b
��������hhQ�9����������.FG��{L_���<r��c��e��)=.�yUNAiM�����|�wwn����V�TT��YT���;�5�.���-��l���#S"Hy���7��<�ck�������	j�����;5����}�����]���0�� ���uG��^�����k�ucVM��0����[���I����4V�lD&��n7��U���B/[	c#���Q�tkcF:E�����O�����F����|��^�N@����f�:������b�7���������~�:������
��������x��Y�����,�1R����<-�!�+��=K:����5��lA���do��`�L�d$���UP�w������������?",�p��[s�����H��1�5����iAIm�����_��N;aa�p��<�Uzcz`��	h��
ic�7sB���1�������X�0^��������[wT�����B����k���h0��E���g�>1(��(F��1����p�����������L�����xR<��1�[��xv;9�����0�����n�"'*�����}���gS��Lv�G6������H�9���a��,>��t�u����p�������v����$�9DcSp���CA�i���&s���������,n/~^����s�e

I�-1|F�ud2�	��[)�K��=��������0�'ps�t�_��5�?i2�}�����ljs�?U��B�.]0�1��	^�PM�S�"o����O�@b^C`Bj����N]������r0����N�Ho�.�~AhV1�,�����/���h]�
�Q���@d`���?�Z�������������0~NF��i\�v��E.��z	:��#�D��b�&3Do��>�#��o�.@�e����@
o1l��e#o��X�6�5�0��i|�1�W����a{��}o�w�������p��!QX��=MP�e�&�x�����]�_=l���Z��2�,N+!��4{�
�F��[�Np����`kDEE���-p���bi���:O�����h���p�b]�%NeY����m����h���'��ZM��t
'z�4�/Qx	�����=������(��eaN��n�n#z���=��~�f�^Y`nv	�����A��[K�~�?:�������g�b9������j�����<q�����zx)�����T�5����G��m�E�iz-�������������]�;i����[��c�jh$���	������cOD|�-�����������]�������A�
�����Y.�4��{��cC��_'tbfB�R��%W�.�������	�Kj4���}&avSz�������{��v���u���ze�X�Ti9Y�s��j]1s� x����F^�6�-�?X����#d����@g���x�o[�!�����su8e���+��mz?J�<)�6����9�18��%���$���A;T�7���9h��\x�GxG���fx��I�������_�y�f��^nhW�2���9����$��0
[�� "�����(����.5�)G%���B�z/����[���GW%�������cW��a���[q��9l�o�~��E+{m�6�����]K�����P��s��2�D��=5O?.�N"h�B��j��^�u,k��G+tm2��5ye
x7�����Fr����v��Rm_5��1�e�i�����{
Ds�-��)l�|��2���l[�&�?�&�3�����oR�������;�R�`�m|�\y�S1�q��f�����b'���L<R|������2�v�Y(�m
���0���pc=��h x��3��p��5�?��'#�%�}lP�����zy�3eg��'��dF{U������Z�c5��"
�}������|Tk;n=�b�'=~l�������[.�b_�-j���*�-�z�����7.�9TN}�au�!��.���B8��YU�K�����<��6Gk�?��V���q:6��@�QnY������y� �b����6�J��ik�P�����S��SGL�*�����P$�X��� ����Q����OF���hB��]�i�����9�k�����7��:���|LG�4�%�]d��M������1�e��*6�;�����-�������0M����\[6����Y�jU�p���MAwW47����H�Z���&����p(�����FU���c���>�G�lF�F����3�����G���C�Uw��������B�G��
�<Y	0��_q��#������0'�>�4>
uw������(�wm���U��lF��F,�F�,O(�9�^��h9k����F��B���"�����r��f���T�U��.];aFk��q�ix'�=^T�p91m:���)hrjr���k����<�k[�!Qb(�?�������N�W%n����<:T��.&1;��p7D��("�������3pu��*����T��������j�(��b�����|�.G�QU+X�[Ot�a�`��64�hR��T�q���y:��Q~�"nu��A�6���2N��D��X��F�p�%j�(d[���G�����>��e�1o���q����p��Za�Y$��C�L7���?�*�K4N��|�f����
,Hu�4��;Bq���p�w����U��5��� �N��h4>^�c�G�K����r������R8�Z� �.��<]�x��f��6���&,
�~!!�p�����p"�ZQ�XZ;����1��=Z�w��6���S��}�<�e%���y8�i�CU�qk�G�hr�~����P�������|�[�i�m��[N�h(uZf ��	�z_A���p����P�z�%�Nz�7D?��}��c�����/�_�^\
��v�uN�A������k?�%V��5�9	�����*	W�������p�C$���sq$��{�7l��Sfa$�u����������_�������uv����o�^KE'[;��7sqM�M�HY�`��b��������C�x�$L��7'Z�d^��}^I��T��v���<fF_�n[���O��F����N�%��E�����_��lr>�>��Z{�H%��Z"3���>���:4�f���'��a�Kh,�	��,��^�]�����7z
��dn��3�7��pb�Qx�� ��,V���e��|+��v�x8�O��JJ����`��GZ����C�.a�K~�������c:���r���r���
����xQ=�U?�K��IG`e�=�?�7��l�����d��Y�1��~;Nt��{c�x���&��}0x=�Y�~F��y��G:�,�xO��x��F|�{����_����3u���(4����[������8��?��
�T���_�������Ud^���e
���k�vA`��-�n]�����_��"T��x�>����f���w0�wL7��B���|�R[��m����m(iS�#q��� �xE�h
��F����nL6�H��8�Gl�Q�m����c-8�Z�}�L����o��m�*��{�M@l�&��9*��V�Q���4����;�U�n�0��v2L�Gd>3������3�L�%vD�f�S�7�?�"h$#�\+�G�����ccb-$���:�������r}[Et#���CIA��[�&^,������Yx����� ��:�YL��z�G���:%�J�@�(
���Wqx�1Me9EyO�5��9�Sb�s����Q�����@P��O�3��W�H�FxT b:M�����.1p����l*��x.���km�;�b�j_��G����7�|��������aY_	F��KX���t�8�	^��m�p�,��M�-�o<���h����j������q�h�q��kA�8��i�a+�^��k��yRu(�}�`��x��yT��;�!&a?VO���'�1���������vG�2Up�?n��!�(
����0^LRHO`�3[-w�����gw�S�0w(���2�+��?�
���e:j��-@1�I�=p~���
u�y_Li>,���B�Y� ���k�z�=���>��Ps�Y
�%���u4(��OE�
59��3b�K����z,���Ac3�q�P�|QP���5�px3T��R�C�[8|�r �:��Z�Y4qw(����{`muk�D��A[#��)p��������n���6������Tp?���ED+
���2��w���WMR(�sq8�+GLE��N���J#�2��x=o8��{M'8i}7,D��+�rR��o�[���N\��t�I���?����6.��n�]QGXNR����pd����^��[��9Y������a��,/�/|�O����<�\B��N��`�tO���!�y���p�v���q�>��K7�e!Vx�$���s��Y���+X�6�uP�HRX�p�R��y4���2���S�	�p���Akzx�1G;z�H�����3����>2V�a����=cyA����/c���`���W}������=d��6�0O�1�gvQM��v��\�h������~���?F����1TF�/�v����1#�����a������1.��c���s���m[�k
�GN0�I�\�F��������gy��������`��j�`%&���$�^����I��[�@iA�JN"���D�'A�6'Y���������ZR)����|�;.�X"��
u����n:�l:�3������=�Q��1[~�k�����m�myL�T�^��>E�cr��38�U����x|�r&)���W7vl��"'�p\���N��C�w���vC#��avi!�X��?5�;�7�O6�����F0$=�^v�w�(���4g�B�:
a�q�����^��6����������c1Z&,������V����\��#���Q��o
�����<����g'��S�J��JF����5�&�
��{����	?���+�eZ��F�q�1�z>��E����S��R�{n8
���_�������������7�Q[H@*��NA����������[�z+O��8��"��Qx����_~�7C�6�T���^�o�8��6w�<0
R@^^�
�I=1��Jy����	bh<���lL����1��4��mq1ic�qCc�)�a=��s�G\���W���O=w�����|��!������3��\��G#��-8�+U���@}*���*���G��aq"�g<���=��/�i��=&o�D��\+6B-Y��������!p?�e�"�p�tv�?�B9���o��
j�SN�p�bY�-��98:
�A�0�����0�q4����J��F����g�����D�n������������n4�	7z���N�[���p(cRn5����K/����E����#}"�TF2����0��?�<����.��-v��cE�����z���l�`]�7�s��$���>�������h��L�5�i�)(@fd0N����Zx�w[m�/l �mI�Og����:������$��T^��u,�O�kQ)l�Fu3[�)L�����8@dQX�������<
5=�����z_�3�q�O��	w�j4f��t��z?����N�@vAu��'p�#��q�O���Z�6y�H
���aH�t�>��"��Bv����:�4����G�4��������8�y���P�e��uk�������IUjcxf#nx-A8�?�Vkn�S��ph����B���//�����;�;�*3���������$RM[��VM��lh]x��(	Y���?���&}��:��fk1��6f%��(��<�[������W~D |��f;���,�A�>/\[�	qm���E��!�����9UG-�"����G�v���G�9"g�:W�q�xP���n�u����-���44Gow����((�U�[��60\��
��]����<�<Jpi�S����h����}[��A���is4>>���������_�jAu;�1T��?����#8_�������[���{��d"� 
�c�+��3S-�Q���������{h���8MpU��Z���X�!����5g��W���z	U�p�avb2z-p�,7+X��SO�D��SX;?M�n��
]��J�/�B�����fq��t
q��z���4�'����/q��&��������t����[S�)��v�QrW��[c��Y7TM���4pmq��F��In%^�u
�2'�1u"OJ���)���>�[]���?��EV|0���&�r?$��2�����~rvU��!��U�5e@v&R�^��m�Q��>���N�#�"V�%8 �O�84��������H�F����FyaV�G=��kE�:QZI=��
�W��2�-���f=�����yOa�y}@=���������������Uk�����N�1����=�
l;������cFO���m����8\9��������r������4����n��y����3u����T���l��7��qF1����O�Q��m�����	�0�/
A���~5z�
 dG�"��E�Z�E����-�z*i�G;���Cs�y�b�#Q_���
�������J�
a��.~d�E����9�!<�g(�g������?v�gU�r�v�0�G�h�'����g"�a9�eQ�yDa�"3q���3F9u@����3�����\�sCAd���`��UK�d���6��A�uj6�m��nU	@������A�����GX~�=����Vq$~��>��Z�p3�H�Y��9��h6�cQ�X"�w�
�������b:7VO��k��
��k=��Icru�A8��pq��(�l����i��4���?�^�����b8{����n�{{�
iBc	�H���`FW��ye��&+�q��N��I�`���q2�W�?�?�& ���I	�l�V�G�l�k:���8�	�k�d�Z���:97r��J��!��M6"wym�bpB�F�	P/6+���z0NB�ug�I��#��"r�nn���M���������*.z���I;t����[�#���5H�A�������g�a��4~�%�R��M�����8�����-��U�(HMD�����S�@g���q�+�n�q����~��G6OV�E�u:'��|Z��^�w�-N>���{��EL�
�\A\\<|-����P����A��ga(��[��h$���8�A��6����.�D���}��X{�+����Q���<����]0�CM��:/M"���O���P��r0��G�f���G�Df�0KL ��h\���#SBq9&^)�8?q>������	B���L����~C��m��p
��w���y��!�y��U���� �*�f�w��������x�zp4���
��_�5=���t2p����G��������@�jDz�6������(@�m����0=I%�
5�����
>*F���A�0n�I(-.R�<��O g�Q���:�U��U�Ra���=���<�~N��+����{E�h�zp?�d�+>�E]�TC����������(���,9J�t3$�p���crg���)L�
�x�����������iQ��.���7V�4C��R���V�^��NJ+�������B��O��R���W�(U\��L�<��v/~J=K�>��yH�8�/?A�-k��b��m���
�����s*u�#��r�G>Q���F	%Zb�
>��z��)�T�?���h������6?���}S}N�����zQq��0i�:�~0���_�?�1�����Z���T��UO��(�Da�:���S���j4����	`R�^�:mr��������p���mj;S���VN;�[i)�����k���
�PSN�����+fZ�r������o�*���_��;����n���w@��|���Q�����Y�������
��1�"3���#�PLT��)o�����Z��x�v�U���To8D�Ik��pT-��&>��J��+4n�zm)Pg5����F?�����������'�OW�f�P'3�I��}�P�S�R"��2\�������A����1g�2�����.�o�'W]-���R��Pc��w���]�����}��v�t2�6��*�yP��z��C:�"��P��?_<���������O�_GOQ=lW��B�����*r��}J�����������5�Q^9�*[e������f�ja�z}���:�u/�wV�bQ�����Y�����z��5|�^������&�$\�`�Z�����e��|g�(�9�WsW�P!WF��lw��:DL��m*�����)�4%UJ����cK�����M�Ug��7C�i�d�z�L��}^��UM -�<��z��$yb����(#QK�HywT�XG��j����[�o���<J4�����C������qz���~Oy����Jy=�
��7��a�zb�>�X������2y�[�����
~�`����|�?���|RMR*I���������/��+B2���t�u��G)�6�K%�*G�Lt���F���.����_�8�kD��^Q'&
^/��O\1��Pu��y�e�����j~(e�d��T^ ��	5�qe��,S?�q����,��."�FLW�����Bf	&r��n�����-M��U?4��$-�����\������7��ja\��(�9��x�!�����|��
�Q��J����k��������.s�{g�}��$�4%w�|�������1;��8�	�Zg?Sg^��0�C��1��l���"S��U����K��?�]?>�>%h�g�:��������0&i�<���a�4��'�U�Y.�r9��yS����������MR01B��
�/���h}-�����:���j$��6W������x��9�������{����-�������y:c�:������j&�%���,����t�0�yR}��y������Qj3�|x����6:�b��[��AR��5*I��� _�~�@}�m���a��<E:���t�L�F�s�;�����'�2V&��w��9���-��1���+g����t������VQ/{���~�rw�&\*Uy��j�6���)k�!~�r�����@�I�P��x7~"�Z�R��m��K�7�Ik�U�O�����\�����S��9���I�	���.,Ug_c���R�`���Y!!�g���-�}�v���t-���Qf��V�K�.��9^�c���P�A
�qQ-�zZ������N��r�i*a1��-Ijm�%��n�K�k�����L�]���_��1�����\��Mi�����O�E�ZP�94�R&�G���h���s��8� �Z��TG��r����u�R/��D��O�9J�k��v@]/�j����xuY���e�(�
U�j1��MjS%�p~��wc����N���0���s������4BE���i��2Y����<���������@��:��yG�7��Az]�Y��J�^�R�I�
f��%j�`��[@����;�*���Z3~�j7g���Ac��?��3�P�^R[�����	o����sI���IP�����\.�6�SG�^�<g����47[]��f��<��-��K{�Uon#tS��KS��C���	j1��a��7,/�A�Eo�Ah���s�|qVr�uh&e����\~>�-���XO^��6_-�~QQ����1.[����S�)�]g��j"e�P�$2@���S���[=d���v.����#��#�����E�h�����S����|S��b��W�*%��
��Y�O��?���iJ[j��9�����h�;��Dk�����	�)�E�*.1����l���:�VRu��O}z0�
�UL���b�z��C�:�E��s/;��;�U�~���/����t��,�������[���a5y�j����F(�T�7>�>�������&;�(���G��..WaKS���f���S*���
5jG�zk��Z��v�*�-f}A��G��PS~���J)5�w�>m<B��+*"QZ�*,��6L@=.t����2c�:�u��SYKrP��$��P�z{je<G.Q�S.g�m**$w���=3W
\�S	m�V*�������v&Q}�����	/�,Wz�K���SW(��bU�xP����N|�����c���}M����M������*���Z���k�e��E�5Y��}�Z3���u��U|!���/�9���W���b��P�����
&���=s��E�2T��_5�@s4QO��W^:��k�?M^��:=I�PO�q�rk�@m���~�L�M@�� ��Xw�
������F�R������%��.,N�y�{jZ�%j��k�m��J|_�o�N�����?R�[����m��Kr�[S��������o���G����_9��3��cR���j����o��w����
����c�_����(/
O���F�~=�^?�V���������'�>Sk^}B�]�R�`L>W�1>��w���"�|y3��d����Cj��#j����:�
�|�5_�;&���Zj<���d�j'�n���@
��X��]������U�[En���H�������.�Xi��M*��y�e�xJ�������O���pN-���V����k��Q�V��}�f�MG��R��R�����D���x&�[��1m�Q_TQ����/���i��|R�o�+��{H��!b\�h
6����,j�0n������j��}����YYY*==]edd�-�+//O��I� h�9>��=Y����������]�ps��4�������(���:5���%<������3�`=w:V�,�x��?�����f��J�.06gq����S7���	������9�`S>��h��
����u��]�2�WM\�Cj�1r���7D'A��W��b�'`pOG<���](��L��7a��_bc�bz��}�}v������C�B7��5�{7l_	w��Q�o/������6h����~p��
&E�#9�;���\��8��xa�P�6�QV�[����4�<�Q@w������"wW��zV��Omg�)�kh��{�x�!����e@�����~�|��;�%^���mq�d���e�*�XI>�	=��aW�����%����"r�Cd"��XL�q�`0�e6���A���v
s�O��bm7����O�A�7:�'}�S?�z�=7cy����k�{3s��������W~���&�+�I��N���#���@�h!���Q<>�0�W���Mx4�x����w��+���=��K��	]
��C�^���r�Lf�n;�WcL��wK�m��Q�����xaV7mlH��b���YP�{�H�p�U��pKa�P�����Q�E-|�1^z��x4zw2�yH?E������v%#��
�f~�Y�Iyq|�5�.����L8�0.�"e�|�D+�����-:��SfD!$%'RH
#	�S��<+s�-3k�P�2J�����y<�X����>���%�����x��g����0a9����_��+L�x�+�q����$��^��e�L��e;C6J�jj��}�AY.w�{=^z
G�&AqH����z�t���U���1�7$��4��������y9�G$sOEb�U�\O^��}i�H����Wj�X���+�]����$��u���yH����
n�a.����t)fL���[�g�w�F�G��6���X^<#To��0��=:����5/�M�A��p7zR�3C�������q��<��Y��"�G�k����y9i@�k9(X�w'
���F^nU5������X�C������|i$zk������"L�8�S�E�yGP����4>�����'���*��������w�����Y�3�Hp�pV@)�OV���Z���j���?J�z3i�����:�s<�]�����2<���Tn�.��O��7j�^l��D�V�<�h|���C���a���#�\�[S�u"w���X���$Jp��6�l
Wqorr@v�b$���r�r	�$��,���>����6V%J��M�v���W���k���1���}z�U������t3�V�;��H^��"��1[�!�:��hd�2Xw�B�I!�����Op�y�L���y���1�����fNa!
��;��=�	3�������T&��Y�Vl}+�W;����m��CQ�MM��|��A��_���i�l��gF�,�r�/��Bd����{`�^����*s1�s{��1V�(��qz��|O����IO�q.��2�c��ez��������"
qI�y*-��+U��_^�7S]P��-25]�s���W��NGJ�y�����Qc��cjbR�r�����������7zJJ�\�����<E'S��17G�u�bFMw`{�+Rx7�Zu�q�KO`U�4�|-�/�������FB/��U�g�p/��TAv��Q��4B��<�kg�����MW����xi��V�@�������q�/�uD�����Ei�/x?�){�\Q�!}d���;B��������;y�����I!��p��Lpe���\��e2�
��<�
�"�����S�%�D�kq�'�	Q8������n�v&��V�[[<���>�Q���w�^�"3�-��M��J�
���d4Mj��>�V����c�}���j�a���|�l�Q����.��9z �R�1����P��������OcG}��h�[��SO�@}�rK�K<E�0�2.��`^#z2���I�&|U�g�"�������oW��O��M������\�o#��8��2c���}����c�)��,��f��������g��s���[���%�3fj����?ye�dg��LZ��O��o���{�_e���_''=@
)�T:��D�����
��b{+
��(**b�#�wDz�z���@*	�}�k�>�$����������Y�9����wggfggggg�����x����n�<�>�	�������>���'�C�������-�%:F4�Jc��h�1�7j�`+k��`o�3��&
Occ�"�����[3����w�]����v�#���-�0��>�����u����Jh����V���2��x���v��8d���wa��(8h���II,V�Y���m�JO����V��.d$w)p'<JW����vC��<�������+��"-����L��($�;��C;t����l��@�~��U;q��F2([�2�dn��t>;@y����[��^���#1��tl>~	i�E�d��~�����o�9\�z1;W!��O���|'��c�!��n^H9z���<�'<��bv�����^�!���%���LfWN��Q��iL|����)F�V��O-<�(
)'����!=Y��cB�1x��S|t�W���i�a����7�:����[Z�q�;���? ���0��g&'a���W���<�P���\�@.�B����S��=��W���~s_�y�%.r,�#P�8�x�c+�	�3�D��"�)���JiM��-nx���h�3�������q��u��h���i@��Xq��#��W������y�y��������{0��t�u$<5
�������%I����/���k�&���R�&����l'3T�$=��nV9�����������)��}���������\����%qo����:_b��}�����������H�o������
1��F���R�O�����A�~�
��-X��o���q��8q?��O���{�y.���K9p������#��p��TX_:K^w����!%���4>�rJQ{�@Z�:�Oh��/a��B�q?�)�R��]���� �����#��S�K��x��[�6f��	���i�M,���]�
S=?m]���� $�3�|�8�NzSZ%�V]n���O��R�$6����4^���.�&B��'�o�����	�.5�>�(^p�a������:��tt��O�����>�����J��_�%n�k����Z+�M`^���.
Q��%� �[!<��������X2�J?�`B�"�9���qm������l��8��R8Q�������u�=���3`��K���G�db��*�������b��9�Wqq�l�y0
#B�>���6J 4�:,�<�C��v���"�_������[]���0c��iO�%���>*��T_��`<o;Q����S��j{�p;��rD��\:�+b(�����d&E�L�����������]����CTz`|m��-UJf��f�V`N�:fcK�^A����<Ue���P���^Z&����m�@�S�1�SqfB�F���2��#x��S����,Tp4�2B��?�����n�_2�;?t�
����������h���&IB)XlP��,�3���U����n=�<!�(R"��U��BY��h������N�����'Ar�di�.�V*n����
���)�� ��Oc�_t(S&��Ht��6�s��EQ�	�tF���'��YG�m�e$\���}�=j���s�y��ue�*������Mx���'q:��.>=[�%�-e��y��o��Y�9������$
�y.�7b��m��t�Q��Iy�nu}K@��������U����&�Jp!�m$?C�29���j�����R�5�-�*&Q�3
;�ALe�"B�w36�A�o���81�+����g�aO�8i,�H�z\<�u�<��G��fl��.�^7����=x�����z��s����>�����G�p[$#�gF��������d�=��+�aYVU����7���1�{4��I�R����ca��m���$����E1��O����o}@�#q�\6~+�I�9��Z�M�.�l�����*��}_���e��@IDAT��3x���c�n��1.��2�����;����%\�m���9(29�)�"��n���h4�-B��NbP�z�^1�����&����z��"9a�'���gH�5_�]��G�#�Ei�lm����h�f�5!W��u_�l"���yY����h
 ���\�v+�v;��������$�Eo�-z���[g(���� �1nM��g'�v1fxK��y�����Dr�8e����������,�&�v���� ����1������7.r�v!���s��{��^�����O�j<������6�6���?<��U��n�/������5l���\���+�6v�3�l"������������a��v�kl_5��|v��m�w����3�h��=�?0�EpQ
2�b'b��z������<G��H$�^DNNfH�R�P4����Z���u�N�`/�$a*����)g�����4�
|	n��Bq,����a'�������_�g������.��>m{�@� ����ZW��e�g��Ai����H��M�Odt��BtT<N^��g�)3i}5�1$p�%,8��29��xO��<��N�h����e���?�ukn]��a$�l��.D�4���#���V\�7$<
�]n"Jbe�������������p���f"6��Ij��a�x���8�]�T�:Kn;�(n�8����P�_���_����[�%:�����W1�3&�t�8uQ�	����!1�F�K�����	6��7@(j9�����*��SY{4u�Y(%`��QMU�R�r�p�;p�s ��$�*r��C���7��\�;�M�����*��y��s���p��uf9|.���G���P�������!QZ�$���|�H��F�("o�D?6R�0s���SG�/�O�2z�E�Jqm�M�yb��
��[c=����d9�G�}vV�L�i�q)��.UXT������-�t(�@���
����zS3<��������U������y�8j���C��f���D��^������y�\:��;2�"������41���$�����c���o�M-jX�T��6����WH0s�� t��}����{7�BA�e.g����D�_��!�_>zq����vn���3���.i�H�SR6�qA�B���t�;����~i*:G��=���@�����KW4�U��1��q��.��]Z���[��d�����'�xL��'�����%sB9X�.pZhmf�'I��m��C��}�K�)��
�[�O�����2�nh.����_��	��`5�	>Am���&N�Gpl�;V��������-�F�T��IF|"C����@S�) �+f�2���l�	����6�h���";�b��L\,���;�����j�x4���9C�������o�'���%�)��"��V3�Y��a����,��=�aGA*-e	y4<[�-����A�$~���(�)�u2�T��@:c�KN3���$�����M�vy��>���k��*���6��~���
�����:H��#.�'���xT\[�����	#yO;����dS	�1��\�_z#2��"#'o�\����6%� ���n��x�Vl�4:�~�/�u���^hJ>q�7&�[�K��[w�!cu9��V�JB������w�i]������D\e����'��K��kq�~8����^�����h��'��%.l'�����	U#q���&C�r9��@����
N������p���+�&�����~�_v/������
6��c�ga�s!�^fh��5/{���03y9��a����<��3�<r���M�)��aO����R��q�',���b.�u_�����1A|��:���i_�u=��^�-�f��H�X����:���/�<4
j�Y��ppls|��������$���K����\6k��|�/��ha�u�D��h�����~n�����8��,�wD��w��,]k9�]�����!�<�x �/���d@aS��D��aN^�\<yX�3W�%hyU��|�L��a�������{0V�a��"*��T1��p0�dt}x���d�%�J���w��-���q��B�?M�J�K%OpV!2�(�i��Ic
/��U����q��`��R5~�(R���P�rQ������v�y(M��+[�M�L-g�:�
=��C-m>�g�����A"�3)���F=G=UD�R��t���C�I�Y�,/$�g�}Z��(ar�b���8>��l��#�����xSI�����,\+#BB]Q������?196�?�_e`Y'��!V�
�q���`z!��P�v�R��-��+���*���I�&p�s�|��M�k�I�R����'B�x�/���������x�zYQ�)���Kr,�^/EWkcMT�L���Bo�A���m��{������;p����V5��1>v�	����A����&�?:pY~��.�����'VE��V#c��&�l�i�c�����
��'No��R����+�_k�GZ��g��Yya���
�-�HcZ������^n�.�@<�jR�{�A� ��K��#��o`��^6�IQ,�1�<���Gy��Uh�OZ_����hN��()����Bym�4�r�����/R�p_rs�w���e6���+;O��L�ENL{4�?z0��h��-�4X��Qrj�/���_:�����AD�������1O��Z��8{)����,Q�s�e�o/{��M��Q�e)��+�_��
O+��y�Z�~�D#/�E�S6�,J{G�:���.�7�S)O�s�	o�
�@F��$�2%5Q��.nb��_�.L�_��1�W
��n�v�O�x����p]~�����L���~|�bn~j�����x!���1"w_�N���^r��gy�mK��������E��%y�D��z�G�����r�cR>�/.�S*0�6��J:yR!i8x�+rv��^�	����'�#���nTb���.����&��q2b�r1�)�����gAd���������p>�5&�
Dw� �#C
�7�'���`F;��.N��3�����\����EO�"z�&S�:�C�I�`K;u�a�B-N�k6�N��A:��	�Ni�OR��Icct�{�"C�#\H�>��<�~��F�Y���;���+1�x���y_������~I�D��5�v�p����&c����C�������/��8��)�ZK��W��M>.@2�Lh��k&������1i�=^���{����A����a������?�/K�E��A%�.�Y�^�����.�)�K�k��[�x-2���&�7n���y))j/���i`�(�������Iu�I��J��������N����6j��O�J��DjUei�Cmx��s�w���q��3z�i���oZ=Y���xu_�V@}Yl�)Xl�O]���3E���*6��!���nki�e�4���*E����a�����2-���]����Un��������/e�S
�'��Ud����Xpg'�<K��B�Ja��g�KR����$c�n����p:)	�8Ol�B������v�!WY��������t=Vg�P�M���	��r��/xB��q%��"����|�,�[2��eP�z��x����7���G�����������=8���q��]��YL#x�&����
�M���Y'LV�*E�
7M4���C�t�Wkp�^�.�-&U]���(������5��2�pb@��so�z�|�@��Z��=��A<T����x��(+K@pL�9|���|�TN����hy�!\���f`r�,���4�C�2%#7�/pgJ�q����Y�X���/qW\F
�S�%M����qF1'f42�H/E�:&���r��L�+�b���uZ�f����Q�V�����s����c���� .��7�wAX�����U����2�e:$88�L��S�18��Z� ��l'�p���������������/�`b�'X��/�C^��D��K��\���:���?~>��?�����:~�Lm�	����_���DS�:X����aq����p �i���j%�\��8\����&{X���#�a���k��; WYjm�J{n��2��������t�"�{����*�	|Z�����"^��@���pH�B����Sb�F'������������Ese��C�w��-���f�����^���"\<xu��� ��k�����8wD�����!<��/��9O��Zd�.PZ�%��d������3<`��O-�a@�� )chz6hf9����9����`t	��;���I�S���F{Xq�/u��8�Q�vy�h��g4l��N�.��7$}�M`	�>
��Da6aT�0�����`Y����F�C�b�������X�N�iBK�W%����})cx��(�r:�L���~��]1=��H��i��=�����au�99F�N�v��k��+�����%����a�k�B9�-�3ze�F��������3�B�Q����8�����9T&�FT,�R������e�6(f�M�7�W4�����2�3���P����`j{?O����,�x��B,8B;���}�P�e5�	��F�>K�l�,�Te������l�R2�;y��"�l���#����`!��� >�w=��v
(?Y��xs���B[z ��\x5;xcx}���-�.Ex��[@AE84>����� �#��.�tyf�i��>��v�lk�5��{���QJ��];��X����0�g�1	���_"��	�������)i�-�@������xaL����b���C�Ax���i/+�7z|��k`���7')����@��VF������4��
o.MxO�M�Ml���K�	�|����'�_^�������|��{KF���F/E2q�,.�:OI�X��w��Hy�$6���xX�b��N���EOC1n[&
��M�I�2tZk`�E�6`�����r�y$B��0i��+����5�[�&��������oBg���pW�a��+0w����������o�����7�g���2\����|�H[��h��*NN�LI�)��L���<��.y2�����p��E���.�6�e������_���"B�|�'�	����qE59�gc�P�G�������,s���"t`VGn��I���@�[�x=t�G���L'g!��m^m��-�u���#,��N/��qH�1WO��9&�#�����O��xn	{
���>$
h�.�>������������A�E���4d�N�Hf�i�O��-t!Tz���D8J�����,�C7R���$/e�L�$�{6\^YN&'0�����/��Z�&��Z�����'�dF�X���p�e���.��o�E�Y�c���T��[��G���^�)�8-c�lQ.4 b;X�l�����d�S-�u�q�����X{�����r�v���Jk�$/�n��|�?��P[����`��"��a�`��~	��N�t��VI��+�����^������8K��s8���L"�p�Ut��T�����\i���8yO����4��x���!S �[��ix�,�mX��=���U����Mk�{c���g��Z��o���R~L�������v���������?��i/��>���W�eG��K�*-�5�|_�)�X��������-�v�[�.����@�y/��G�8"��N$"�P�v�y�u��N�'�l-��U�e���}=n��.���k�A��S��+u
NI�~�3F��D�PU�t�bel�4��I:_*��������g����<���=�U\���P���\`�3���m����
������>t������B�������,�~-�	�h��q��3�n{��=>��gS��A��$}���7?1d�q_�~s�M�!���D����J.e����aD�S/p��}<zO��~�1���eL}a��w��7;�c3�_��p&&�x��!�v��|s7�D���N���j����E�����R�X>��V����B�J`n���S��qZ�k
kl�
����;��rU���k�mC��B���P��^�P��Z	R�G6C���<��\,r���(��.�Vz��o�K�s�P�f�T�^y��b��U���y���rO[/���!����������@�j��l��.yv�8��Ta�k��=]�\�����C�m��Qk}����b�����\���(��/^��g�F���h�%�������?��oyi�YL�b��f�x�ht����;�	a����1������@�!�X���!h��_��H��p�Dxp.�e��w=h\#��J���
}A�Q��#������L|�,�/}���=
�A�x(o�2��h?K�����#���^8}h8���-s�.�5��a;8t�%�t�>����<_���J�a����o	d������v�+^�|	���������0�]�-1�nS��0��U>�+F�,_P�k�\�;|Q'�a&&������\U���I�z|�Lg+�~���I>����j�������Skp�R�,��g��
�Eg������>��N���;�A�1x�����O��C@�Ina]�]��T*�C.`�1��Y�"f�p�kl��m�h?��.2�yE���.���7l�^��F��:'����`zy�l����M���+lS?�iM�O�����t���=�C�������r�S�5��0�[�f�W:��B��rn{������A�WM��
�7�1��eOh�<���0Z��)�!�\�q���k�U��t�l�7Y�l�~������4�����x��o�o�e�F�[�X��B��p!W��G?��v�'qWi���
���6�q��8\��U���a+&�hf��T�5t�r<��8c8DU��������+H������&@dYtkG���u�vV
d�M������`9����GP?��,�Y��'.�:�'p���������k���5����tPV������45pw�p�6�B�-�8�$
�/$I��"G����v�S���p����Kh�KOt:��C��uz
�B1V�_N^�����B1�B��s������\�/q������v&rs�	�P����*���[gd�}�U?�W{>&����qn(�����a.������o�������k�O�U��n�.��s8^��k'E����������%�O;G������S��7�����|����m"�"As��[e�S�uP�5�;��r���<Lr:���O��������:}-yJx����e��Hv@2s��������3��.'�:���ao����X�uSal���a/`�<��KV�R���9��>�(*��S�O3WW�C��N�
���6���9�G�q�����/���T�!���p d�>zQX��Ty���������G'���@��p�A�xJ�EY�E���b+���'�b>�[��*q���1K�8 s_K��m����[��/�pRpcn���=�����X�e�Ub������V�����O`���&��Mv2�
�_�����7WQ�;2��o�:+��~��_���a'��S��\����C��W�O��mb�������/s�Z+��a#y��yz��N�?������6�*
��,�[2�����n��[�	1�\d�?���:���r)���1���%��O,Ep��Fy�:J�����|�	�}�����m�8Gc�/��<j�����CMl�o��h�EjBw��i��x	�#�o�4L�
>���y|j��b�[���t�B?13Y��qa��m&��g^lm�A�k��}��p�L%X����%|��W1s�p��8�eH��!=�R8�k��3W�K�b����|q|e:�X������
f�bG�@�M9�����(�^��F�:/�22����E���C���w�9������'����������1d��"+&Q�'co�,���^2�����}&7N�Ikg������^�����{�QN�����1�;��������U�0��'�D��%���g�%�?
�����Jg"'bF��r�9�S��R#�5.�&��</)��~��8�������kz��u?4�e�t��te���ht&���S���-��Z(�	[1���X<7uh����E��D����,T�����)�Nz�"�����p�j,�H���?�	��T#��Z�C<c���p�bR�w��gva{\��b�Y�4�]^��
I�K;���]��)~�U�<�A� +�����>�W+���
��+���BY��QV�rbHM?�2Q�y�
",���s0��:z� h������S{�.��(Bl��
�����MD���Q�o�x��E���Qr6��;j���fze�h������pp�~��|�����,}�"��/d�����2��X.����#�f�j�o�,��L�b���Z�a%/'�n%�E-���SX�
s���K
�� v�vi�q�'�p}Yb�6^�]�Mplw���,�����-1@=�Q�����{p�8�&U%�O@�2�������������g��N�*������KoR���z3q�pf�M�C=�\h��'�U��)t?�nSP8����/3v#���U$��x^���O�S���������5���.���~,�$a�����P���8�Q�;�7M[��y�x�~ :��N��M����Z�H��,Q'�Q���&��2��}a:�AD�{�Z���i�>�_<��>�/H&cts1!�/���?����	Ru-����kG<���=
�c�������$�_Q�f^��Kd��I��iMli'�]�*��p���L�w��\nW�4	���a�K�y��HF^:�q�hbv���'���{UZN7�^������	�l��i�u�S�����z�>������_`��Bn�@N&�i_���]�����k��	]Z��"�go��_�P�N�������R��,��~�����^��@��p��lM5sa�D�{e����h�k�NfH���������k#r�
�*��l�[�[�����������#�e��r[Y�|B>w����F���t:��<��TTP1�G�<z����pZ=D
��u1��2ZC�S�.�0���-��2zW�>�I���AXt�$?�k�'E��KF������Y��^��5��}���u�b�����#h�Jl�:[>���Y(�d��:����	c���ofD~�������D�9�yrwM�-Dw���I����7���1��#2`���4�����]��w|�u3���}�uk����f�i=VnX��`���'�����9�.��"S��5C^��94�1Q����9�������%?^B��^��	i���O����g�1NKAR�$$$ ���3z�=T������ qt��P��)�D��?���#���mi�G}�fv�s;6]����iR8���S�xH��g� �9|�a����8��pt����g��9>p�
�P��w0j���o�K������p0����)8���?g�l��J��sXn�7O&���s���1�r�,���)82�{J4Wx���.�>�so����.����SH1s�o�Cz�,��3�@?���h���DBw$�������g������������Z����U���a�,S������OxP	�k7�9��V�&�@���v���>M�jU�u����v����"#���m���;��E(w&��7Y$���"�������+.�,���JD����EW�Ttk��Q��]��G��z��d�jk:��zh����W1�}���E8�U�����a,�������:45W�m���w���!2�����+W�0�Tw��`��<'�pc�K?�AMbB��X�f>�t@"C�X��������cXG#,B(gyQ������c%�H,{�b�n��O�F&Q��~�0|_��q3�s�
\*�!�����-��l��_9'o�	�P�����W0���c��Rh0f�4g�u���X6�0.�����L�4��
�9�=�)+e!@�>�j.��I�Z���H/���0�Q��q��:�x��5SN�e�`������j�s[�	q2��2��
���rB��`���U|�?������j��F����z*I�������s����t,>|�	\jX22�*���[7�e;OU�F�D��#������:fl��'n[��>,)qC��:���������XD���bfc�s�R����L�&�R_�#��dF���Zs���b�
�G��	��V��N�GO2���pE��9�!$b���}�m�o���u(f����=�C'=���0xS��x����Z�;l�c(��C�U{����[���A��L��}ZPT1�9I���"��,{9�'�s�*GD���Xt�n�5����^|�G�E"������[�#7p�h�~���5|��\E���|��i;p"�q��C�����U���;B[�Sb���<>9�r��-��������.2����v���:�c���6
�����+|��_���gS62s/a�g�'-�_m�X�lrD?����C��+��^W�qE��G����4>�MI>�iE�_Ah�Zxr�*,���+���u�G=N��F}�b����������f�q�F�N*�5�G ��:��'��"�1��$�3��S�*���C��u.��#q(����>��f����'1vR�-�f�����������T�=�/��T��FK=Z��f���O?������.�fwn����������jdlMC�x��LWq�����N6����C&[���������Rx��/ ��RIZ,���p5�%�����93��n������������~�y��v
��j�Xh�Tv.G�h���?����P��Z��Oz|�G��`O��t�GZ*`���;]����	����E�6b����3�L�(�~����Bl�l�g*A0�2j���/b���������
K�`_����s4p%���QH�8���A��-��-{~�e\��sf�Dco9��+�H^�bxAv*j�����#���M<�Z��������z����)���!X��aw��kHe�}�s*��p�w0�����e?��J?�p� ������8<��!$���|l�..��FW��(�z�17
����:�����(��c�Q�����j�mG�>O��o3'�����g��h�LD��QY��:�sq�a��p�t'.�R%q�c�Xj�e�
�&3B4G��M�|��OZ��V��	H�FZ�Xo+��V�l{�?CK(���U%��I_���kg��� L����^�+!����G��*���b�l��-�0�T�F���Z����"�|4hLC
W�iU7���`?��)B��Xe�2fr>�-O��]�r��b��wv��U�����z�WP��0�����BZ��Wr:�
���(]>��v���|��PLO�3<�$��-��sO4���7J�����|����@�v<�R����4+.���� �x�4)�YV��9��TRI2�O.��e$�*�(.�x�u2������}�3
kz�!���H��W���W9~���#;q��N=���pbv|�$�|�?���\p��($#_>"r�=7��f�]�# ��0��c�6���G��vV&�;(�WF����TzQ�a���o"�D�oc��s�nE���Z��[���� {�A������2�*^6X���s�u����k��B$��~���{��+��px������������5/
��#�����3��R��S!�B������SOF2����JcG<�)RN��y�axoRj��4n=��P��a�
��YS<�f#����M�`]�\�����l�_,�3����4�Y�b<j�
V���m�u����_!}�^��������G	d����!�t�A��}\��dIJ-�S�`�
�#?.��8R#���sg
ih������D#$������}+=G�G-����pn��#�r��5�%��|��7���	��6�@o*U���s���D�i��'�%�>�yq����pZ`�/1�b���)W.f�����������El��X@�7�K��gpd�Nx%�S�^G��s��7���[?����'��YZ�vF�r��u��4����R���O��U"N�!�I"��T��I[�_$�F�0|��H�n7LFA��(������w�>��>������
_}><����*|�2�������1O���2^[e���Z�/0g-Zu����3�!"���D���G�	5���������hW+�q�-�4��z��P8W��3]jS?��8�������Mx��u������}�����R�?�iC��5up7�-I��?	��Nxj�<����:�tY��D��g�;c��b-���tC�YB�Lv~IE�%|^��T�eg�En5�k��^�it�b�(w�������A(z��iM����9�Z[�-�t~)���
Zr5�7��~x��o��Z!(���mK$�n2���:����"���9H:}I\��R�K�a\$w��|?��E�0(����4�N�9�������xn/�W1?�x�&�)�:�o��%����Y$^�x��\g(����j����������������3Z>�;F
x[�rnz���Y@]���a�?���<��q22���\*C�����<���O���!����W���E/X����A��&�c�~w~	
�[���RA��������"����;����'Fu�'�4�������'\���_���6sa�}_|����2��U����s�����C���J��9fa#�_��\Xlr?V<�X�&3�2w�0�i|�����K�=�%_z/���GL���(��O�Nzd���s0�����x���f�ym��&}r�}��
&\��?��.z��tC���8��E�����-�q������{ ��7������������[���}~Oc�S�Gx6l�����3�.@�C��M�
/b�j�d��X�H�j�3�u��������;��|����qaU$N�
���/a���!���v?�����f166��s�8��8���>�n�a������c��(z�_��!>g5j��q=�B+�<2���PO�T{
Opw\�~-%1Lh)w+d0���"��;h���_�����BZ�r!�N�q����^�sG�\G�KK��@���R7����\����?z�}G�q��PWu�=%����C��������!M�=��^�0g�Q��R>��L�,b�����~%��������������~�U��F��v������'
.t�"����o��H�	a��1�����\���]�����lI�)�p�5����!�r������!�����
Z�8��3<��Y;u�w}RG��e������70~}7�y0�����tn��c_{Z��zm�f���n:�g�\�=
������+G>Y��������������`�>�CM�n����X��aLt��!��[���:u���O��qfK	6�[�>����L\�}K���sD�{�����|��#���F.���2�w���0���0��6`n�������Zc��������1�gc0�XL]�]��pUf�
�K�K��Z�i�8���9N�� ����>��`��w�12SNj��1jT}�����X����*�y�$#SqQ��\0F������c��*>KK����+���I!jt/�m`)����S�/�E���U��F���Ijz��#S�>�L������Du!r���e�,���-S��_�y�t��*%~����z�s��
�����W}�frAj��T��:_+���2�����c�����(�^����`IV`ry}J�}o�#e��4]�����>:�r����
�������Mk��^����}�z����:���+�NP�vLW�~���r=\x����X���i�2�a������k�z]�W�������*���d���?�U������9��a�F�m|�Z��V��G�����H���S1x��5������h���_jqD21�R'~���H���uJP��*��[��������}Twg^�:�;����t�J�W�
���X
I��Q�}�W�IQ�k��t��<R�.^W9�[4�9�S��P�zi}w�`�����]�jwi�P�����y���v�T�{���[�����VW�R��F����#_���}B����u�Z��Y�4��|=U�O��>x ��7t�/�_mR��^������W�����S�?�?7G����4��3�"Y����3�����K��
��{��M����7]Pk��8��C�����9>s�207xLua��..V�3Ty�_�;����UH�F�_�Vo��v��Z0^
�����*F�I�������jd�V
F)_��v���~����z��T���x�����+�'������q��j��_����Ss	K��J��f��^������g��������TaA�Z�X7������i}�@��sk�����K��_Bk-7������4��fu�FnZn�U_���.2+O��Vr�o�s������y�3�*�"��r�Ap__��vM���!}�V������t��I�IE�|M�X�V�&���������(���a��n�yCyf����z��6��$k����/��)��!F?���-����Y��>���tj�����Q���P�_����t�.u�o���?�M���'��u>^$Y�8b�
����l|S=D?��K�_A|��t�?�}�E�._-}�����������M��Du���Zu�RV0qI�������y�������D%�?��o���>]vP�1g�d�>�r�>P�vS-���+��U��w����P�~�I	�Y�Ky�����Q�����_X��>�h'����������J��Tu|�/j����o�f��Gj��Kl�Z��Z1�5xre���iM#3����>VoIY��M{��}����mcT�w~V������/)f���kk�tog�e��61�!��.��lH���W��
�y^^n�n����y{���j}�T�1�����I;�7����HSU�^Tj������W���Q�H���U��*�]C��y,����c��O�5l�7��E�T��//z�:��0���T�UO��`�~I*��2�ak)+����H��G���R��_�����<u"���rEE������[5��o��+�JDQI^�:�vO5.�h�-��(5��UJz���di_���
��c;�N����zn���{B��7N���D5n����]�=�.|�_�yu�:v^ ��Z���x�s�k�����
a?����c���&��]���Z��z/|�z{g��L��9XM|�3���
�?���	��7^�������/�]���^������UK����i��.R�"/K_M��^-a>G�XXa������jAt�GxB_�b�>����X�*.U'N�P�>��|z��v��P����;���S1����*���j�3m]�,e��&|���s���]S�?	�Q�l��E�df�CouT��u��C��p
X��j}Kp������m=��]~eps�=���|I�2$G�:��;5y�Gj�v��2���������Z���j����h��Z�.rF�}�z��c6|h�U�F�Q�n���~������!����(s��U{MT����}�T���Ik)��Hw
J�YUt�k5�9�������d�.fav+����T{�����j���U4���DLT��K��!�U���\j1o�Ijn�����CY��%�o���q���QvMtW�Gf�C�_�[vBk�9��uo�S�|�[}{���Z�V���<�������l���>S�{�S��m`�[�zQn-�}���CQ|�����O�SOl�/Cl�y����Z���������F.G����������:��[����XE��X�yz�:���eLn��u�7��RoN������?�8����Z9��;���v\�1��|]��������p�J�-AY��)j����[�h=��J��Qj����C&�_6��+uYZ2Q}=�]�s����'��1���g������Z���T���<N#N��/�W��X���=L�=f���b��v2�*�2yL�!���j��[�o;�'�j����PC=X�����via��tp��B��T�Z?�k�n������n_���C)�p��OO�5�? �IDATQ��F���$������l�$c�\]T�>z^�Q���Gh>l�Z�]4#�m_�V�4R��HTWR���O�Tl�2�����G�WO-^�Q�.;J����+�������	s[�7�F'T��_��<!�����R6vVmZ�S�2�����>"�e������{[����������7���Z����3j������~����r���a(&"��Op�Y-���b����{��^�����{���R��)��j�[���5$X��D��o������pV�&�QK���f���OQnR�Z�&����;$�3;f������cd�����R�W��x_
�`�:����������s�����vee+]u&�
*r���
�`]��?�Rkbu_�����j�������Q����������o�MVs��rK������lVpN�>@/�����^�<m��rC�B�:���jX�f��9Uk�B��k��k����
�e�xK7�k�L���	j����bCa`.m;���n�9��I�������zI�5j)"�K�4���^��j�k#U�o���xO���*~b�5�����n��|qDm8f)GP��^K���y4R�,�k���/���W�����dQ�UXtR�|a�z�2���o�0b��~8I2�b������������q�R[�:G��!F�
Wyi�;��yosa��5���j	��!�Y�����������=
���^_E�"���|OK=�J��ua����`���W�1�Z�X�5�����>2�W���������?)+77���1Q��$�dd��g��'�v�b*�������r*����0�LR�xqp�J��J���������c����x�S� �}+���5J�*�\�Jf��MX�����$ftq@����-2�d[�l;�n�bwB	W�����e�A�I��wd������Q��q|��=2:��7�w4V�����H�-�2��>�����C���@�!���J��f�6��{��5��c>[,]��s���eX��z,��;���oI����B�[=�m�
�����*u���"���6;�~�ID/
�0�����{y�I�9�b�w��}[!<�Qd|{���]^�	��UL"��S��
���Yia��j{Hx��a��������rR��:����������<;���a��
�����������	|fg	a���<�}T��##t��-���6�2�K����|�5���+�&XJ���'�6��Qi�d������[x����`���H9v����nx�T��'m+����VH%
�u��!������
�$������m���ek����j�+�$�E��=��)���!I,Z'�'�H��o����e+���2���F
��*c������
D�D>4�Iy��������g���rK��p����'�������Zh�[�S�y��f�s+^
ZS��5]4���$D�>-���}2�aQHo��!�<��������B�>c��`��T�������'[��24�u�R�������1G	�&�X�i>����]%�������Hf^|�1�9QY�~�$}Cx)������X6�
^���!���R�h)Gx�J?]����T����56��l��/��z�6x�����0��X�������
�����"k��M�3������/�	�1��B��o!��-r�!8�%2��$�$QHtb�a�����h-��(��`#�,�a4�Y��5������0��z���4i���~�k=F�k~�Q�g�*&�?
�o��u^KF]�o��*�s�_�Y�&�\��L���
�#J��� [��LN�����������l�$����]�C�����P����p�����E�h�,�B���@�YuT��Sy}D���/<!�������M���S���JJ��	����q�Dd�����L%5<�;f�g�IWn�'����</��M<�x)���[����C���Y�(�q��(K��T���C���~i���P����Ggm+Y������|\l�,�,�J�FK��W�9 �� 3�����+��o�0���1�����I��M[J��y��:�o��+>��rb�&����U�.���A�z�y,{�<�I�H��u�V�����q.M#,����a�qm�'%cu�����������*�������e;����sYh-��@�R��	�E�ia[F?	�&�K����Z6D~��D���&��6����_�C�u��"�r�����f����>�
�>�,ERE��re�&J�s�a�*�+a���~-:�p���
���'�������$��`l3$.6��vH�%$����m�I��+�Q���1�4�>�~�����vg���;�NV��1�y\�	�Y��
"�d���lD�1.��U�M^���@S�W�����~����s����<'0�,��[3������t^�)�I|����y�"7y���%��.[�����OX��>�G�]��F^�g� pZ����ZL"�Y�Q����+a~6P���W8L���J��]���5o8��^�wzL���^�8���-�i������x g"�Ee��Y�T���,��P	�4���*����I�i2��NU�>):��~��I?�_�@J�*��e���Kxe|"|�9�
�M�Xe������s,��[�}2�X�R���r�(�����ZBbi���T�=);��7�8��y���1@�K;�g����O��k
[��_^����x��,�c��i4l���~^������)6^6j��5'�\�}�_W��2^S��zE��o��O`&��w�/��|/OK�eeHy��}I�>~8~?���G�a_2p#��'�����,����0�C�������w���M�������X����!D.���pQHa���s���W��A*�z�D1���W����1Ei��8N��+I|�����S������_rkZ�e_���[���!��R��.Kx>��d�U!���N���i$����8�Db��#Q2�G��>	=���9���q;�i�g�������F��z�He�XU���l3�G�����4?a�6����o���u	�-����o��|/F+������o�O+t���V���=�U��I~HY�m�A��W#��^*��*�����J8����77���'��O��j��.��2i����K��i�@5a�#^���:�Id[v���	�Y &��V�P4Cf1;y#��.]yg���p�B�bIB�/f
C���'���zcF�EU����;�����o��z<c����{�����i�c�i]�1�$��4���t{n�����IF%�&rZ�W��;����-em���a�&.*�R����Z���
E���)��!X�f"��`�fHd�cD��{�+��Cz��X��7�1v��x��S]���[�;��tb����
�&����2W�s�;����aTb����mZ���nmZO�n�D�Q����kq�`���'�3�B*O��V1�U��������\5����A�x�c"1�:��`���������^��5��E��Z����faU}�]�r�+�$o0������V��������������-�gb�L+���b���7�;5��[��V��I}����u4g}�p���������������j���\��[_�|c��?�p�74�zq������'Y���8�������@�����%�[��;�E��#�e������f9���c����%���x��2DQ�;V'��}�E`��j�8�g�m4����
qp��gw�����\������`j75�v7X��*!��8�if�1F�V��i\TW!.n�7T$�����Q�3/W�yb�wo�K��Q���m����o�}��0���[FM��b�I��6�w[^�w
�UO��xM�����$
3�uE�V�&�V��J2�������:���iK�tK)�Z������Ek���/	�������L0��b�%���jbb�M}16�T�<a 
��@�e���n���;���?���������N������;��9w����s��+��?��j��W��w]�_A�.e���/O�M�@���/�m�}��lv�nm�/���)W��<l;!������n�g�_��	MG&������t����=h-��N��?�w������A��<���O��]���{��{��,��uA+���zt�w���z����zKs�����AVI-l�����j��.�6�.B0~%��^�<K��{��U�d���2��d��_�gn�3��v�DR��L�%+��g�uFo32�B�&u]J��^%�B�R5[��kk��u�R>����yKJ�|5��T��nS�U�7����e�}�=�=u�6mO)�bf�
��s�:�}hD\�9��B��9-M~
�W*��:<$�l�|����]�$}7O���g]-D2x��e���������'��^x����������3��{�Yn�O�n�A����Z�-���l1�07�eu���e���k"��p��K�*
���&����{�D�o �M����������<��}���7��+���+���u���'^x_N�*l��U��_�Z�SWW����������y4p��mr�������!cR��n�Cq���J��<Je�-u�����:Fv�����
<������h]�0b�L*i��Y���\�8�}fTY�<���w�d'�����zZ^���)�Y��1R;�YX{��o�} ���n��E(��yOs5n�P��������dn�o������?�-{tBy������c;������������k(o����i����8��m���_������L��_��U|�9�v��r��m�UKKnL��g)n��B�������c]����cB�\��~������������F��k8�a;�+,���lu���r[e}���=�j��<f��A���~{���������#}��w^}C�>�[���������}���zZ�g��Ey��M��f�C��Typ�u�[<�����(_���$w���j_�������u�|y�������X�;�'������1����.��U�>�W��Yw��ve#�y��X�I����>�,�����MOJ�����^8v��:�
�4�Uv\���+���d�\��������I��I�z�\�o�^�6uU���|������������������O�~�y��=r�v��>���D9�.���r`'�v�M�,��m�]����r�v�o�Y�6I�{0�z���c}yU���%�cC�C�e���	���Ny�'w&�i���0�e���>��,g�,	{�h�Zfy"��b��s4��~L���	9��M���o�*6����{����_;�����+��/��o��J���m������6u���!�����YY>yk�;��5��������B{R���Y�\����:�2~����mb���r�ie1���?�l�|�������~���'���A����r�~���^O��_u���6���Q-Y��5j��h5li��=��D�}��;��>]f�����<T0��Fr�i=���n����#�R���q+\��f
�x�Zx���t.]l\�E��B����U(����m�rk��j��r�����X��W�����R;�8��y��w�n��^��'�4��g0�!1��4\����I[������$/�K��!?|�}��~����z
����7����O���?%?��~�����{�[��KB�K�p��M����/Wh�oy��C�kS�u=�i�O�S�/������nQ-��XX���`.�ve�`��yx��Mg�F��Sr��������)�_|A^z�^�~f�}i���]4�[0�<�?�|����qt����B4����Zu�}�%o�|�������r�s��������\�o�E>���2�WKi�,BqCc�_K8�_��U�!���>���30
b'��/&Q�?:�A��u��0����_l���������_|L�[�Gn�7�����e;���E-�'w�����d�.���^Q�q����4�S.�bg�S�+��>8����t��:�d���:����/�+����?��Y�=���3�e^�AxiV��������U��&_��Y&mX���@�;�.�����~���~S��Y�<;�.�4�?���Z�k�/����S��oV�|��L?3���1t� �@w0\���Y9ubQzW���z	����y����g�eA?�]z��k�n�RO�$�f8�6���d�����y��9��rO/�����d�~F~l/o'��5��;��������E��v���]'(f�<G�5��������,�~��%�������\"��~zv�����tN(7u��������To�xBy���7a@��;����S����w��#�@&-PzH����T9�zP(�A�1�R��o����A >������P��
O=��`�{��^C��H��O���j��(J2_������ �������L�����L�����sY�|�'<�P�A��(��/�qn��vr�|Q{>���zS+*,N������^U��>��A�}�E$�\�?=V����1�hIu%��g�:����V�6qO(+�����Cq�����jd0�[��������^t��I��E@H'f<�3<���\�u��F�; ��t�L"G<���"���yE�Q�\%;��#u@@@@@�K&����-@@@@@ b&�#<RG@@@@�`B�Km�B@@@@"`B9��#u@@@@@�K&����-@@@@@ b&�#<RG@@@@�`B�Km�B@@@@"`B9��#u@@@@@�K&����-@@@@@ b&�#<RG@@@@�`B�Km�B@@@@"`B9��#u@@@@@����&�;��@@@@@ b�^�;��!�#� � � � �]
0���6m!� � � � �0����: � � � � ���]j� � � � � ���#� � � � �]
0���6m!� � � � �0����: � � � � ���]j� � � � � ���#� � � � �]
0���6m!� � � � �l�8wRG@@�N`yy��S���j�U�rn � �@lL(�6b�� � �S-��(��Mu'H@0���@@h+p��yYXXpg�Y����������b����7n�(�\rI���G@&.�5�'>$� � ��\�p�u���^�-[����������I�C���>��g����G@��#��w���Z;}�� � � ��X�e��}<77'����������l�#G���}�d��m�,�s����]�d�����\c,C@@���%�'�*�V�h�l��I�P^!� � �e�lR�X:??��V>~����������� � 0n���P���)�!� � ������l������fg(�mqq�����m�o��U� � 0�|)���!� � �@<6��M,[���|v�.ka�Y�[�@@ 2�P�l�H@@@@������]@@@@@ 2&�#0�E@@@@&%�����i@@@@�L�	���t@@@@@�I	0�<)y�E@@@@"`B9�#]@@@@@`RL(OJ�v@@@@@���P�l�H@@@@������]@@@@@ 2&�#0�E@@@@&%�����i@@@@�L��ZV���mHIEND�B`�
build.logapplication/octet-stream; name=build.logDownload
#61Robert Haas
robertmhaas@gmail.com
In reply to: Sandeep Thakkar (#60)
Re: pl/perl extension fails on Windows

On Tue, Aug 8, 2017 at 12:15 PM, Sandeep Thakkar
<sandeep.thakkar@enterprisedb.com> wrote:

I copied and pasted that portion of the build log into file build.log
(attached) for Windows 32bit and Windows 64bit.

Can you also share the output of 'perl -V' on each system?

Comparing the 32-bit log and the 64-bit log, I see the following differences:

32-bit has extra options /IC:\pgBuild32\uuid\include /Oy- /analyze- /D
_USE_32BIT_TIME_T
64-bit has extra options /D WIN64 /D CONSERVATIVE /D USE_SITECUSTOMIZE
Both builds have several copies of /IC:\pgBuild32\include or
/IC:\pgBuild64\include, but the 64-bit build has an extra one

(I wrote that command on Linux, might need different quoting to work
on Windows.)

I'm suspicious about _USE_32BIT_TIME_T. The contents of a
PerlInterpreter are defined in Perl's intrpvar.h, and one of those
lines is:

PERLVAR(I, basetime, Time_t) /* $^T */

Now, Time_t is defined as time_t elsewhere in the Perl headers, so if
the plperl build and the Perl interpreter build had different ideas
about whether that flag was set, the interpreter sizes would be
different. Unfortunately for this theory, if I'm interpreting the
screenshot you posted correctly, the sizes are different by exactly 16
bytes, and I can't see how a difference in the size of time_t could
account for more than 8 bytes (4 bytes of actual size change + 4 bytes
of padding).

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

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

#62Ashutosh Sharma
ashu.coek88@gmail.com
In reply to: Robert Haas (#61)
1 attachment(s)
Re: pl/perl extension fails on Windows

On Thu, Aug 10, 2017 at 1:55 AM, Robert Haas <robertmhaas@gmail.com> wrote:

On Tue, Aug 8, 2017 at 12:15 PM, Sandeep Thakkar
<sandeep.thakkar@enterprisedb.com> wrote:

I copied and pasted that portion of the build log into file build.log
(attached) for Windows 32bit and Windows 64bit.

Can you also share the output of 'perl -V' on each system?

Comparing the 32-bit log and the 64-bit log, I see the following differences:

32-bit has extra options /IC:\pgBuild32\uuid\include /Oy- /analyze- /D
_USE_32BIT_TIME_T
64-bit has extra options /D WIN64 /D CONSERVATIVE /D USE_SITECUSTOMIZE
Both builds have several copies of /IC:\pgBuild32\include or
/IC:\pgBuild64\include, but the 64-bit build has an extra one

(I wrote that command on Linux, might need different quoting to work
on Windows.)

I'm suspicious about _USE_32BIT_TIME_T. The contents of a
PerlInterpreter are defined in Perl's intrpvar.h, and one of those
lines is:

PERLVAR(I, basetime, Time_t) /* $^T */

Now, Time_t is defined as time_t elsewhere in the Perl headers, so if
the plperl build and the Perl interpreter build had different ideas
about whether that flag was set, the interpreter sizes would be
different. Unfortunately for this theory, if I'm interpreting the
screenshot you posted correctly, the sizes are different by exactly 16
bytes, and I can't see how a difference in the size of time_t could
account for more than 8 bytes (4 bytes of actual size change + 4 bytes
of padding).

Okay. I too had a look into this issue and my findings are as follows,

The size of PerlInterpreter structure on plperl and perl module are
not the same. The size of PerlInterpreter on plperl is 2744 bytes
whereas on perl it is 2760 bytes i.e. there is the difference of 16
bytes and therefore the handshaking key generated in the two modules
are not the same resulting in a binary mismatch error. To analyse this
problem, I generated the preprocessed output of header file 'perl.h'
on plperl and perl modules and then filtered the contents of "struct
interpreter" from the preprocessed output files and compared them
using some diff tool. The diff report is attached with this email.

As per the diff report, incase of plperl module, the structure
Stat_t is getting mapped to "_stat32i64" whereas incase of perl
module, the same structure is getting mapped to "_stat64" and this is
happening for couple of variables (statbuf & statcache) in intrpvar.h
file. However, if the preprocessor option '_USE_32BIT_TIME_T' is
explicitly passed to the VC compiler when compiling perl source, there
is no diff observed as in both the cases, 'Stat_t ' is gets mapped to
"stat32i64". So, now the question is, why ''_USE_32BIT_TIME_T' flag
is not implicitly defined when compiling perl source on 32 bit
platform but for postgresql/plperl build it is being defined
implicitly on 32bit platform. I just got few hints from the Makefile,
in perl source code, where is has been mentioned that the modern
Visual C compiler (VC++ 8.0 onwards) changes time_t from 32-bit to
64-bit, even in 32-bit mode hence, ''_USE_32BIT_TIME_T' is net being
added to $Config{ccflags}. Here, is what i could see in
GNUMakefile/Makefile.mk in perl source code.

# In VS 2005 (VC++ 8.0) Microsoft changes time_t from 32-bit to
# 64-bit, even in 32-bit mode. It also provides the _USE_32BIT_TIME_T
# preprocessor option to revert back to the old functionality for
# backward compatibility. We define this symbol here for older 32-bit
# compilers only (which aren't using it at all) for the sole purpose
# of getting it into $Config{ccflags}. That way if someone builds
# Perl itself with e.g. VC6 but later installs an XS module using VC8
# the time_t types will still be compatible.

ifeq ($(WIN64),undef)
ifeq ((PREMSVC80),define)
BUILDOPT += -D_USE_32BIT_TIME_T
endif
endif

So, the question is should we allow the preprocessor option
'_USE_32BIT_TIME_T' to be defined implicitly or not in postgresql
provided we are using Visual C compiler version > 8.0. I think this
should make plperl compatible with perl binaries.

--
With Regards,
Ashutosh Sharma
EnterpriseDB:http://www.enterprisedb.com

Attachments:

perl_plperl_interpreter_struct_diff.htmltext/html; charset=US-ASCII; name=perl_plperl_interpreter_struct_diff.htmlDownload
#63Robert Haas
robertmhaas@gmail.com
In reply to: Ashutosh Sharma (#62)
Re: pl/perl extension fails on Windows

On Thu, Aug 10, 2017 at 8:30 AM, Ashutosh Sharma <ashu.coek88@gmail.com> wrote:

So, the question is should we allow the preprocessor option
'_USE_32BIT_TIME_T' to be defined implicitly or not in postgresql
provided we are using Visual C compiler version > 8.0. I think this
should make plperl compatible with perl binaries.

We've got this code in MSBuildProject.pm and VCBuildProject.pm:

# We have to use this flag on 32 bit targets because the 32bit perls
# are built with it and sometimes crash if we don't.
my $use_32bit_time_t =
$self->{platform} eq 'Win32' ? '_USE_32BIT_TIME_T;' : '';

Based on the discussion upthread, I think we now know that this was
not really the right approach. IIUC, a given 32-bit Perl might've
been built with _USE_32BIT_TIME_T, or not; in fact, given the comments
you found on the Perl side, it's more than likely that most modern
32-bit Perls are NOT build with this option. What we actually need to
do here is use _USE_32BIT_TIME_T if and only if it was used when Perl
was built (otherwise we'll end up with a different interpreter size).

The trouble with that is that _USE_32BIT_TIME_T also affects how
PostgreSQL code compiles. Apparently, given that according to Perl
this was changed by Microsoft in 2005, we're forcing the Microsoft
compilers into a non-default backward compatibility mode by defining
this symbol, and that affects how our entire code base compiles -- and
it just so happens that the result is compatible with older Perl
builds that used _USE_32BIT_TIME_T and not compatible with newer ones
that don't.

Maybe we need to make _USE_32BIT_TIME_T a compile-time configuration
option on Windows, and then cross-check that our setting is compatible
with Perl's setting.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

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

#64Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Haas (#63)
Re: pl/perl extension fails on Windows

Robert Haas <robertmhaas@gmail.com> writes:

On Thu, Aug 10, 2017 at 8:30 AM, Ashutosh Sharma <ashu.coek88@gmail.com> wrote:

So, the question is should we allow the preprocessor option
'_USE_32BIT_TIME_T' to be defined implicitly or not in postgresql
provided we are using Visual C compiler version > 8.0. I think this
should make plperl compatible with perl binaries.

We've got this code in MSBuildProject.pm and VCBuildProject.pm:

# We have to use this flag on 32 bit targets because the 32bit perls
# are built with it and sometimes crash if we don't.
my $use_32bit_time_t =
$self->{platform} eq 'Win32' ? '_USE_32BIT_TIME_T;' : '';

Based on the discussion upthread, I think we now know that this was
not really the right approach.

Yeah ... however, if that's there, then there's something wrong with
Ashutosh's explanation, because that means we *are* building with
_USE_32BIT_TIME_T in 32-bit builds. It's just getting there in a
roundabout way. (Or, alternatively, this code is somehow not doing
anything at all.)

The trouble with that is that _USE_32BIT_TIME_T also affects how
PostgreSQL code compiles.

Really? We try to avoid touching "time_t" at all in most of the code.
I bet that we could drop the above-cited code, and compile only plperl
with _USE_32BIT_TIME_T, taken (if present) from the Perl flags, and
it'd be fine. At least, that's my first instinct for what to try.

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

#65Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#64)
Re: pl/perl extension fails on Windows

On Thu, Aug 10, 2017 at 10:36 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Yeah ... however, if that's there, then there's something wrong with
Ashutosh's explanation, because that means we *are* building with
_USE_32BIT_TIME_T in 32-bit builds. It's just getting there in a
roundabout way. (Or, alternatively, this code is somehow not doing
anything at all.)

I don't follow.

The trouble with that is that _USE_32BIT_TIME_T also affects how
PostgreSQL code compiles.

Really? We try to avoid touching "time_t" at all in most of the code.
I bet that we could drop the above-cited code, and compile only plperl
with _USE_32BIT_TIME_T, taken (if present) from the Perl flags, and
it'd be fine. At least, that's my first instinct for what to try.

Oh. Well, if that's an OK thing to do, then sure, wfm. I guess we've
got pg_time_t plastered all over the backend but that's not actually
time_t under the hood, so it's fine. I do see time_t being used in
frontend code, but that won't matter for this.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

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

#66Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Haas (#65)
Re: pl/perl extension fails on Windows

Robert Haas <robertmhaas@gmail.com> writes:

On Thu, Aug 10, 2017 at 10:36 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Yeah ... however, if that's there, then there's something wrong with
Ashutosh's explanation, because that means we *are* building with
_USE_32BIT_TIME_T in 32-bit builds. It's just getting there in a
roundabout way. (Or, alternatively, this code is somehow not doing
anything at all.)

I don't follow.

The stanzas you pointed to in the MSVC build scripts should mean that
a 32-bit PG build is using _USE_32BIT_TIME_T, no? And Ashutosh stated
that he saw _USE_32BIT_TIME_T in "perl -V" output. So how are they
not ending up compatible?

Now, if that statement was wrong and his 32-bit Perl actually *isn't*
built with _USE_32BIT_TIME_T, then this is clearly what's causing the
problem.

Really? We try to avoid touching "time_t" at all in most of the code.
I bet that we could drop the above-cited code, and compile only plperl
with _USE_32BIT_TIME_T, taken (if present) from the Perl flags, and
it'd be fine. At least, that's my first instinct for what to try.

Oh. Well, if that's an OK thing to do, then sure, wfm. I guess we've
got pg_time_t plastered all over the backend but that's not actually
time_t under the hood, so it's fine. I do see time_t being used in
frontend code, but that won't matter for this.

Yeah. I think this should work as long as plperl itself doesn't use
time_t, or at least doesn't exchange time_t with any other part of the
system, and since we don't use that type in any common APIs that seems
like an OK assumption.

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

#67Ashutosh Sharma
ashu.coek88@gmail.com
In reply to: Tom Lane (#64)
Re: pl/perl extension fails on Windows

On Thu, Aug 10, 2017 at 8:06 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Robert Haas <robertmhaas@gmail.com> writes:

On Thu, Aug 10, 2017 at 8:30 AM, Ashutosh Sharma <ashu.coek88@gmail.com> wrote:

So, the question is should we allow the preprocessor option
'_USE_32BIT_TIME_T' to be defined implicitly or not in postgresql
provided we are using Visual C compiler version > 8.0. I think this
should make plperl compatible with perl binaries.

We've got this code in MSBuildProject.pm and VCBuildProject.pm:

# We have to use this flag on 32 bit targets because the 32bit perls
# are built with it and sometimes crash if we don't.
my $use_32bit_time_t =
$self->{platform} eq 'Win32' ? '_USE_32BIT_TIME_T;' : '';

Based on the discussion upthread, I think we now know that this was
not really the right approach.

Yeah ... however, if that's there, then there's something wrong with
Ashutosh's explanation, because that means we *are* building with
_USE_32BIT_TIME_T in 32-bit builds. It's just getting there in a
roundabout way. (Or, alternatively, this code is somehow not doing
anything at all.)

I am extremely sorry if i have communicated the things wrongly, what i
meant was we are always considering _USE_32BIT_TIME_T flag to build
plperl module on Windows 32-bit platform but unfortunately that is not
being considered/defined in perl code in case we use VC++ compiler
version greater than 8.0. and that's the reason for the binary
mismatch error on 32 bit platform.

Here, is what has been mentioned in 'win32/GNUMakefile' in perl source
for version 5.24.1

# In VS 2005 (VC++ 8.0) Microsoft changes time_t from 32-bit to
# 64-bit, even in 32-bit mode. It also provides the _USE_32BIT_TIME_T
# preprocessor option to revert back to the old functionality for
# backward compatibility. We define this symbol here for older 32-bit
# compilers only (which aren't using it at all) for the sole purpose
# of getting it into $Config{ccflags}. That way if someone builds
# Perl itself with e.g. VC6 but later installs an XS module using VC8
# the time_t types will still be compatible.
ifeq ($(WIN64),undef)
ifeq ((PREMSVC80),define)
BUILDOPT += -D_USE_32BIT_TIME_T
endif
endif

The trouble with that is that _USE_32BIT_TIME_T also affects how
PostgreSQL code compiles.

Really? We try to avoid touching "time_t" at all in most of the code.
I bet that we could drop the above-cited code, and compile only plperl
with _USE_32BIT_TIME_T, taken (if present) from the Perl flags, and
it'd be fine. At least, that's my first instinct for what to try.

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

#68Tom Lane
tgl@sss.pgh.pa.us
In reply to: Ashutosh Sharma (#67)
1 attachment(s)
Re: pl/perl extension fails on Windows

Ashutosh Sharma <ashu.coek88@gmail.com> writes:

On Thu, Aug 10, 2017 at 8:06 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Yeah ... however, if that's there, then there's something wrong with
Ashutosh's explanation, because that means we *are* building with
_USE_32BIT_TIME_T in 32-bit builds. It's just getting there in a
roundabout way. (Or, alternatively, this code is somehow not doing
anything at all.)

I am extremely sorry if i have communicated the things wrongly, what i
meant was we are always considering _USE_32BIT_TIME_T flag to build
plperl module on Windows 32-bit platform but unfortunately that is not
being considered/defined in perl code in case we use VC++ compiler
version greater than 8.0. and that's the reason for the binary
mismatch error on 32 bit platform.

Got it. So in short, it seems like the attached patch ought to fix it
for MSVC builds. (We'd also need to teach PGAC_CHECK_PERL_EMBED_CCFLAGS
to let _USE_32BIT_TIME_T through on Windows, but let's confirm the theory
first.)

regards, tom lane

Attachments:

32bit_time_t.patchtext/x-diff; charset=us-ascii; name=32bit_time_t.patchDownload
diff --git a/src/tools/msvc/MSBuildProject.pm b/src/tools/msvc/MSBuildProject.pm
index d7638b4..27329f9 100644
*** a/src/tools/msvc/MSBuildProject.pm
--- b/src/tools/msvc/MSBuildProject.pm
*************** EOF
*** 63,83 ****
    </PropertyGroup>
  EOF
  
- 	# We have to use this flag on 32 bit targets because the 32bit perls
- 	# are built with it and sometimes crash if we don't.
- 	my $use_32bit_time_t =
- 	  $self->{platform} eq 'Win32' ? '_USE_32BIT_TIME_T;' : '';
- 
  	$self->WriteItemDefinitionGroup(
  		$f, 'Debug',
! 		{   defs    => "_DEBUG;DEBUG=1;$use_32bit_time_t",
  			opt     => 'Disabled',
  			strpool => 'false',
  			runtime => 'MultiThreadedDebugDLL' });
  	$self->WriteItemDefinitionGroup(
  		$f,
  		'Release',
! 		{   defs    => "$use_32bit_time_t",
  			opt     => 'Full',
  			strpool => 'true',
  			runtime => 'MultiThreadedDLL' });
--- 63,78 ----
    </PropertyGroup>
  EOF
  
  	$self->WriteItemDefinitionGroup(
  		$f, 'Debug',
! 		{   defs    => "_DEBUG;DEBUG=1",
  			opt     => 'Disabled',
  			strpool => 'false',
  			runtime => 'MultiThreadedDebugDLL' });
  	$self->WriteItemDefinitionGroup(
  		$f,
  		'Release',
! 		{   defs    => "",
  			opt     => 'Full',
  			strpool => 'true',
  			runtime => 'MultiThreadedDLL' });
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index a7e3a01..940bef6 100644
*** a/src/tools/msvc/Mkvcbuild.pm
--- b/src/tools/msvc/Mkvcbuild.pm
*************** sub mkvcbuild
*** 522,528 ****
  		my @perl_embed_ccflags;
  		foreach my $f (split(" ",$Config{ccflags}))
  		{
! 			if ($f =~ /^-D[^_]/)
  			{
  				$f =~ s/\-D//;
  				push(@perl_embed_ccflags, $f);
--- 522,529 ----
  		my @perl_embed_ccflags;
  		foreach my $f (split(" ",$Config{ccflags}))
  		{
! 			if ($f =~ /^-D[^_]/ ||
! 			    $f =~ /^-D_USE_32BIT_TIME_T/)
  			{
  				$f =~ s/\-D//;
  				push(@perl_embed_ccflags, $f);
diff --git a/src/tools/msvc/VCBuildProject.pm b/src/tools/msvc/VCBuildProject.pm
index a8d75d8..669ba17 100644
*** a/src/tools/msvc/VCBuildProject.pm
--- b/src/tools/msvc/VCBuildProject.pm
*************** sub WriteHeader
*** 33,47 ****
   <Configurations>
  EOF
  
- 	# We have to use this flag on 32 bit targets because the 32bit perls
- 	# are built with it and sometimes crash if we don't.
- 	my $use_32bit_time_t =
- 	  $self->{platform} eq 'Win32' ? '_USE_32BIT_TIME_T;' : '';
- 
- 
  	$self->WriteConfiguration(
  		$f, 'Debug',
! 		{   defs     => "_DEBUG;DEBUG=1;$use_32bit_time_t",
  			wholeopt => 0,
  			opt      => 0,
  			strpool  => 'false',
--- 33,41 ----
   <Configurations>
  EOF
  
  	$self->WriteConfiguration(
  		$f, 'Debug',
! 		{   defs     => "_DEBUG;DEBUG=1",
  			wholeopt => 0,
  			opt      => 0,
  			strpool  => 'false',
*************** EOF
*** 49,55 ****
  	$self->WriteConfiguration(
  		$f,
  		'Release',
! 		{   defs     => "$use_32bit_time_t",
  			wholeopt => 0,
  			opt      => 3,
  			strpool  => 'true',
--- 43,49 ----
  	$self->WriteConfiguration(
  		$f,
  		'Release',
! 		{   defs     => "",
  			wholeopt => 0,
  			opt      => 3,
  			strpool  => 'true',
#69Sandeep Thakkar
sandeep.thakkar@enterprisedb.com
In reply to: Tom Lane (#68)
Re: pl/perl extension fails on Windows

Hi

On Thu, Aug 10, 2017 at 9:04 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Ashutosh Sharma <ashu.coek88@gmail.com> writes:

On Thu, Aug 10, 2017 at 8:06 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Yeah ... however, if that's there, then there's something wrong with
Ashutosh's explanation, because that means we *are* building with
_USE_32BIT_TIME_T in 32-bit builds. It's just getting there in a
roundabout way. (Or, alternatively, this code is somehow not doing
anything at all.)

I am extremely sorry if i have communicated the things wrongly, what i
meant was we are always considering _USE_32BIT_TIME_T flag to build
plperl module on Windows 32-bit platform but unfortunately that is not
being considered/defined in perl code in case we use VC++ compiler
version greater than 8.0. and that's the reason for the binary
mismatch error on 32 bit platform.

Got it. So in short, it seems like the attached patch ought to fix it
for MSVC builds. (We'd also need to teach PGAC_CHECK_PERL_EMBED_CCFLAGS
to let _USE_32BIT_TIME_T through on Windows, but let's confirm the theory
first.)

We built the sources with this patch and were able to create the plperl

extension on Windows 32bit and 64bit.

regards, tom lane

--
Sandeep Thakkar
EDB

#70Tom Lane
tgl@sss.pgh.pa.us
In reply to: Sandeep Thakkar (#69)
Re: pl/perl extension fails on Windows

Sandeep Thakkar <sandeep.thakkar@enterprisedb.com> writes:

On Thu, Aug 10, 2017 at 9:04 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Got it. So in short, it seems like the attached patch ought to fix it
for MSVC builds. (We'd also need to teach PGAC_CHECK_PERL_EMBED_CCFLAGS
to let _USE_32BIT_TIME_T through on Windows, but let's confirm the theory
first.)

We built the sources with this patch and were able to create the plperl
extension on Windows 32bit and 64bit.

Excellent, thanks for testing. I'll finish up the configure-script part
and push this shortly.

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

#71Christoph Berg
myon@debian.org
In reply to: Sandeep Thakkar (#58)
Re: pl/perl extension fails on Windows

Re: Sandeep Thakkar 2017-08-08 <CANFyU96tucWPECj8Oy5cevuVwyijVoEZ_Dey08eCEhPk9TM85A@mail.gmail.com>

Hi

An update from beta3 build: We are no longer seeing this issue (handshake
failure) on Windows 64bit, but on Windows 32bit it still persists.

HEAD as of 5a5c2feca still has the same problem on kfreebsd. Is there
anything I could dump so we understand the problem better?

Christoph

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

#72Tom Lane
tgl@sss.pgh.pa.us
In reply to: Christoph Berg (#71)
Re: pl/perl extension fails on Windows

Christoph Berg <myon@debian.org> writes:

HEAD as of 5a5c2feca still has the same problem on kfreebsd. Is there
anything I could dump so we understand the problem better?

Yeah, I did not expect that 5a5c2feca would change anything on
non-Windows.

What we need to do is verify that PL/Perl's idea of
sizeof(PerlInterpreter) is different from Perl's own idea, and then
find out why --- ie, just which fields have different size/alignment
in the two compiles.

You mentioned upthread that configure shows this:

checking for CFLAGS recommended by Perl... -D_REENTRANT -D_GNU_SOURCE
-DDEBIAN -fwrapv -fno-strict-aliasing -pipe -I/usr/local/include
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
checking for CFLAGS to compile embedded Perl... -DDEBIAN

If the source of the problem is the same mechanism as it was for the
other platforms, then presumably the issue is that we need one or more
of
-D_REENTRANT
-D_GNU_SOURCE
-D_LARGEFILE_SOURCE
-D_FILE_OFFSET_BITS=64
to be defined while building PL/Perl. Now, it couldn't be -D_GNU_SOURCE
that's at issue, because we turn that on in src/template/linux:

# Force _GNU_SOURCE on; plperl is broken with Perl 5.8.0 otherwise
CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"

(That ancient comment is pretty interesting in this connection, isn't it.)

And I'd have thought that _LARGEFILE_SOURCE=1 and _FILE_OFFSET_BITS=64
were the default behavior on any modern platform anyway, but maybe
kfreebsd is weird about that. Anyway, you could try sticking combinations
of these symbols into perl_embed_ccflags in src/Makefile.global and
rebuilding PL/Perl to see if the problem goes away; if that works it would
give us a leg up on where the problem is.

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

#73Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#70)
Re: pl/perl extension fails on Windows

I wrote:

Sandeep Thakkar <sandeep.thakkar@enterprisedb.com> writes:

We built the sources with this patch and were able to create the plperl
extension on Windows 32bit and 64bit.

Excellent, thanks for testing. I'll finish up the configure-script part
and push this shortly.

So the early returns from the buildfarm are that this broke baiji,
although a couple of other Windows critters seem to be OK with it.

This presumably means that baiji's version of perl was built with
_USE_32BIT_TIME_T, but $Config{ccflags} isn't admitting to that.
I wonder what Perl version that is exactly, and what it reports for
$Config{ccflags}, and whether there is some other place that we
ought to be looking for the info.

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

#74Dave Page
dpage@postgresql.org
In reply to: Tom Lane (#73)
Re: pl/perl extension fails on Windows

On Mon, Aug 14, 2017 at 9:37 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

I wrote:

Sandeep Thakkar <sandeep.thakkar@enterprisedb.com> writes:

We built the sources with this patch and were able to create the plperl
extension on Windows 32bit and 64bit.

Excellent, thanks for testing. I'll finish up the configure-script part
and push this shortly.

So the early returns from the buildfarm are that this broke baiji,
although a couple of other Windows critters seem to be OK with it.

This presumably means that baiji's version of perl was built with
_USE_32BIT_TIME_T, but $Config{ccflags} isn't admitting to that.
I wonder what Perl version that is exactly, and what it reports for
$Config{ccflags}, and whether there is some other place that we
ought to be looking for the info.

It's ActiveState Perl 5.8.8. Printing $Config{ccflags} doesn't seem to do
anything, but perl -V output is below:

C:\Program Files\Microsoft Visual Studio 8\VC>c:\perl\bin\perl -V
Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
Platform:
osname=MSWin32, osvers=4.0, archname=MSWin32-x86-multi-thread
uname=''
config_args='undef'
hint=recommended, useposix=true, d_sigaction=undef
usethreads=define use5005threads=undef useithreads=define
usemultiplicity=de
fine
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='cl', ccflags ='-nologo -GF -W3 -MD -Zi -DNDEBUG -O1 -DWIN32
-D_CONSOLE -
DNO_STRICT -DHAVE_DES_FCRYPT -DNO_HASH_SEED -DUSE_SITECUSTOMIZE
-DPERL_IMPLICIT_
CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READFIX',
optimize='-MD -Zi -DNDEBUG -O1',
cppflags='-DWIN32'
ccversion='12.00.8804', gccversion='', gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=10
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='__int64',
lseeksi
ze=8
alignbytes=8, prototype=define
Linker and Libraries:
ld='link', ldflags ='-nologo -nodefaultlib -debug -opt:ref,icf
-libpath:"C:
\Perl\lib\CORE" -machine:x86'
libpth=\lib
libs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib
comdlg32
.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib
ws2_
32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvcrt.lib
perllibs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib
comd
lg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib
uuid.lib
ws2_32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvcrt.lib
libc=msvcrt.lib, so=dll, useshrplib=yes, libperl=perl58.lib
gnulibc_version=''
Dynamic Linking:
dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' '
cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -debug
-opt:ref,icf -
libpath:"C:\Perl\lib\CORE" -machine:x86'

Characteristics of this binary (from libperl):
Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT
PERL_IMPLICIT_SYS PERL_MALLOC_WRAP
PL_OP_SLAB_ALLOC USE_ITHREADS USE_LARGE_FILES
USE_PERLIO USE_SITECUSTOMIZE
Locally applied patches:
ActivePerl Build 820 [274739]
Iin_load_module moved for compatibility with build 806
PerlEx support in CGI::Carp
Less verbose ExtUtils::Install and Pod::Find
Patch for CAN-2005-0448 from Debian with modifications
Rearrange @INC so that 'site' is searched before 'perl'
Partly reverted 24733 to preserve binary compatibility
29930 win32.c typo in #define MULTIPLICITY
29868 win32_async_check() can still loop indefinitely
29690,29732 ANSIfy the PATH environment variable on Windows
29689 Add error handling to win32_ansipath
29675 Use short pathnames in $^X and @INC
29607,29676 allow blib.pm to be used for testing Win32 module
29605 Implement killpg() for MSWin32
29598 cwd() to return the short pathname
29597 let readdir() return the alternate filename
29590 Don't destroy the Unicode system environment on Perl startup
29528 get ext/Win32/Win32.xs to compile on cygwin
29509,29510,29511 Move Win32::* functions into Win32 module
29483 Move Win32 from win32/ext/Win32 to ext/Win32
29481 Makefile.PL changes to compile Win32.xs using cygwin
28671 Define PERL_NO_DEV_RANDOM on Windows
28376 Add error checks after execing PL_cshname or PL_sh_path
28305 Pod::Html should not convert "foo" into ``foo''
27833 Change anchor generation in Pod::Html for '=item item 2'
27832,27847 fix Pod::Html::depod() for multi-line strings
27719 Document the functions htmlify() and anchorify() in Pod::Html
27619 Bug in Term::ReadKey being triggered by a bug in
Term::ReadLine
27549 Move DynaLoader.o into libperl.so
27528 win32_pclose() error exit doesn't unlock mutex
27527 win32_async_check() can loop indefinitely
27515 ignore directories when searching @INC
27359 Fix -d:Foo=bar syntax
27210 Fix quote typo in c2ph
27203 Allow compiling swigged C++ code
27200 Make stat() on Windows handle trailing slashes correctly
27133 Initialise lastparen in the regexp structure
27061 L<PerlIO> and Pod::Html
27034 Avoid "Prototype mismatch" warnings with autouse
26970 Make Passive mode the default for Net::FTP
26921 Avoid getprotobyname/number calls in IO::Socket::INET
26897,26903 Make common IPPROTO_* constants always available
26670 Make '-s' on the shebang line parse -foo=bar switches
26637 Make Borland and MinGW happy with change 26379
26536 INSTALLSCRIPT versus INSTALLDIRS
26379 Fix alarm() for Windows 2003
26087 Storable 0.1 compatibility
25861 IO::File performace issue
25084 long groups entry could cause memory exhaustion
24699 ICMP_UNREACHABLE handling in Net::Ping
Built under MSWin32
Compiled at Jan 23 2007 15:57:46
@INC:
c:/perl/site/lib
c:/perl/lib
.

C:\Program Files\Microsoft Visual Studio 8\VC>

--
Dave Page
PostgreSQL Core Team
http://www.postgresql.org/

#75Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dave Page (#74)
Re: pl/perl extension fails on Windows

Dave Page <dpage@postgresql.org> writes:

It's ActiveState Perl 5.8.8. Printing $Config{ccflags} doesn't seem to do
anything, but perl -V output is below:

That's weird ... you get nothing from

perl -MConfig -e 'print $Config{ccflags}'

?

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

#76Dave Page
dpage@postgresql.org
In reply to: Tom Lane (#75)
Re: pl/perl extension fails on Windows

On Thu, Aug 17, 2017 at 2:58 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Dave Page <dpage@postgresql.org> writes:

It's ActiveState Perl 5.8.8. Printing $Config{ccflags} doesn't seem to do
anything, but perl -V output is below:

That's weird ... you get nothing from

perl -MConfig -e 'print $Config{ccflags}'

Didn't realise I needed the -MConfig bit (told you my perl-fu was weak :-)
):

C:\Perl\bin>perl -MConfig -e "print $Config{ccflags}"
-nologo -GF -W3 -MD -Zi -DNDEBUG -O1 -DWIN32 -D_CONSOLE -DNO_STRICT
-DHAVE_DES_FCRYPT -DNO_HASH_SEED -DUSE_SITECUSTOMIZE
-DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO
-DPERL_MSVCRT_READFIX

--
Dave Page
PostgreSQL Core Team
http://www.postgresql.org/

#77Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dave Page (#76)
Re: pl/perl extension fails on Windows

Dave Page <dpage@postgresql.org> writes:

Didn't realise I needed the -MConfig bit (told you my perl-fu was weak :-)
):

C:\Perl\bin>perl -MConfig -e "print $Config{ccflags}"
-nologo -GF -W3 -MD -Zi -DNDEBUG -O1 -DWIN32 -D_CONSOLE -DNO_STRICT
-DHAVE_DES_FCRYPT -DNO_HASH_SEED -DUSE_SITECUSTOMIZE
-DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO
-DPERL_MSVCRT_READFIX

So it is indeed not advertising anything about _USE_32BIT_TIME_T ...
but then how do other Perl extensions work? Strange.

I wonder whether slightly-newer versions of ActiveState Perl work.

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

#78Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#77)
Re: pl/perl extension fails on Windows

I wrote:

Dave Page <dpage@postgresql.org> writes:

C:\Perl\bin>perl -MConfig -e "print $Config{ccflags}"
-nologo -GF -W3 -MD -Zi -DNDEBUG -O1 -DWIN32 -D_CONSOLE -DNO_STRICT
-DHAVE_DES_FCRYPT -DNO_HASH_SEED -DUSE_SITECUSTOMIZE
-DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO
-DPERL_MSVCRT_READFIX

So it is indeed not advertising anything about _USE_32BIT_TIME_T ...
but then how do other Perl extensions work? Strange.

So we're between a rock and a hard place here. ActiveState Perl 5.8.8
requires us to use _USE_32BIT_TIME_T, and doesn't appear to display that
requirement in any standard way. Newer versions of Perl require us not
to use that symbol unless they say so.

Short of declaring this version of Perl unsupported, the only answer
I can think of is to put a kluge into the MSVC build scripts along
the lines of "if it's 32-bit Windows, and the Perl version is before X,
assume we need _USE_32BIT_TIME_T even if $Config{ccflags} doesn't
say so". It would be nice to have some hard evidence about what X
should be, but we don't know when ActiveState fixed this. (I poked
around in their bugzilla, without success.)

In the interests of getting the buildfarm green again before I disappear
on vacation, I propose to do the above with X = 5.10.0. Anybody
have a better idea?

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

#79Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#78)
Re: pl/perl extension fails on Windows

I wrote:

Short of declaring this version of Perl unsupported, the only answer
I can think of is to put a kluge into the MSVC build scripts along
the lines of "if it's 32-bit Windows, and the Perl version is before X,
assume we need _USE_32BIT_TIME_T even if $Config{ccflags} doesn't
say so". It would be nice to have some hard evidence about what X
should be, but we don't know when ActiveState fixed this. (I poked
around in their bugzilla, without success.)

Ah-hah: it wasn't ActiveState that fixed this at all; it was upstream
Perl. The stanza that Ashutosh found about defining _USE_32BIT_TIME_T
originated in Perl 5.13.4; older Perls simply don't provide it, no
matter how they were built.

We can now isolate the exact reason we're having trouble on baiji:
it's building Postgres with MSVC 2005, which by default will think
time_t is 64 bits, but it must be using a copy of Perl that was
built with an older Microsoft compiler that doesn't think that.
(Dave's "perl -V" output says ccversion='12.00.8804', but I don't
know how to translate that to the marketing version.) And since it's
pre-5.13.4, Perl itself doesn't know it should advertise this fact.

So it's now looking to me like we should do the above with X = 5.13.4.
That won't be a perfect solution, but it's about the best we can
readily do. Realistically, nobody out in the wider world is likely
to care about building current PG releases against such old Perl
versions on Windows; if we satisfy our older buildfarm critters,
it's enough for me.

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

#80Noah Misch
noah@leadboat.com
In reply to: Tom Lane (#79)
Re: pl/perl extension fails on Windows

On Thu, Aug 17, 2017 at 12:15:58PM -0400, Tom Lane wrote:

I wrote:

Short of declaring this version of Perl unsupported, the only answer
I can think of is to put a kluge into the MSVC build scripts along
the lines of "if it's 32-bit Windows, and the Perl version is before X,
assume we need _USE_32BIT_TIME_T even if $Config{ccflags} doesn't
say so". It would be nice to have some hard evidence about what X
should be, but we don't know when ActiveState fixed this. (I poked
around in their bugzilla, without success.)

Ah-hah: it wasn't ActiveState that fixed this at all; it was upstream
Perl. The stanza that Ashutosh found about defining _USE_32BIT_TIME_T
originated in Perl 5.13.4; older Perls simply don't provide it, no
matter how they were built.

We can now isolate the exact reason we're having trouble on baiji:
it's building Postgres with MSVC 2005, which by default will think
time_t is 64 bits, but it must be using a copy of Perl that was
built with an older Microsoft compiler that doesn't think that.
(Dave's "perl -V" output says ccversion='12.00.8804', but I don't
know how to translate that to the marketing version.) And since it's
pre-5.13.4, Perl itself doesn't know it should advertise this fact.

So it's now looking to me like we should do the above with X = 5.13.4.
That won't be a perfect solution, but it's about the best we can
readily do. Realistically, nobody out in the wider world is likely
to care about building current PG releases against such old Perl
versions on Windows; if we satisfy our older buildfarm critters,
it's enough for me.

MinGW default behavior matches "cl -D_USE_32BIT_TIME_T", and MSVC >= 2005
default behavior matches "gcc -D__MINGW_USE_VC2005_COMPAT"[1]https://gnunet.org/sorting-out-stat-thing. MinGW-built
Perl[2]ActivePerl has been MinGW-built for more than five years, and Strawberry Perl has always been MinGW-built. I'm guessing Ashutosh tested with an MSVC-built Perl like http://get.enterprisedb.com/languagepacks/edb-languagepack-10-3-windows.exe. does not mention _USE_32BIT_TIME_T in $Config{ccflags}, so we
typically must add _USE_32BIT_TIME_T when using MSVC to build 32-bit against
MinGW-built Perl. I'm considering two ways to achieve this:

1. If $Config{gccversion} is nonempty, add _USE_32BIT_TIME_T. This will do
the wrong thing if MinGW changes its default to match modern MSVC. It will
do the wrong thing for a Perl built with "gcc -D__MINGW_USE_VC2005_COMPAT".

2. When configuring the build, determine whether to add _USE_32BIT_TIME_T by
running a test program built with and without that symbol. Perhaps have
the test program store and retrieve a PL_modglobal value. (PL_modglobal
maps to a PerlInterpreter field that follows the fields sensitive to
_USE_32BIT_TIME_T, and perlapi documents it since 5.8.0 or earlier.) This
is more principled than (1), but it will be more code and may have weird
interactions with rare Perl build options.

I am inclined toward (2) if it takes no more than roughly a hundred lines of
code, else (1). Opinions? I regret investing in 32-bit Windows. If there's
any OS where a 32-bit PostgreSQL server makes sense today, it's not Windows.

Ideally, $Config{ccflags} would include -D_USE_32BIT_TIME_T for MinGW-built
Perl, like it does for VC6-built Perl. Considering Perl versions already in
the field, fixing Perl won't change this need to patch PostgreSQL.

Using MinGW to build a PostgreSQL that links to an MSVC-built Perl probably
requires -D__MINGW_USE_VC2005_COMPAT. I may not bother for now. We're less
likely to experience that, because Perl binaries advertised on perl.org or in
the PostgreSQL documentation are MinGW-built.

[1]: https://gnunet.org/sorting-out-stat-thing

[2]: ActivePerl has been MinGW-built for more than five years, and Strawberry Perl has always been MinGW-built. I'm guessing Ashutosh tested with an MSVC-built Perl like http://get.enterprisedb.com/languagepacks/edb-languagepack-10-3-windows.exe.
Perl has always been MinGW-built. I'm guessing Ashutosh tested with an
MSVC-built Perl like
http://get.enterprisedb.com/languagepacks/edb-languagepack-10-3-windows.exe.

#81Tom Lane
tgl@sss.pgh.pa.us
In reply to: Noah Misch (#80)
Re: pl/perl extension fails on Windows

Noah Misch <noah@leadboat.com> writes:

On Thu, Aug 17, 2017 at 12:15:58PM -0400, Tom Lane wrote:

... it's now looking to me like we should do the above with X = 5.13.4.
That won't be a perfect solution, but it's about the best we can
readily do. Realistically, nobody out in the wider world is likely
to care about building current PG releases against such old Perl
versions on Windows; if we satisfy our older buildfarm critters,
it's enough for me.

MinGW default behavior matches "cl -D_USE_32BIT_TIME_T", and MSVC >= 2005
default behavior matches "gcc -D__MINGW_USE_VC2005_COMPAT"[1]. MinGW-built
Perl[2] does not mention _USE_32BIT_TIME_T in $Config{ccflags}, so we
typically must add _USE_32BIT_TIME_T when using MSVC to build 32-bit against
MinGW-built Perl. I'm considering two ways to achieve this:

I don't really have an opinion about the relative merits of these changes,
but why do anything? The existing solution has the buildfarm happy, and
we've not heard any field complaints that I saw. I'm not sure we should
spend more time on supporting obsolete toolchain combinations that aren't
represented in the buildfarm.

regards, tom lane

#82Noah Misch
noah@leadboat.com
In reply to: Tom Lane (#81)
Re: pl/perl extension fails on Windows

On Wed, Nov 29, 2017 at 11:34:56PM -0500, Tom Lane wrote:

Noah Misch <noah@leadboat.com> writes:

On Thu, Aug 17, 2017 at 12:15:58PM -0400, Tom Lane wrote:

... it's now looking to me like we should do the above with X = 5.13.4.
That won't be a perfect solution, but it's about the best we can
readily do. Realistically, nobody out in the wider world is likely
to care about building current PG releases against such old Perl
versions on Windows; if we satisfy our older buildfarm critters,
it's enough for me.

MinGW default behavior matches "cl -D_USE_32BIT_TIME_T", and MSVC >= 2005
default behavior matches "gcc -D__MINGW_USE_VC2005_COMPAT"[1]. MinGW-built
Perl[2] does not mention _USE_32BIT_TIME_T in $Config{ccflags}, so we
typically must add _USE_32BIT_TIME_T when using MSVC to build 32-bit against
MinGW-built Perl. I'm considering two ways to achieve this:

I don't really have an opinion about the relative merits of these changes,
but why do anything? The existing solution has the buildfarm happy, and
we've not heard any field complaints that I saw. I'm not sure we should
spend more time on supporting obsolete toolchain combinations that aren't
represented in the buildfarm.

It's the other way around. The buildfarm's 32-bit MSVC animals each use an
obsolete Perl. PostgreSQL is incompatible with today's 32-bit ActivePerl and
Strawberry Perl.

#83Michael Paquier
michael.paquier@gmail.com
In reply to: Tom Lane (#81)
Re: pl/perl extension fails on Windows

On Thu, Nov 30, 2017 at 1:34 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Noah Misch <noah@leadboat.com> writes:

On Thu, Aug 17, 2017 at 12:15:58PM -0400, Tom Lane wrote:

... it's now looking to me like we should do the above with X = 5.13.4.
That won't be a perfect solution, but it's about the best we can
readily do. Realistically, nobody out in the wider world is likely
to care about building current PG releases against such old Perl
versions on Windows; if we satisfy our older buildfarm critters,
it's enough for me.

MinGW default behavior matches "cl -D_USE_32BIT_TIME_T", and MSVC >= 2005
default behavior matches "gcc -D__MINGW_USE_VC2005_COMPAT"[1]. MinGW-built
Perl[2] does not mention _USE_32BIT_TIME_T in $Config{ccflags}, so we
typically must add _USE_32BIT_TIME_T when using MSVC to build 32-bit against
MinGW-built Perl. I'm considering two ways to achieve this:

I don't really have an opinion about the relative merits of these changes,
but why do anything? The existing solution has the buildfarm happy, and
we've not heard any field complaints that I saw. I'm not sure we should
spend more time on supporting obsolete toolchain combinations that aren't
represented in the buildfarm.

I agree with this position. If people are looking for getting better
coverage about weird component combinations, I'd like to think that
they should provide an animal so as support is live and not
investigated afterwards. Remember for example the recent thread about
overlayfs (/messages/by-id/20171107135454.lbelbbvfgadljmuj@home.ouaza.com).
On top of that this thread deals with rather old components with 32b
stuff on Windows..
--
Michael

#84Tom Lane
tgl@sss.pgh.pa.us
In reply to: Noah Misch (#82)
Re: pl/perl extension fails on Windows

Noah Misch <noah@leadboat.com> writes:

On Wed, Nov 29, 2017 at 11:34:56PM -0500, Tom Lane wrote:

I don't really have an opinion about the relative merits of these changes,
but why do anything? The existing solution has the buildfarm happy, and
we've not heard any field complaints that I saw. I'm not sure we should
spend more time on supporting obsolete toolchain combinations that aren't
represented in the buildfarm.

It's the other way around. The buildfarm's 32-bit MSVC animals each use an
obsolete Perl. PostgreSQL is incompatible with today's 32-bit ActivePerl and
Strawberry Perl.

Oh, OK. In that case, we need to get some representatives of these
more modern builds into the buildfarm while we're at it.

regards, tom lane

#85Andrew Dunstan
andrew.dunstan@2ndquadrant.com
In reply to: Tom Lane (#84)
Re: pl/perl extension fails on Windows

On 11/29/2017 11:45 PM, Tom Lane wrote:

Noah Misch <noah@leadboat.com> writes:

On Wed, Nov 29, 2017 at 11:34:56PM -0500, Tom Lane wrote:

I don't really have an opinion about the relative merits of these changes,
but why do anything? The existing solution has the buildfarm happy, and
we've not heard any field complaints that I saw. I'm not sure we should
spend more time on supporting obsolete toolchain combinations that aren't
represented in the buildfarm.

It's the other way around. The buildfarm's 32-bit MSVC animals each use an
obsolete Perl. PostgreSQL is incompatible with today's 32-bit ActivePerl and
Strawberry Perl.

Oh, OK. In that case, we need to get some representatives of these
more modern builds into the buildfarm while we're at it.

My 32 bit XP machine currawong/frogmouth builds against perl 5.16.3,
build dated 2014.

cheers

andrew

--
Andrew Dunstan https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#86Noah Misch
noah@leadboat.com
In reply to: Noah Misch (#80)
1 attachment(s)
Re: pl/perl extension fails on Windows

On Wed, Nov 29, 2017 at 08:14:41PM -0800, Noah Misch wrote:

1. If $Config{gccversion} is nonempty, add _USE_32BIT_TIME_T. This will do
the wrong thing if MinGW changes its default to match modern MSVC. It will
do the wrong thing for a Perl built with "gcc -D__MINGW_USE_VC2005_COMPAT".

2. When configuring the build, determine whether to add _USE_32BIT_TIME_T by
running a test program built with and without that symbol. Perhaps have
the test program store and retrieve a PL_modglobal value. (PL_modglobal
maps to a PerlInterpreter field that follows the fields sensitive to
_USE_32BIT_TIME_T, and perlapi documents it since 5.8.0 or earlier.) This
is more principled than (1), but it will be more code and may have weird
interactions with rare Perl build options.

I am inclined toward (2) if it takes no more than roughly a hundred lines of
code, else (1). Opinions? I regret investing in 32-bit Windows. If there's
any OS where a 32-bit PostgreSQL server makes sense today, it's not Windows.

Here's an implementation of (2). This is more intricate than I hoped. One
could argue for (1), but I estimate (2) wins by a nose. I successfully tested
http://strawberryperl.com/download/5.14.4.1/strawberry-perl-5.14.4.1-32bit.msi
(Perl 5.14.4; MinGW-built; must have -D_USE_32BIT_TIME_T) and
http://get.enterprisedb.com/languagepacks/edb-languagepack-10-3-windows.exe
(Perl 5.24.0; MSVC-built; must not have -D_USE_32BIT_TIME_T). I also tried
http://strawberryperl.com/download/5.8.9/strawberry-perl-5.8.9.5.msi, which
experienced a StackHash_0a9e crash during PERL_SYS_INIT3(), with or without
-D_USE_32BIT_TIME_T. I expect that breakage is orthogonal. I didn't have
ready access to obsolete MSVC-built Perl, so it will be interesting to see how
the buildfarm likes this.

Attachments:

time_t-msvc-v1.patchtext/plain; charset=us-asciiDownload
MSVC: Test whether 32-bit Perl needs -D_USE_32BIT_TIME_T.

Commits 5a5c2feca3fd858e70ea348822595547e6fa6c15 and
b5178c5d08ca59e30f9d9428fa6fdb2741794e65 introduced support for modern
MSVC-built, 32-bit Perl, but they broke use of MinGW-built, 32-bit Perl
distributions like Strawberry Perl and modern ActivePerl.  Perl has no
robust means to report whether it expects a -D_USE_32BIT_TIME_T ABI, so
test this.  Back-patch to 9.3 (all supported versions).

The chief alternative was a heuristic of adding -D_USE_32BIT_TIME_T when
$Config{gccversion} is nonempty.  That banks on every gcc-built Perl
using the same ABI.  gcc could change its default ABI the way MSVC once
did, and one could build Perl with gcc and the non-default ABI.

The GNU make build system could benefit from a similar test, without
which it does not support MSVC-built Perl.  For now, just add a comment.
Most users taking the special step of building Perl with MSVC probably
build PostgreSQL with MSVC.

Discussion: https://postgr.es/m/20171130041441.GA3161526@rfd.leadboat.com


diff --git a/config/perl.m4 b/config/perl.m4
index 76b1a92..caefb07 100644
--- a/config/perl.m4
+++ b/config/perl.m4
@@ -48,19 +48,23 @@ AC_DEFUN([PGAC_CHECK_PERL_CONFIGS],
 
 # PGAC_CHECK_PERL_EMBED_CCFLAGS
 # -----------------------------
-# We selectively extract stuff from $Config{ccflags}.  We don't really need
-# anything except -D switches, and other sorts of compiler switches can
-# actively break things if Perl was compiled with a different compiler.
-# Moreover, although Perl likes to put stuff like -D_LARGEFILE_SOURCE and
-# -D_FILE_OFFSET_BITS=64 here, it would be fatal to try to compile PL/Perl
-# to a different libc ABI than core Postgres uses.  The available information
-# says that all the symbols that affect Perl's own ABI begin with letters,
-# so it should be sufficient to adopt -D switches for symbols not beginning
-# with underscore.  An exception is that we need to let through
-# -D_USE_32BIT_TIME_T if it's present.  (We probably could restrict that to
-# only get through on Windows, but for the moment we let it through always.)
-# For debugging purposes, let's have the configure output report the raw
-# ccflags value as well as the set of flags we chose to adopt.
+# We selectively extract stuff from $Config{ccflags}.  For debugging purposes,
+# let's have the configure output report the raw ccflags value as well as the
+# set of flags we chose to adopt.  We don't really need anything except -D
+# switches, and other sorts of compiler switches can actively break things if
+# Perl was compiled with a different compiler.  Moreover, although Perl likes
+# to put stuff like -D_LARGEFILE_SOURCE and -D_FILE_OFFSET_BITS=64 here, it
+# would be fatal to try to compile PL/Perl to a different libc ABI than core
+# Postgres uses.  The available information says that most symbols that affect
+# Perl's own ABI begin with letters, so it's almost sufficient to adopt -D
+# switches for symbols not beginning with underscore.  Some exceptions are the
+# Windows-specific -D_USE_32BIT_TIME_T and -D__MINGW_USE_VC2005_COMPAT; see
+# Mkvcbuild.pm for details.  We absorb the former when Perl reports it.  Perl
+# never reports the latter, and we don't attempt to deduce when it's needed.
+# Consequently, we don't support using MinGW to link to MSVC-built Perl.  As
+# of 2017, all supported ActivePerl and Strawberry Perl are MinGW-built.  If
+# that changes or an MSVC-built Perl distribution becomes prominent, we can
+# revisit this limitation.
 AC_DEFUN([PGAC_CHECK_PERL_EMBED_CCFLAGS],
 [AC_REQUIRE([PGAC_PATH_PERL])
 AC_MSG_CHECKING([for CFLAGS recommended by Perl])
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 4c2e12e..93f364a 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -28,6 +28,7 @@ my $libpgcommon;
 my $libpgfeutils;
 my $postgres;
 my $libpq;
+my @unlink_on_exit;
 
 # Set of variables for modules in contrib/ and src/test/modules/
 my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
@@ -517,34 +518,154 @@ sub mkvcbuild
 		my $plperl =
 		  $solution->AddProject('plperl', 'dll', 'PLs', 'src/pl/plperl');
 		$plperl->AddIncludeDir($solution->{options}->{perl} . '/lib/CORE');
+		$plperl->AddReference($postgres);
+
+		my $perl_path = $solution->{options}->{perl} . '\lib\CORE\*perl*';
+
+		# ActivePerl 5.16 provided perl516.lib; 5.18 provided libperl518.a
+		my @perl_libs =
+		  grep { /perl\d+\.lib$|libperl\d+\.a$/ } glob($perl_path);
+		if (@perl_libs == 1)
+		{
+			$plperl->AddLibrary($perl_libs[0]);
+		}
+		else
+		{
+			die
+"could not identify perl library version matching pattern $perl_path\n";
+		}
 
 		# Add defines from Perl's ccflags; see PGAC_CHECK_PERL_EMBED_CCFLAGS
 		my @perl_embed_ccflags;
 		foreach my $f (split(" ", $Config{ccflags}))
 		{
-			if (   $f =~ /^-D[^_]/
-				|| $f =~ /^-D_USE_32BIT_TIME_T/)
+			if ($f =~ /^-D[^_]/)
 			{
 				$f =~ s/\-D//;
 				push(@perl_embed_ccflags, $f);
 			}
 		}
 
-		# Perl versions before 5.13.4 don't provide -D_USE_32BIT_TIME_T
-		# regardless of how they were built.  On 32-bit Windows, assume
-		# such a version was built with a pre-MSVC-2005 compiler, and
-		# define the symbol anyway, so that we are compatible if we're
-		# being built with a later MSVC version.
-		push(@perl_embed_ccflags, '_USE_32BIT_TIME_T')
-		  if $solution->{platform} eq 'Win32'
-			  && $Config{PERL_REVISION} == 5
-			  && ($Config{PERL_VERSION} < 13
-				  || (   $Config{PERL_VERSION} == 13
-					  && $Config{PERL_SUBVERSION} < 4));
-
-		# Also, a hack to prevent duplicate definitions of uid_t/gid_t
+		# hack to prevent duplicate definitions of uid_t/gid_t
 		push(@perl_embed_ccflags, 'PLPERL_HAVE_UID_GID');
 
+		# Windows offers several 32-bit ABIs.  Perl is sensitive to
+		# sizeof(time_t), one of the ABI dimensions.  To get 32-bit time_t,
+		# use "cl -D_USE_32BIT_TIME_T" or plain "gcc".  For 64-bit time_t, use
+		# "gcc -D__MINGW_USE_VC2005_COMPAT" or plain "cl".  Before MSVC 2005,
+		# plain "cl" chose 32-bit time_t.  PostgreSQL doesn't support building
+		# with pre-MSVC-2005 compilers, but it does support linking to Perl
+		# built with such a compiler.  MSVC-built Perl 5.13.4 and later report
+		# -D_USE_32BIT_TIME_T in $Config{ccflags} if applicable, but
+		# MinGW-built Perl never reports -D_USE_32BIT_TIME_T despite typically
+		# needing it.  Ignore the $Config{ccflags} opinion about
+		# -D_USE_32BIT_TIME_T, and use a runtime test to deduce the ABI Perl
+		# expects.  Specifically, test use of PL_modglobal, which maps to a
+		# PerlInterpreter field whose position depends on sizeof(time_t).
+		if ($solution->{platform} eq 'Win32')
+		{
+			my $source_file = 'conftest.c';
+			my $obj         = 'conftest.obj';
+			my $exe         = 'conftest.exe';
+			my @conftest    = ($source_file, $obj, $exe);
+			push @unlink_on_exit, @conftest;
+			unlink $source_file;
+			open my $o, '>', $source_file
+			  || croak "Could not write to $source_file";
+			print $o '
+	/* compare to plperl.h */
+	#define __inline__ __inline
+	#define PERL_NO_GET_CONTEXT
+	#include <EXTERN.h>
+	#include <perl.h>
+
+	int
+	main(int argc, char **argv)
+	{
+		int			dummy_argc = 1;
+		char	   *dummy_argv[1] = {""};
+		char	   *dummy_env[1] = {NULL};
+		static PerlInterpreter *interp;
+
+		PERL_SYS_INIT3(&dummy_argc, (char ***) &dummy_argv,
+					   (char ***) &dummy_env);
+		interp = perl_alloc();
+		perl_construct(interp);
+		{
+			dTHX;
+			const char	key[] = "dummy";
+
+			PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
+			hv_store(PL_modglobal, key, sizeof(key) - 1, newSViv(1), 0);
+			return hv_fetch(PL_modglobal, key, sizeof(key) - 1, 0) == NULL;
+		}
+	}
+';
+			close $o;
+
+			# Build $source_file with a given #define, and return a true value
+			# if a run of the resulting binary exits successfully.
+			my $try_define = sub {
+				my $define = shift;
+
+				unlink $obj, $exe;
+				my @cmd = (
+					'cl',
+					'-I' . $solution->{options}->{perl} . '/lib/CORE',
+					(map { "-D$_" } @perl_embed_ccflags, $define || ()),
+					$source_file,
+					'/link',
+					$perl_libs[0]);
+				my $compile_output = `@cmd 2>&1`;
+				-f $exe || die "Failed to build Perl test:\n$compile_output";
+
+				{
+
+					# Some builds exhibit runtime failure through Perl warning
+					# 'Can't spawn "conftest.exe"'; supress that.
+					no warnings;
+
+					# Disable error dialog boxes like we do in the postmaster.
+					# Here, we run code that triggers relevant errors.
+					use Win32API::File qw(SetErrorMode :SEM_);
+					my $oldmode = SetErrorMode(
+						SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
+					system(".\\$exe");
+					SetErrorMode($oldmode);
+				}
+
+				return !($? >> 8);
+			};
+
+			my $define_32bit_time = '_USE_32BIT_TIME_T';
+			my $ok_now            = $try_define->(undef);
+			my $ok_32bit          = $try_define->($define_32bit_time);
+			unlink @conftest;
+			if (!$ok_now && !$ok_32bit)
+			{
+
+				# Unsupported configuration.  Since we used %Config from the
+				# Perl running the build scripts, this is expected if
+				# attempting to link with some other Perl.
+				die "Perl test fails with or without -D$define_32bit_time";
+			}
+			elsif ($ok_now && $ok_32bit)
+			{
+
+				# Resulting build may work, but it's especially important to
+				# verify with "vcregress plcheck".  A refined test may avoid
+				# this outcome.
+				warn "Perl test passes with or without -D$define_32bit_time";
+			}
+			elsif ($ok_32bit)
+			{
+				push(@perl_embed_ccflags, $define_32bit_time);
+			}    # else $ok_now, hence no flag required
+		}
+
+		print "CFLAGS recommended by Perl: $Config{ccflags}\n";
+		print "CFLAGS to compile embedded Perl: ",
+		  (join ' ', map { "-D$_" } @perl_embed_ccflags), "\n";
 		foreach my $f (@perl_embed_ccflags)
 		{
 			$plperl->AddDefine($f);
@@ -614,20 +735,6 @@ sub mkvcbuild
 				die 'Failed to create plperl_opmask.h' . "\n";
 			}
 		}
-		$plperl->AddReference($postgres);
-		my $perl_path = $solution->{options}->{perl} . '\lib\CORE\*perl*';
-		# ActivePerl 5.16 provided perl516.lib; 5.18 provided libperl518.a
-		my @perl_libs =
-		  grep { /perl\d+\.lib$|libperl\d+\.a$/ } glob($perl_path);
-		if (@perl_libs == 1)
-		{
-			$plperl->AddLibrary($perl_libs[0]);
-		}
-		else
-		{
-			die
-"could not identify perl library version matching pattern $perl_path\n";
-		}
 
 		# Add transform module dependent on plperl
 		my $hstore_plperl = AddTransformModule(
@@ -956,4 +1063,9 @@ sub AdjustModule
 	}
 }
 
+END
+{
+	unlink @unlink_on_exit;
+}
+
 1;
#87Noah Misch
noah@leadboat.com
In reply to: Tom Lane (#84)
Re: pl/perl extension fails on Windows

On Wed, Nov 29, 2017 at 11:45:35PM -0500, Tom Lane wrote:

Noah Misch <noah@leadboat.com> writes:

On Wed, Nov 29, 2017 at 11:34:56PM -0500, Tom Lane wrote:

I don't really have an opinion about the relative merits of these changes,
but why do anything? The existing solution has the buildfarm happy, and
we've not heard any field complaints that I saw. I'm not sure we should
spend more time on supporting obsolete toolchain combinations that aren't
represented in the buildfarm.

It's the other way around. The buildfarm's 32-bit MSVC animals each use an
obsolete Perl. PostgreSQL is incompatible with today's 32-bit ActivePerl and
Strawberry Perl.

Oh, OK. In that case, we need to get some representatives of these
more modern builds into the buildfarm while we're at it.

Yep. Among machines already in the buildfarm, the one running member
woodlouse is the best candidate for this. Its owner could install
http://strawberryperl.com/download/5.26.1.1/strawberry-perl-5.26.1.1-32bit.msi
and setup another animal on the same machine that builds 32-bit and enables
Perl. Christian, are you interested in doing this?

#88Christian Ullrich
chris@chrullrich.net
In reply to: Noah Misch (#87)
RE: pl/perl extension fails on Windows

* Noah Misch wrote:

On Wed, Nov 29, 2017 at 11:45:35PM -0500, Tom Lane wrote:

Oh, OK. In that case, we need to get some representatives of these
more modern builds into the buildfarm while we're at it.

Yep. Among machines already in the buildfarm, the one running member
woodlouse is the best candidate for this. Its owner could install
http://strawberryperl.com/download/5.26.1.1/strawberry-perl-5.26.1.1-32bit.msi
and setup another animal on the same machine that builds 32-bit and enables
Perl. Christian, are you interested in doing this?

Ready to go, waiting for animal assignment. For now, I can confirm that it works, that is, the buildfarm --test run is successful.

Although I have to admit, I fail to see the need for Windows x86 builds, too. Who in their right mind would want them today?

--
Christian

#89Noah Misch
noah@leadboat.com
In reply to: Christian Ullrich (#88)
Re: pl/perl extension fails on Windows

On Sun, Dec 10, 2017 at 12:36:13PM +0000, Christian Ullrich wrote:

* Noah Misch wrote:

On Wed, Nov 29, 2017 at 11:45:35PM -0500, Tom Lane wrote:

Oh, OK. In that case, we need to get some representatives of these
more modern builds into the buildfarm while we're at it.

Yep. Among machines already in the buildfarm, the one running member
woodlouse is the best candidate for this. Its owner could install
http://strawberryperl.com/download/5.26.1.1/strawberry-perl-5.26.1.1-32bit.msi
and setup another animal on the same machine that builds 32-bit and enables
Perl. Christian, are you interested in doing this?

Ready to go, waiting for animal assignment. For now, I can confirm that it works, that is, the buildfarm --test run is successful.

Thanks!

Although I have to admit, I fail to see the need for Windows x86 builds, too. Who in their right mind would want them today?

I can't see installing a 32-bit Windows postmaster in 2018. The 32-bit libpq
might be useful. Download statistics for the binary distributions would be
informative. On the other hand, removing 32-bit Windows support would
eliminate three veteran buildfarm animals, and maintenance was cheap in the
few years before this thread. I don't think today is the day to remove
support, but it's coming one of these years.

#90Noah Misch
noah@leadboat.com
In reply to: Noah Misch (#89)
Re: pl/perl extension fails on Windows

On Sun, Dec 10, 2017 at 11:46:08AM -0800, Noah Misch wrote:

On Sun, Dec 10, 2017 at 12:36:13PM +0000, Christian Ullrich wrote:

* Noah Misch wrote:

On Wed, Nov 29, 2017 at 11:45:35PM -0500, Tom Lane wrote:

Oh, OK. In that case, we need to get some representatives of these
more modern builds into the buildfarm while we're at it.

Yep. Among machines already in the buildfarm, the one running member
woodlouse is the best candidate for this. Its owner could install
http://strawberryperl.com/download/5.26.1.1/strawberry-perl-5.26.1.1-32bit.msi
and setup another animal on the same machine that builds 32-bit and enables
Perl. Christian, are you interested in doing this?

Ready to go, waiting for animal assignment. For now, I can confirm that it works, that is, the buildfarm --test run is successful.

Thanks!

Did the animal assignment come through? I don't see such an animal reporting.

#91Christian Ullrich
chris@chrullrich.net
In reply to: Noah Misch (#90)
RE: pl/perl extension fails on Windows

* From: Noah Misch [mailto:noah@leadboat.com]

Ready to go, waiting for animal assignment. For now, I can

confirm that it works, that is, the buildfarm --test run is
successful.

Did the animal assignment come through? I don't see such an animal
reporting.

No, not yet. Sorry, I lost track of it, or I would have mentioned it again earlier.

--
Christian

#92Andrew Dunstan
andrew.dunstan@2ndquadrant.com
In reply to: Noah Misch (#90)
Re: pl/perl extension fails on Windows

On 01/11/2018 12:08 AM, Noah Misch wrote:

On Sun, Dec 10, 2017 at 11:46:08AM -0800, Noah Misch wrote:

On Sun, Dec 10, 2017 at 12:36:13PM +0000, Christian Ullrich wrote:

* Noah Misch wrote:

On Wed, Nov 29, 2017 at 11:45:35PM -0500, Tom Lane wrote:

Oh, OK. In that case, we need to get some representatives of these
more modern builds into the buildfarm while we're at it.

Yep. Among machines already in the buildfarm, the one running member
woodlouse is the best candidate for this. Its owner could install
http://strawberryperl.com/download/5.26.1.1/strawberry-perl-5.26.1.1-32bit.msi
and setup another animal on the same machine that builds 32-bit and enables
Perl. Christian, are you interested in doing this?

Ready to go, waiting for animal assignment. For now, I can confirm that it works, that is, the buildfarm --test run is successful.

Thanks!

Did the animal assignment come through? I don't see such an animal reporting.

Looks like it's still in the queue. Will approve now.

cheers

andrew

--
Andrew Dunstan https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#93Christian Ullrich
chris@chrullrich.net
In reply to: Christian Ullrich (#88)
Re: pl/perl extension fails on Windows

* Christian Ullrich wrote:

* Noah Misch wrote:

On Wed, Nov 29, 2017 at 11:45:35PM -0500, Tom Lane wrote:

Oh, OK. In that case, we need to get some representatives of these
more modern builds into the buildfarm while we're at it.

Yep. Among machines already in the buildfarm, the one running member
woodlouse is the best candidate for this. Its owner could install
http://strawberryperl.com/download/5.26.1.1/strawberry-perl-5.26.1.1-32bit.msi
and setup another animal on the same machine that builds 32-bit and enables
Perl. Christian, are you interested in doing this?

Ready to go, waiting for animal assignment. For now, I can confirm that it works, that is, the buildfarm --test run is successful.

Up and running now, name is whelk, first report on REL9_6_STABLE.

Sorry it took me another ten days to complete the configuration.

--
Christian

#94Noah Misch
noah@leadboat.com
In reply to: Christian Ullrich (#93)
Re: pl/perl extension fails on Windows

On Sun, Jan 21, 2018 at 11:34:07AM +0100, Christian Ullrich wrote:

* Christian Ullrich wrote:

* Noah Misch wrote:

On Wed, Nov 29, 2017 at 11:45:35PM -0500, Tom Lane wrote:

Oh, OK. In that case, we need to get some representatives of these
more modern builds into the buildfarm while we're at it.

Yep. Among machines already in the buildfarm, the one running member
woodlouse is the best candidate for this. Its owner could install
http://strawberryperl.com/download/5.26.1.1/strawberry-perl-5.26.1.1-32bit.msi
and setup another animal on the same machine that builds 32-bit and enables
Perl. Christian, are you interested in doing this?

Ready to go, waiting for animal assignment. For now, I can confirm that it works, that is, the buildfarm --test run is successful.

Up and running now, name is whelk, first report on REL9_6_STABLE.

Sorry it took me another ten days to complete the configuration.

This is great. Thanks.

Buildfarm metadata reports whelk using "Microsoft Visual C++ 2010", but the
run logs show it's using MSVC 2013, like woodlouse does. Would you update
that buildfarm metadata (with update_personality.pl)?