[PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

Started by Akshay Joshi3 months ago25 messages
#1Akshay Joshi
akshay.joshi@enterprisedb.com
1 attachment(s)

Hi Hackers,

I’m submitting a patch as part of the broader Retail DDL Functions project
described by Andrew Dunstan
/messages/by-id/945db7c5-be75-45bf-b55b-cb1e56f2e3e9@dunslane.net

This patch adds a new system function pg_get_policy_ddl(table, policy_name,
pretty), which reconstructs the CREATE POLICY statement for a given table
and policy. When the pretty flag is set to true, the function returns a
neatly formatted, multi-line DDL statement instead of a single-line
statement.

Usage examples:

1) SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', false); -- *non-pretty
formatted DDL*
pg_get_policy_ddl

---------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE POLICY rls_p8 ON rls_tbl_1 AS PERMISSIVE FOR ALL TO
regress_rls_alice, regress_rls_dave USING (true);

2) SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true); -- *pretty
formatted DDL*
pg_get_policy_ddl
------------------------------------------------
CREATE POLICY rls_p8 ON rls_tbl_1
AS PERMISSIVE
FOR ALL
TO regress_rls_alice, regress_rls_dave
USING (true)
;

The patch includes documentation, in-code comments, and regression tests,
all of which pass successfully.

-----
Regards,
Akshay Joshi
EDB (EnterpriseDB)

Attachments:

0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patchapplication/octet-stream; name=0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patchDownload
From 7445dc629c2139905f73a6128d4ed30597bdecb1 Mon Sep 17 00:00:00 2001
From: Akshay Joshi <akshay.joshi@enterprisedb.com>
Date: Fri, 10 Oct 2025 15:46:13 +0530
Subject: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY
 statements

This patch introduces a new system function:
pg_get_policy_ddl(regclass table, name policy_name, bool pretty),
which reconstructs the CREATE POLICY statement for the specified policy.

Usage examples:
SELECT pg_get_policy_ddl('rls_table', 'pol1', false); -- non-pretty formatted DDL
SELECT pg_get_policy_ddl('rls_table', 'pol1', true);  -- pretty formatted DDL

Reference: PG-163
Author: Akshay Joshi akshay.joshi@enterprisedb.com
---
 doc/src/sgml/func/func-info.sgml          |  45 +++++
 src/backend/commands/policy.c             |  27 +++
 src/backend/utils/adt/ruleutils.c         | 178 +++++++++++++++++++
 src/include/catalog/pg_proc.dat           |   3 +
 src/include/commands/policy.h             |   2 +
 src/test/regress/expected/rowsecurity.out | 199 +++++++++++++++++++++-
 src/test/regress/sql/rowsecurity.sql      |  78 +++++++++
 7 files changed, 531 insertions(+), 1 deletion(-)

diff --git a/doc/src/sgml/func/func-info.sgml b/doc/src/sgml/func/func-info.sgml
index c393832d94c..4b9c661c20b 100644
--- a/doc/src/sgml/func/func-info.sgml
+++ b/doc/src/sgml/func/func-info.sgml
@@ -3797,4 +3797,49 @@ acl      | {postgres=arwdDxtm/postgres,foo=r/postgres}
 
   </sect2>
 
+  <sect2 id="functions-get-object-ddl">
+   <title>Get Object DDL Functions</title>
+
+   <para>
+    The functions described in <xref linkend="functions-get-object-ddl-table"/>
+    return the Data Definition Language (DDL) statement for any given database object.
+    This feature is implemented as a set of distinct functions for each object type.
+   </para>
+
+   <table id="functions-get-object-ddl-table">
+    <title>Get Object DDL Functions</title>
+    <tgroup cols="1">
+     <thead>
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        Function
+       </para>
+       <para>
+        Description
+       </para></entry>
+      </row>
+     </thead>
+
+     <tbody>
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        <indexterm>
+         <primary>pg_get_policy_ddl</primary>
+        </indexterm>
+        <function>pg_get_policy_ddl</function>
+        ( <parameter>table</parameter> <type>regclass</type>, <parameter>policy_name</parameter> <type>name</type>, <parameter>pretty</parameter> <type>boolean</type> )
+        <returnvalue>text</returnvalue>
+       </para>
+       <para>
+        Reconstructs the CREATE POLICY statement from the system catalogs for a specified table and policy name.
+        When the pretty flag is set to true, the function returns a well-formatted DDL statement.
+        The result is a comprehensive <command>CREATE POLICY</command> statement.
+       </para></entry>
+      </row>
+     </tbody>
+    </tgroup>
+   </table>
+
+  </sect2>
+
   </sect1>
diff --git a/src/backend/commands/policy.c b/src/backend/commands/policy.c
index 83056960fe4..1abe0c44353 100644
--- a/src/backend/commands/policy.c
+++ b/src/backend/commands/policy.c
@@ -128,6 +128,33 @@ parse_policy_command(const char *cmd_name)
 	return polcmd;
 }
 
+/*
+ * get_policy_cmd_name -
+ *	 helper function to convert char representation to full command strings.
+ *
+ * cmd -  Valid values are '*', 'r', 'a', 'w' and 'd'.
+ *
+ */
+char *
+get_policy_cmd_name(char cmd)
+{
+	switch (cmd)
+	{
+		case '*':
+			return "ALL";
+		case ACL_SELECT_CHR:
+			return "SELECT";
+		case ACL_INSERT_CHR:
+			return "INSERT";
+		case ACL_UPDATE_CHR:
+			return "UPDATE";
+		case ACL_DELETE_CHR:
+			return "DELETE";
+		default:
+			elog(ERROR, "unrecognized policy command");
+	}
+}
+
 /*
  * policy_role_list_to_array
  *	 helper function to convert a list of RoleSpecs to an array of
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 050eef97a4c..6aefbd0de07 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -33,12 +33,14 @@
 #include "catalog/pg_opclass.h"
 #include "catalog/pg_operator.h"
 #include "catalog/pg_partitioned_table.h"
+#include "catalog/pg_policy.h"
 #include "catalog/pg_proc.h"
 #include "catalog/pg_statistic_ext.h"
 #include "catalog/pg_trigger.h"
 #include "catalog/pg_type.h"
 #include "commands/defrem.h"
 #include "commands/tablespace.h"
+#include "commands/policy.h"
 #include "common/keywords.h"
 #include "executor/spi.h"
 #include "funcapi.h"
@@ -13738,3 +13740,179 @@ get_range_partbound_string(List *bound_datums)
 
 	return buf->data;
 }
+
+/*
+ * get_formatted_string
+ *
+ * Return a formatted version of the string.
+ *
+ * pretty - If pretty is true, the output includes tabs (\t) and newlines (\n).
+ * noOfTabChars - indent with specified no of tabs.
+ * fmt - printf-style format string used by appendStringInfoVA.
+ */
+static void
+get_formatted_string(StringInfo buf, bool pretty, int noOfTabChars, const char *fmt,...)
+{
+	va_list		args;
+
+	if (pretty)
+	{
+		/* Indent with tabs */
+		for (int i = 0; i < noOfTabChars; i++)
+		{
+			appendStringInfoString(buf, "\t");
+		}
+	}
+	else
+		appendStringInfoChar(buf, ' ');
+
+	va_start(args, fmt);
+	appendStringInfoVA(buf, fmt, args);
+	va_end(args);
+
+	/* If pretty mode, append newline at the end */
+	if (pretty)
+		appendStringInfoChar(buf, '\n');
+}
+
+/*
+ * pg_get_policy_ddl
+ *
+ * Generate a CREATE POLICY statement for the specified policy.
+ *
+ * tableID - Table ID of the policy.
+ * policyName - Name of the policy for which to generate the DDL.
+ * pretty - If true, format the DDL with indentation and line breaks.
+ */
+Datum
+pg_get_policy_ddl(PG_FUNCTION_ARGS)
+{
+	Oid			tableID = PG_GETARG_OID(0);
+	Name		policyName = PG_GETARG_NAME(1);
+	bool		pretty = PG_GETARG_BOOL(2);
+	HeapTuple	tuplePolicy;
+	Relation	pgPolicyRel;
+	Relation	targetTable;
+	Form_pg_policy policyForm;
+	ScanKeyData skey[2];
+	SysScanDesc sscan;
+	bool		attrIsNull;
+
+	StringInfoData buf;
+
+	initStringInfo(&buf);
+
+	targetTable = relation_open(tableID, NoLock);
+	/* Find policy to begin scan */
+	pgPolicyRel = table_open(PolicyRelationId, RowExclusiveLock);
+
+	/* Set key - policy's relation id. */
+	ScanKeyInit(&skey[0],
+				Anum_pg_policy_polrelid,
+				BTEqualStrategyNumber, F_OIDEQ,
+				ObjectIdGetDatum(tableID));
+
+	/* Set key - policy's name. */
+	ScanKeyInit(&skey[1],
+				Anum_pg_policy_polname,
+				BTEqualStrategyNumber, F_NAMEEQ,
+				CStringGetDatum(NameStr(*policyName)));
+
+	sscan = systable_beginscan(pgPolicyRel,
+							   PolicyPolrelidPolnameIndexId, true, NULL, 2,
+							   skey);
+
+	tuplePolicy = systable_getnext(sscan);
+	/* Check that the policy is found, raise an error if not. */
+	if (!HeapTupleIsValid(tuplePolicy))
+		ereport(ERROR,
+				(errcode(ERRCODE_UNDEFINED_OBJECT),
+				 errmsg("policy \"%s\" for table \"%s\" does not exist",
+						NameStr(*policyName),
+						RelationGetRelationName(targetTable))));
+
+	policyForm = (Form_pg_policy) GETSTRUCT(tuplePolicy);
+
+	/* Build the CREATE POLICY statement */
+	get_formatted_string(&buf, pretty, 0, "CREATE POLICY %s ON %s",
+						 quote_identifier(NameStr(*policyName)),
+						 RelationGetRelationName(targetTable));
+
+	/* Check the type is PERMISSIVE or RESTRICTIVE */
+	get_formatted_string(&buf, pretty, 1,
+						 policyForm->polpermissive ? "AS PERMISSIVE" : "AS RESTRICTIVE");
+
+	/* Check command to which the policy applies */
+	get_formatted_string(&buf, pretty, 1, "FOR %s",
+						 get_policy_cmd_name(policyForm->polcmd));
+
+	/* Check if the policy has a TO list */
+	Datum		valueDatum = heap_getattr(tuplePolicy,
+										  Anum_pg_policy_polroles,
+										  RelationGetDescr(pgPolicyRel),
+										  &attrIsNull);
+
+	if (!attrIsNull)
+	{
+		ArrayType  *policy_roles = DatumGetArrayTypePCopy(valueDatum);
+		int			nitems = ARR_DIMS(policy_roles)[0];
+		Oid		   *roles = (Oid *) ARR_DATA_PTR(policy_roles);
+		StringInfoData role_names;
+
+		initStringInfo(&role_names);
+
+		for (int i = 0; i < nitems; i++)
+		{
+			if (OidIsValid(roles[i]))
+			{
+				char	   *rolename = GetUserNameFromId(roles[i], false);
+
+				if (i > 0)
+					appendStringInfoString(&role_names, ", ");
+				appendStringInfoString(&role_names, rolename);
+			}
+		}
+
+		if (role_names.len > 0)
+			get_formatted_string(&buf, pretty, 1, "TO %s", role_names.data);
+	}
+
+	/* Check if the policy has a USING expr */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polqual,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		text	   *exprtext = DatumGetTextPP(valueDatum);
+		text	   *usingExpression = pg_get_expr_worker(exprtext,
+														 policyForm->polrelid, false);
+
+		get_formatted_string(&buf, pretty, 1, "USING (%s)",
+							 text_to_cstring(usingExpression));
+	}
+
+	/* Check if the policy has a WITH CHECK expr */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polwithcheck,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		text	   *exprtext = DatumGetTextPP(valueDatum);
+		text	   *checkExpression = pg_get_expr_worker(exprtext,
+														 policyForm->polrelid, false);
+
+		get_formatted_string(&buf, pretty, 1, "WITH CHECK (%s)",
+							 text_to_cstring(checkExpression));
+	}
+
+	appendStringInfoChar(&buf, ';');
+
+	/* Clean up. */
+	systable_endscan(sscan);
+	relation_close(targetTable, NoLock);
+	table_close(pgPolicyRel, RowExclusiveLock);
+
+	PG_RETURN_TEXT_P(string_to_text(buf.data));
+}
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index b51d2b17379..d28039e4c08 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -4021,6 +4021,9 @@
   proname => 'pg_get_function_sqlbody', provolatile => 's',
   prorettype => 'text', proargtypes => 'oid',
   prosrc => 'pg_get_function_sqlbody' },
+{ oid => '8811', descr => 'get CREATE statement for policy',
+  proname => 'pg_get_policy_ddl', prorettype => 'text',
+  proargtypes => 'regclass name bool', prosrc => 'pg_get_policy_ddl' },
 
 { oid => '1686', descr => 'list of SQL keywords',
   proname => 'pg_get_keywords', procost => '10', prorows => '500',
diff --git a/src/include/commands/policy.h b/src/include/commands/policy.h
index f06aa1df439..40e45b738f4 100644
--- a/src/include/commands/policy.h
+++ b/src/include/commands/policy.h
@@ -35,4 +35,6 @@ extern ObjectAddress rename_policy(RenameStmt *stmt);
 
 extern bool relation_has_policies(Relation rel);
 
+extern char *get_policy_cmd_name(char cmd);
+
 #endif							/* POLICY_H */
diff --git a/src/test/regress/expected/rowsecurity.out b/src/test/regress/expected/rowsecurity.out
index 5a172c5d91c..7763f31388d 100644
--- a/src/test/regress/expected/rowsecurity.out
+++ b/src/test/regress/expected/rowsecurity.out
@@ -4821,11 +4821,206 @@ reset rls_test.blah;
 drop function rls_f(text);
 drop table rls_t, test_t;
 --
+-- Test for pg_get_policy_ddl(tableName, policyName, pretty) function.
+--
+CREATE TABLE rls_tbl_1 (
+    did         int primary key,
+    cid         int,
+    dlevel      int not null,
+    dauthor     name,
+    dtitle      text
+);
+GRANT ALL ON rls_tbl_1 TO public;
+CREATE TABLE rls_tbl_2 (
+    pguser      name primary key,
+    seclv       int
+);
+GRANT SELECT ON rls_tbl_2 TO public;
+-- Test PERMISSIVE and RESTRICTIVE
+CREATE POLICY rls_p1 ON rls_tbl_1 AS PERMISSIVE
+    USING (dlevel <= (SELECT seclv FROM rls_tbl_2 WHERE pguser = current_user));
+CREATE POLICY rls_p2 ON rls_tbl_1 AS RESTRICTIVE USING (cid <> 44 AND cid < 50);
+-- Test FOR ALL | SELECT | INSERT | UPDATE | DELETE
+CREATE POLICY rls_p3 ON rls_tbl_1 FOR ALL USING (dauthor = current_user);
+CREATE POLICY rls_p4 ON rls_tbl_1 FOR SELECT USING (cid % 2 = 0);
+CREATE POLICY rls_p5 ON rls_tbl_1 FOR INSERT WITH CHECK (cid % 2 = 1);
+CREATE POLICY rls_p6 ON rls_tbl_1 FOR UPDATE USING (cid % 2 = 0);
+CREATE POLICY rls_p7 ON rls_tbl_1 FOR DELETE USING (cid < 8);
+-- Test TO { role_name ... }
+CREATE POLICY rls_p8 ON rls_tbl_1 TO regress_rls_dave, regress_rls_alice USING (true);
+CREATE POLICY rls_p9 ON rls_tbl_1 TO regress_rls_exempt_user WITH CHECK (cid = (SELECT seclv FROM rls_tbl_2));
+-- Test NULL value
+SELECT pg_get_policy_ddl(NULL, 'rls_p1', false);
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+SELECT pg_get_policy_ddl('tab1', NULL, false);
+ERROR:  relation "tab1" does not exist
+LINE 1: SELECT pg_get_policy_ddl('tab1', NULL, false);
+                                 ^
+SELECT pg_get_policy_ddl(NULL, NULL, false);
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+-- Table does not exist
+SELECT pg_get_policy_ddl('tab1', 'rls_p1', false);
+ERROR:  relation "tab1" does not exist
+LINE 1: SELECT pg_get_policy_ddl('tab1', 'rls_p1', false);
+                                 ^
+-- Policy does not exist
+SELECT pg_get_policy_ddl('rls_tbl_1', 'pol1', false);
+ERROR:  policy "pol1" for table "rls_tbl_1" does not exist
+-- Without Pretty formatted
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', false);
+                                                                       pg_get_policy_ddl                                                                       
+---------------------------------------------------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p1 ON rls_tbl_1 AS PERMISSIVE FOR ALL USING ((dlevel <= (SELECT rls_tbl_2.seclv FROM rls_tbl_2 WHERE (rls_tbl_2.pguser = CURRENT_USER))));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', false);
+                                        pg_get_policy_ddl                                        
+-------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p2 ON rls_tbl_1 AS RESTRICTIVE FOR ALL USING (((cid <> 44) AND (cid < 50)));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', false);
+                                     pg_get_policy_ddl                                      
+--------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p3 ON rls_tbl_1 AS PERMISSIVE FOR ALL USING ((dauthor = CURRENT_USER));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', false);
+                                  pg_get_policy_ddl                                   
+--------------------------------------------------------------------------------------
+  CREATE POLICY rls_p4 ON rls_tbl_1 AS PERMISSIVE FOR SELECT USING (((cid % 2) = 0));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', false);
+                                     pg_get_policy_ddl                                     
+-------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p5 ON rls_tbl_1 AS PERMISSIVE FOR INSERT WITH CHECK (((cid % 2) = 1));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', false);
+                                  pg_get_policy_ddl                                   
+--------------------------------------------------------------------------------------
+  CREATE POLICY rls_p6 ON rls_tbl_1 AS PERMISSIVE FOR UPDATE USING (((cid % 2) = 0));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', false);
+                               pg_get_policy_ddl                                
+--------------------------------------------------------------------------------
+  CREATE POLICY rls_p7 ON rls_tbl_1 AS PERMISSIVE FOR DELETE USING ((cid < 8));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', false);
+                                               pg_get_policy_ddl                                               
+---------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p8 ON rls_tbl_1 AS PERMISSIVE FOR ALL TO regress_rls_dave, regress_rls_alice USING (true);
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', false);
+                                                                 pg_get_policy_ddl                                                                 
+---------------------------------------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p9 ON rls_tbl_1 AS PERMISSIVE FOR ALL TO regress_rls_exempt_user WITH CHECK ((cid = (SELECT rls_tbl_2.seclv FROM rls_tbl_2)));
+(1 row)
+
+-- With Pretty formatted
+\pset format unaligned
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p1 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	USING ((dlevel <= (SELECT rls_tbl_2.seclv FROM rls_tbl_2 WHERE (rls_tbl_2.pguser = CURRENT_USER))))
+;
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p2 ON rls_tbl_1
+	AS RESTRICTIVE
+	FOR ALL
+	USING (((cid <> 44) AND (cid < 50)))
+;
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p3 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	USING ((dauthor = CURRENT_USER))
+;
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p4 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR SELECT
+	USING (((cid % 2) = 0))
+;
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p5 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR INSERT
+	WITH CHECK (((cid % 2) = 1))
+;
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p6 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR UPDATE
+	USING (((cid % 2) = 0))
+;
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p7 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR DELETE
+	USING ((cid < 8))
+;
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p8 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO regress_rls_dave, regress_rls_alice
+	USING (true)
+;
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p9 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO regress_rls_exempt_user
+	WITH CHECK ((cid = (SELECT rls_tbl_2.seclv FROM rls_tbl_2)))
+;
+(1 row)
+-- Clean up objects created for testing pg_get_policy_ddl function.
+DROP POLICY rls_p1 ON rls_tbl_1;
+DROP POLICY rls_p2 ON rls_tbl_1;
+DROP POLICY rls_p3 ON rls_tbl_1;
+DROP POLICY rls_p4 ON rls_tbl_1;
+DROP POLICY rls_p5 ON rls_tbl_1;
+DROP POLICY rls_p6 ON rls_tbl_1;
+DROP POLICY rls_p7 ON rls_tbl_1;
+DROP POLICY rls_p8 ON rls_tbl_1;
+DROP POLICY rls_p9 ON rls_tbl_1;
+--
 -- Clean up objects
 --
 RESET SESSION AUTHORIZATION;
 DROP SCHEMA regress_rls_schema CASCADE;
-NOTICE:  drop cascades to 30 other objects
+NOTICE:  drop cascades to 32 other objects
 DETAIL:  drop cascades to function f_leak(text)
 drop cascades to table uaccount
 drop cascades to table category
@@ -4856,6 +5051,8 @@ drop cascades to table dep1
 drop cascades to table dep2
 drop cascades to table dob_t1
 drop cascades to table dob_t2
+drop cascades to table rls_tbl_1
+drop cascades to table rls_tbl_2
 DROP USER regress_rls_alice;
 DROP USER regress_rls_bob;
 DROP USER regress_rls_carol;
diff --git a/src/test/regress/sql/rowsecurity.sql b/src/test/regress/sql/rowsecurity.sql
index 21ac0ca51ee..75c99b01e27 100644
--- a/src/test/regress/sql/rowsecurity.sql
+++ b/src/test/regress/sql/rowsecurity.sql
@@ -2400,6 +2400,84 @@ reset rls_test.blah;
 drop function rls_f(text);
 drop table rls_t, test_t;
 
+--
+-- Test for pg_get_policy_ddl(tableName, policyName, pretty) function.
+--
+CREATE TABLE rls_tbl_1 (
+    did         int primary key,
+    cid         int,
+    dlevel      int not null,
+    dauthor     name,
+    dtitle      text
+);
+GRANT ALL ON rls_tbl_1 TO public;
+CREATE TABLE rls_tbl_2 (
+    pguser      name primary key,
+    seclv       int
+);
+GRANT SELECT ON rls_tbl_2 TO public;
+
+-- Test PERMISSIVE and RESTRICTIVE
+CREATE POLICY rls_p1 ON rls_tbl_1 AS PERMISSIVE
+    USING (dlevel <= (SELECT seclv FROM rls_tbl_2 WHERE pguser = current_user));
+CREATE POLICY rls_p2 ON rls_tbl_1 AS RESTRICTIVE USING (cid <> 44 AND cid < 50);
+
+-- Test FOR ALL | SELECT | INSERT | UPDATE | DELETE
+CREATE POLICY rls_p3 ON rls_tbl_1 FOR ALL USING (dauthor = current_user);
+CREATE POLICY rls_p4 ON rls_tbl_1 FOR SELECT USING (cid % 2 = 0);
+CREATE POLICY rls_p5 ON rls_tbl_1 FOR INSERT WITH CHECK (cid % 2 = 1);
+CREATE POLICY rls_p6 ON rls_tbl_1 FOR UPDATE USING (cid % 2 = 0);
+CREATE POLICY rls_p7 ON rls_tbl_1 FOR DELETE USING (cid < 8);
+
+-- Test TO { role_name ... }
+CREATE POLICY rls_p8 ON rls_tbl_1 TO regress_rls_dave, regress_rls_alice USING (true);
+CREATE POLICY rls_p9 ON rls_tbl_1 TO regress_rls_exempt_user WITH CHECK (cid = (SELECT seclv FROM rls_tbl_2));
+
+-- Test NULL value
+SELECT pg_get_policy_ddl(NULL, 'rls_p1', false);
+SELECT pg_get_policy_ddl('tab1', NULL, false);
+SELECT pg_get_policy_ddl(NULL, NULL, false);
+
+
+-- Table does not exist
+SELECT pg_get_policy_ddl('tab1', 'rls_p1', false);
+-- Policy does not exist
+SELECT pg_get_policy_ddl('rls_tbl_1', 'pol1', false);
+
+-- Without Pretty formatted
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', false);
+
+-- With Pretty formatted
+\pset format unaligned
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', true);
+
+-- Clean up objects created for testing pg_get_policy_ddl function.
+DROP POLICY rls_p1 ON rls_tbl_1;
+DROP POLICY rls_p2 ON rls_tbl_1;
+DROP POLICY rls_p3 ON rls_tbl_1;
+DROP POLICY rls_p4 ON rls_tbl_1;
+DROP POLICY rls_p5 ON rls_tbl_1;
+DROP POLICY rls_p6 ON rls_tbl_1;
+DROP POLICY rls_p7 ON rls_tbl_1;
+DROP POLICY rls_p8 ON rls_tbl_1;
+DROP POLICY rls_p9 ON rls_tbl_1;
+
 --
 -- Clean up objects
 --
-- 
2.51.0

#2Álvaro Herrera
alvherre@kurilemu.de
In reply to: Akshay Joshi (#1)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

Hello,

I have reviewed this patch before and provided a number of comments that
have been addressed by Akshay (so I encourage you to list my name and
this address in a Reviewed-by trailer line in the commit message). One
thing I had not noticed is that while this function has a "pretty" flag,
it doesn't use it to pass anything to pg_get_expr_worker()'s prettyFlags
argument, and I think it should -- probably just

prettyFlags = GET_PRETTY_FLAGS(pretty);

same as pg_get_querydef() does.

Thanks

--
Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/

#3Philip Alger
paalger0@gmail.com
In reply to: Akshay Joshi (#1)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

Hi Akshay,

When applying the patch, I got a number of errors and the tests failed. I
think it stems from:

+ targetTable = relation_open(tableID, NoLock);
+ relation_close(targetTable, NoLock);

I changed them to use "AccessShareLock" and it worked, and it's probably
relevant to change table_close to "AccessShareLock" as well. You're just
reading from the table.

+ table_close(pgPolicyRel, RowExclusiveLock);

You might move "Datum valueDatum" to the top of the function. The
compiler screamed at me for that, so I went ahead and made that change and
the screaming stopped.

+ /* Check if the policy has a TO list */
+ Datum valueDatum = heap_getattr(tuplePolicy,

I also don't think you need the extra parenthesis around "USING (%s)" and
""WITH CHECK (%s)" in the code; it seems to print it just fine without
them. Other people might have different opinions.

2) SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true); -- *pretty

formatted DDL*
pg_get_policy_ddl
------------------------------------------------
CREATE POLICY rls_p8 ON rls_tbl_1
AS PERMISSIVE
FOR ALL
TO regress_rls_alice, regress_rls_dave
USING (true)
;

As for the "pretty" part. In my opinion, I don't think it's necessary, and
putting the statement terminator (;) seems strange.
However, I think you're going to get a lot of opinions on what
well-formatted SQL looks like.

--
Best,
Phil Alger

#4Akshay Joshi
akshay.joshi@enterprisedb.com
In reply to: Álvaro Herrera (#2)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

On Wed, Oct 15, 2025 at 10:55 PM Álvaro Herrera <alvherre@kurilemu.de>
wrote:

Hello,

I have reviewed this patch before and provided a number of comments that
have been addressed by Akshay (so I encourage you to list my name and
this address in a Reviewed-by trailer line in the commit message). One
thing I had not noticed is that while this function has a "pretty" flag,
it doesn't use it to pass anything to pg_get_expr_worker()'s prettyFlags
argument, and I think it should -- probably just

prettyFlags = GET_PRETTY_FLAGS(pretty);

same as pg_get_querydef() does.

Fixed and added 'Reviewed-by:'

Show quoted text

Thanks

--
Álvaro Herrera PostgreSQL Developer —
https://www.EnterpriseDB.com/

#5Akshay Joshi
akshay.joshi@enterprisedb.com
In reply to: Philip Alger (#3)
1 attachment(s)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

On Wed, Oct 15, 2025 at 11:00 PM Philip Alger <paalger0@gmail.com> wrote:

Hi Akshay,

When applying the patch, I got a number of errors and the tests failed. I
think it stems from:

+ targetTable = relation_open(tableID, NoLock);
+ relation_close(targetTable, NoLock);

I changed them to use "AccessShareLock" and it worked, and it's probably
relevant to change table_close to "AccessShareLock" as well. You're just
reading from the table.

+ table_close(pgPolicyRel, RowExclusiveLock);

You might move "Datum valueDatum" to the top of the function. The
compiler screamed at me for that, so I went ahead and made that change and
the screaming stopped.

+ /* Check if the policy has a TO list */
+ Datum valueDatum = heap_getattr(tuplePolicy,

Fixed all the above review comments in the v2 patch.

I also don't think you need the extra parenthesis around "USING (%s)" and
""WITH CHECK (%s)" in the code; it seems to print it just fine without
them. Other people might have different opinions.

We need to add extra parentheses for the USING and CHECK clauses. Without
them, expressions like USING true or CHECK true will throw a syntax error
at or near "true".

2) SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true); -- *pretty

formatted DDL*
pg_get_policy_ddl
------------------------------------------------
CREATE POLICY rls_p8 ON rls_tbl_1
AS PERMISSIVE
FOR ALL
TO regress_rls_alice, regress_rls_dave
USING (true)
;

As for the "pretty" part. In my opinion, I don't think it's necessary, and
putting the statement terminator (;) seems strange.

I think the pretty format option is a nice-to-have parameter. Users can
simply set it to false if they don’t want the DDL to be formatted.
As for the statement terminator, it’s useful to include it, while running
multiple queries together could result in a syntax error. In my opinion,
there’s no harm in providing the statement terminator.
However, I’ve modified the logic to add the statement terminator at the end
instead of appending to a new line.

Show quoted text

However, I think you're going to get a lot of opinions on what
well-formatted SQL looks like.

--
Best,
Phil Alger

Attachments:

v2-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patchapplication/octet-stream; name=v2-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patchDownload
From cfc9ce4918ca05e4558104177f7d6320364a4642 Mon Sep 17 00:00:00 2001
From: Akshay Joshi <akshay.joshi@enterprisedb.com>
Date: Fri, 10 Oct 2025 15:46:13 +0530
Subject: [PATCH v2] Add pg_get_policy_ddl() function to reconstruct CREATE
 POLICY statements
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This patch introduces a new system function:
pg_get_policy_ddl(regclass table, name policy_name, bool pretty),
which reconstructs the CREATE POLICY statement for the specified policy.

Usage examples:
SELECT pg_get_policy_ddl('rls_table', 'pol1', false); -- non-pretty formatted DDL
SELECT pg_get_policy_ddl('rls_table', 'pol1', true);  -- pretty formatted DDL

Reference: PG-163
Author: Akshay Joshi <akshay.joshi@enterprisedb.com>
Reviewed-by: Álvaro Herrera <alvherre@kurilemu.de>
---
 doc/src/sgml/func/func-info.sgml          |  45 +++++
 src/backend/commands/policy.c             |  27 +++
 src/backend/utils/adt/ruleutils.c         | 186 ++++++++++++++++++++
 src/include/catalog/pg_proc.dat           |   3 +
 src/include/commands/policy.h             |   2 +
 src/test/regress/expected/rowsecurity.out | 196 +++++++++++++++++++++-
 src/test/regress/sql/rowsecurity.sql      |  78 +++++++++
 7 files changed, 536 insertions(+), 1 deletion(-)

diff --git a/doc/src/sgml/func/func-info.sgml b/doc/src/sgml/func/func-info.sgml
index c393832d94c..4b9c661c20b 100644
--- a/doc/src/sgml/func/func-info.sgml
+++ b/doc/src/sgml/func/func-info.sgml
@@ -3797,4 +3797,49 @@ acl      | {postgres=arwdDxtm/postgres,foo=r/postgres}
 
   </sect2>
 
+  <sect2 id="functions-get-object-ddl">
+   <title>Get Object DDL Functions</title>
+
+   <para>
+    The functions described in <xref linkend="functions-get-object-ddl-table"/>
+    return the Data Definition Language (DDL) statement for any given database object.
+    This feature is implemented as a set of distinct functions for each object type.
+   </para>
+
+   <table id="functions-get-object-ddl-table">
+    <title>Get Object DDL Functions</title>
+    <tgroup cols="1">
+     <thead>
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        Function
+       </para>
+       <para>
+        Description
+       </para></entry>
+      </row>
+     </thead>
+
+     <tbody>
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        <indexterm>
+         <primary>pg_get_policy_ddl</primary>
+        </indexterm>
+        <function>pg_get_policy_ddl</function>
+        ( <parameter>table</parameter> <type>regclass</type>, <parameter>policy_name</parameter> <type>name</type>, <parameter>pretty</parameter> <type>boolean</type> )
+        <returnvalue>text</returnvalue>
+       </para>
+       <para>
+        Reconstructs the CREATE POLICY statement from the system catalogs for a specified table and policy name.
+        When the pretty flag is set to true, the function returns a well-formatted DDL statement.
+        The result is a comprehensive <command>CREATE POLICY</command> statement.
+       </para></entry>
+      </row>
+     </tbody>
+    </tgroup>
+   </table>
+
+  </sect2>
+
   </sect1>
diff --git a/src/backend/commands/policy.c b/src/backend/commands/policy.c
index 83056960fe4..1abe0c44353 100644
--- a/src/backend/commands/policy.c
+++ b/src/backend/commands/policy.c
@@ -128,6 +128,33 @@ parse_policy_command(const char *cmd_name)
 	return polcmd;
 }
 
+/*
+ * get_policy_cmd_name -
+ *	 helper function to convert char representation to full command strings.
+ *
+ * cmd -  Valid values are '*', 'r', 'a', 'w' and 'd'.
+ *
+ */
+char *
+get_policy_cmd_name(char cmd)
+{
+	switch (cmd)
+	{
+		case '*':
+			return "ALL";
+		case ACL_SELECT_CHR:
+			return "SELECT";
+		case ACL_INSERT_CHR:
+			return "INSERT";
+		case ACL_UPDATE_CHR:
+			return "UPDATE";
+		case ACL_DELETE_CHR:
+			return "DELETE";
+		default:
+			elog(ERROR, "unrecognized policy command");
+	}
+}
+
 /*
  * policy_role_list_to_array
  *	 helper function to convert a list of RoleSpecs to an array of
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 050eef97a4c..61fe35590f6 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -33,12 +33,14 @@
 #include "catalog/pg_opclass.h"
 #include "catalog/pg_operator.h"
 #include "catalog/pg_partitioned_table.h"
+#include "catalog/pg_policy.h"
 #include "catalog/pg_proc.h"
 #include "catalog/pg_statistic_ext.h"
 #include "catalog/pg_trigger.h"
 #include "catalog/pg_type.h"
 #include "commands/defrem.h"
 #include "commands/tablespace.h"
+#include "commands/policy.h"
 #include "common/keywords.h"
 #include "executor/spi.h"
 #include "funcapi.h"
@@ -13738,3 +13740,187 @@ get_range_partbound_string(List *bound_datums)
 
 	return buf->data;
 }
+
+/*
+ * get_formatted_string
+ *
+ * Return a formatted version of the string.
+ *
+ * pretty - If pretty is true, the output includes tabs (\t) and newlines (\n).
+ * noOfTabChars - indent with specified no of tabs.
+ * fmt - printf-style format string used by appendStringInfoVA.
+ */
+static void
+get_formatted_string(StringInfo buf, bool pretty, int noOfTabChars, const char *fmt,...)
+{
+	va_list		args;
+
+	if (pretty)
+	{
+		/* Indent with tabs */
+		for (int i = 0; i < noOfTabChars; i++)
+		{
+			appendStringInfoString(buf, "\t");
+		}
+	}
+	else
+		appendStringInfoChar(buf, ' ');
+
+	va_start(args, fmt);
+	appendStringInfoVA(buf, fmt, args);
+	va_end(args);
+
+	/* If pretty mode, append newline at the end */
+	if (pretty)
+		appendStringInfoChar(buf, '\n');
+}
+
+/*
+ * pg_get_policy_ddl
+ *
+ * Generate a CREATE POLICY statement for the specified policy.
+ *
+ * tableID - Table ID of the policy.
+ * policyName - Name of the policy for which to generate the DDL.
+ * pretty - If true, format the DDL with indentation and line breaks.
+ */
+Datum
+pg_get_policy_ddl(PG_FUNCTION_ARGS)
+{
+	Oid			tableID = PG_GETARG_OID(0);
+	Name		policyName = PG_GETARG_NAME(1);
+	bool		pretty = PG_GETARG_BOOL(2);
+	bool		attrIsNull;
+	int			prettyFlags;
+	Datum		valueDatum;
+	HeapTuple	tuplePolicy;
+	Relation	pgPolicyRel;
+	Relation	targetTable;
+	ScanKeyData skey[2];
+	SysScanDesc sscan;
+	Form_pg_policy policyForm;
+
+	StringInfoData buf;
+
+	initStringInfo(&buf);
+
+	targetTable = relation_open(tableID, AccessShareLock);
+	/* Find policy to begin scan */
+	pgPolicyRel = table_open(PolicyRelationId, AccessShareLock);
+
+	/* Set key - policy's relation id. */
+	ScanKeyInit(&skey[0],
+				Anum_pg_policy_polrelid,
+				BTEqualStrategyNumber, F_OIDEQ,
+				ObjectIdGetDatum(tableID));
+
+	/* Set key - policy's name. */
+	ScanKeyInit(&skey[1],
+				Anum_pg_policy_polname,
+				BTEqualStrategyNumber, F_NAMEEQ,
+				CStringGetDatum(NameStr(*policyName)));
+
+	sscan = systable_beginscan(pgPolicyRel,
+							   PolicyPolrelidPolnameIndexId, true, NULL, 2,
+							   skey);
+
+	tuplePolicy = systable_getnext(sscan);
+	/* Check that the policy is found, raise an error if not. */
+	if (!HeapTupleIsValid(tuplePolicy))
+		ereport(ERROR,
+				(errcode(ERRCODE_UNDEFINED_OBJECT),
+				 errmsg("policy \"%s\" for table \"%s\" does not exist",
+						NameStr(*policyName),
+						RelationGetRelationName(targetTable))));
+
+	policyForm = (Form_pg_policy) GETSTRUCT(tuplePolicy);
+
+	/* Build the CREATE POLICY statement */
+	get_formatted_string(&buf, pretty, 0, "CREATE POLICY %s ON %s",
+						 quote_identifier(NameStr(*policyName)),
+						 RelationGetRelationName(targetTable));
+
+	/* Check the type is PERMISSIVE or RESTRICTIVE */
+	get_formatted_string(&buf, pretty, 1,
+						 policyForm->polpermissive ? "AS PERMISSIVE" : "AS RESTRICTIVE");
+
+	/* Check command to which the policy applies */
+	get_formatted_string(&buf, pretty, 1, "FOR %s",
+						 get_policy_cmd_name(policyForm->polcmd));
+
+	/* Check if the policy has a TO list */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polroles,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		ArrayType  *policy_roles = DatumGetArrayTypePCopy(valueDatum);
+		int			nitems = ARR_DIMS(policy_roles)[0];
+		Oid		   *roles = (Oid *) ARR_DATA_PTR(policy_roles);
+		StringInfoData role_names;
+
+		initStringInfo(&role_names);
+
+		for (int i = 0; i < nitems; i++)
+		{
+			if (OidIsValid(roles[i]))
+			{
+				char	   *rolename = GetUserNameFromId(roles[i], false);
+
+				if (i > 0)
+					appendStringInfoString(&role_names, ", ");
+				appendStringInfoString(&role_names, rolename);
+			}
+		}
+
+		if (role_names.len > 0)
+			get_formatted_string(&buf, pretty, 1, "TO %s", role_names.data);
+	}
+
+	prettyFlags = GET_PRETTY_FLAGS(pretty);
+	/* Check if the policy has a USING expr */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polqual,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		text	   *exprtext = DatumGetTextPP(valueDatum);
+		text	   *usingExpression = pg_get_expr_worker(exprtext,
+														 policyForm->polrelid,
+														 prettyFlags);
+
+		get_formatted_string(&buf, pretty, 1, "USING (%s)",
+							 text_to_cstring(usingExpression));
+	}
+
+	/* Check if the policy has a WITH CHECK expr */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polwithcheck,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		text	   *exprtext = DatumGetTextPP(valueDatum);
+		text	   *checkExpression = pg_get_expr_worker(exprtext,
+														 policyForm->polrelid,
+														 prettyFlags);
+
+		get_formatted_string(&buf, pretty, 1, "WITH CHECK (%s)",
+							 text_to_cstring(checkExpression));
+	}
+
+	/* Replace '\n' with ';' if newline at the end */
+	if (buf.len > 0 && buf.data[buf.len - 1] == '\n')
+		buf.data[buf.len - 1] = ';';
+	else
+		appendStringInfoChar(&buf, ';');
+
+	/* Clean up. */
+	systable_endscan(sscan);
+	relation_close(targetTable, AccessShareLock);
+	table_close(pgPolicyRel, AccessShareLock);
+
+	PG_RETURN_TEXT_P(string_to_text(buf.data));
+}
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index b51d2b17379..d28039e4c08 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -4021,6 +4021,9 @@
   proname => 'pg_get_function_sqlbody', provolatile => 's',
   prorettype => 'text', proargtypes => 'oid',
   prosrc => 'pg_get_function_sqlbody' },
+{ oid => '8811', descr => 'get CREATE statement for policy',
+  proname => 'pg_get_policy_ddl', prorettype => 'text',
+  proargtypes => 'regclass name bool', prosrc => 'pg_get_policy_ddl' },
 
 { oid => '1686', descr => 'list of SQL keywords',
   proname => 'pg_get_keywords', procost => '10', prorows => '500',
diff --git a/src/include/commands/policy.h b/src/include/commands/policy.h
index f06aa1df439..40e45b738f4 100644
--- a/src/include/commands/policy.h
+++ b/src/include/commands/policy.h
@@ -35,4 +35,6 @@ extern ObjectAddress rename_policy(RenameStmt *stmt);
 
 extern bool relation_has_policies(Relation rel);
 
+extern char *get_policy_cmd_name(char cmd);
+
 #endif							/* POLICY_H */
diff --git a/src/test/regress/expected/rowsecurity.out b/src/test/regress/expected/rowsecurity.out
index 5a172c5d91c..992c88f2e3f 100644
--- a/src/test/regress/expected/rowsecurity.out
+++ b/src/test/regress/expected/rowsecurity.out
@@ -4821,11 +4821,203 @@ reset rls_test.blah;
 drop function rls_f(text);
 drop table rls_t, test_t;
 --
+-- Test for pg_get_policy_ddl(tableName, policyName, pretty) function.
+--
+CREATE TABLE rls_tbl_1 (
+    did         int primary key,
+    cid         int,
+    dlevel      int not null,
+    dauthor     name,
+    dtitle      text
+);
+GRANT ALL ON rls_tbl_1 TO public;
+CREATE TABLE rls_tbl_2 (
+    pguser      name primary key,
+    seclv       int
+);
+GRANT SELECT ON rls_tbl_2 TO public;
+-- Test PERMISSIVE and RESTRICTIVE
+CREATE POLICY rls_p1 ON rls_tbl_1 AS PERMISSIVE
+    USING (dlevel <= (SELECT seclv FROM rls_tbl_2 WHERE pguser = current_user));
+CREATE POLICY rls_p2 ON rls_tbl_1 AS RESTRICTIVE USING (cid <> 44 AND cid < 50);
+-- Test FOR ALL | SELECT | INSERT | UPDATE | DELETE
+CREATE POLICY rls_p3 ON rls_tbl_1 FOR ALL USING (dauthor = current_user);
+CREATE POLICY rls_p4 ON rls_tbl_1 FOR SELECT USING (cid % 2 = 0);
+CREATE POLICY rls_p5 ON rls_tbl_1 FOR INSERT WITH CHECK (cid % 2 = 1);
+CREATE POLICY rls_p6 ON rls_tbl_1 FOR UPDATE USING (cid % 2 = 0);
+CREATE POLICY rls_p7 ON rls_tbl_1 FOR DELETE USING (cid < 8);
+-- Test TO { role_name ... }
+CREATE POLICY rls_p8 ON rls_tbl_1 TO regress_rls_dave, regress_rls_alice USING (true);
+CREATE POLICY rls_p9 ON rls_tbl_1 TO regress_rls_exempt_user WITH CHECK (cid = (SELECT seclv FROM rls_tbl_2));
+-- Test NULL value
+SELECT pg_get_policy_ddl(NULL, 'rls_p1', false);
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+SELECT pg_get_policy_ddl('tab1', NULL, false);
+ERROR:  relation "tab1" does not exist
+LINE 1: SELECT pg_get_policy_ddl('tab1', NULL, false);
+                                 ^
+SELECT pg_get_policy_ddl(NULL, NULL, false);
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+-- Table does not exist
+SELECT pg_get_policy_ddl('tab1', 'rls_p1', false);
+ERROR:  relation "tab1" does not exist
+LINE 1: SELECT pg_get_policy_ddl('tab1', 'rls_p1', false);
+                                 ^
+-- Policy does not exist
+SELECT pg_get_policy_ddl('rls_tbl_1', 'pol1', false);
+ERROR:  policy "pol1" for table "rls_tbl_1" does not exist
+-- Without Pretty formatted
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', false);
+                                          pg_get_policy_ddl                                          
+-----------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p1 ON rls_tbl_1 AS PERMISSIVE FOR ALL USING ((dlevel <= ( SELECT rls_tbl_2.seclv+
+    FROM rls_tbl_2                                                                                  +
+   WHERE (rls_tbl_2.pguser = CURRENT_USER))));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', false);
+                                        pg_get_policy_ddl                                        
+-------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p2 ON rls_tbl_1 AS RESTRICTIVE FOR ALL USING (((cid <> 44) AND (cid < 50)));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', false);
+                                     pg_get_policy_ddl                                      
+--------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p3 ON rls_tbl_1 AS PERMISSIVE FOR ALL USING ((dauthor = CURRENT_USER));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', false);
+                                  pg_get_policy_ddl                                   
+--------------------------------------------------------------------------------------
+  CREATE POLICY rls_p4 ON rls_tbl_1 AS PERMISSIVE FOR SELECT USING (((cid % 2) = 0));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', false);
+                                     pg_get_policy_ddl                                     
+-------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p5 ON rls_tbl_1 AS PERMISSIVE FOR INSERT WITH CHECK (((cid % 2) = 1));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', false);
+                                  pg_get_policy_ddl                                   
+--------------------------------------------------------------------------------------
+  CREATE POLICY rls_p6 ON rls_tbl_1 AS PERMISSIVE FOR UPDATE USING (((cid % 2) = 0));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', false);
+                               pg_get_policy_ddl                                
+--------------------------------------------------------------------------------
+  CREATE POLICY rls_p7 ON rls_tbl_1 AS PERMISSIVE FOR DELETE USING ((cid < 8));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', false);
+                                               pg_get_policy_ddl                                               
+---------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p8 ON rls_tbl_1 AS PERMISSIVE FOR ALL TO regress_rls_dave, regress_rls_alice USING (true);
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', false);
+                                                        pg_get_policy_ddl                                                        
+---------------------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p9 ON rls_tbl_1 AS PERMISSIVE FOR ALL TO regress_rls_exempt_user WITH CHECK ((cid = ( SELECT rls_tbl_2.seclv+
+    FROM rls_tbl_2)));
+(1 row)
+
+-- With Pretty formatted
+\pset format unaligned
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p1 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	USING (dlevel <= (( SELECT rls_tbl_2.seclv
+   FROM rls_tbl_2
+  WHERE rls_tbl_2.pguser = CURRENT_USER)));
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p2 ON rls_tbl_1
+	AS RESTRICTIVE
+	FOR ALL
+	USING (cid <> 44 AND cid < 50);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p3 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	USING (dauthor = CURRENT_USER);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p4 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR SELECT
+	USING ((cid % 2) = 0);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p5 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR INSERT
+	WITH CHECK ((cid % 2) = 1);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p6 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR UPDATE
+	USING ((cid % 2) = 0);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p7 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR DELETE
+	USING (cid < 8);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p8 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO regress_rls_dave, regress_rls_alice
+	USING (true);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p9 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO regress_rls_exempt_user
+	WITH CHECK (cid = (( SELECT rls_tbl_2.seclv
+   FROM rls_tbl_2)));
+(1 row)
+-- Clean up objects created for testing pg_get_policy_ddl function.
+DROP POLICY rls_p1 ON rls_tbl_1;
+DROP POLICY rls_p2 ON rls_tbl_1;
+DROP POLICY rls_p3 ON rls_tbl_1;
+DROP POLICY rls_p4 ON rls_tbl_1;
+DROP POLICY rls_p5 ON rls_tbl_1;
+DROP POLICY rls_p6 ON rls_tbl_1;
+DROP POLICY rls_p7 ON rls_tbl_1;
+DROP POLICY rls_p8 ON rls_tbl_1;
+DROP POLICY rls_p9 ON rls_tbl_1;
+--
 -- Clean up objects
 --
 RESET SESSION AUTHORIZATION;
 DROP SCHEMA regress_rls_schema CASCADE;
-NOTICE:  drop cascades to 30 other objects
+NOTICE:  drop cascades to 32 other objects
 DETAIL:  drop cascades to function f_leak(text)
 drop cascades to table uaccount
 drop cascades to table category
@@ -4856,6 +5048,8 @@ drop cascades to table dep1
 drop cascades to table dep2
 drop cascades to table dob_t1
 drop cascades to table dob_t2
+drop cascades to table rls_tbl_1
+drop cascades to table rls_tbl_2
 DROP USER regress_rls_alice;
 DROP USER regress_rls_bob;
 DROP USER regress_rls_carol;
diff --git a/src/test/regress/sql/rowsecurity.sql b/src/test/regress/sql/rowsecurity.sql
index 21ac0ca51ee..75c99b01e27 100644
--- a/src/test/regress/sql/rowsecurity.sql
+++ b/src/test/regress/sql/rowsecurity.sql
@@ -2400,6 +2400,84 @@ reset rls_test.blah;
 drop function rls_f(text);
 drop table rls_t, test_t;
 
+--
+-- Test for pg_get_policy_ddl(tableName, policyName, pretty) function.
+--
+CREATE TABLE rls_tbl_1 (
+    did         int primary key,
+    cid         int,
+    dlevel      int not null,
+    dauthor     name,
+    dtitle      text
+);
+GRANT ALL ON rls_tbl_1 TO public;
+CREATE TABLE rls_tbl_2 (
+    pguser      name primary key,
+    seclv       int
+);
+GRANT SELECT ON rls_tbl_2 TO public;
+
+-- Test PERMISSIVE and RESTRICTIVE
+CREATE POLICY rls_p1 ON rls_tbl_1 AS PERMISSIVE
+    USING (dlevel <= (SELECT seclv FROM rls_tbl_2 WHERE pguser = current_user));
+CREATE POLICY rls_p2 ON rls_tbl_1 AS RESTRICTIVE USING (cid <> 44 AND cid < 50);
+
+-- Test FOR ALL | SELECT | INSERT | UPDATE | DELETE
+CREATE POLICY rls_p3 ON rls_tbl_1 FOR ALL USING (dauthor = current_user);
+CREATE POLICY rls_p4 ON rls_tbl_1 FOR SELECT USING (cid % 2 = 0);
+CREATE POLICY rls_p5 ON rls_tbl_1 FOR INSERT WITH CHECK (cid % 2 = 1);
+CREATE POLICY rls_p6 ON rls_tbl_1 FOR UPDATE USING (cid % 2 = 0);
+CREATE POLICY rls_p7 ON rls_tbl_1 FOR DELETE USING (cid < 8);
+
+-- Test TO { role_name ... }
+CREATE POLICY rls_p8 ON rls_tbl_1 TO regress_rls_dave, regress_rls_alice USING (true);
+CREATE POLICY rls_p9 ON rls_tbl_1 TO regress_rls_exempt_user WITH CHECK (cid = (SELECT seclv FROM rls_tbl_2));
+
+-- Test NULL value
+SELECT pg_get_policy_ddl(NULL, 'rls_p1', false);
+SELECT pg_get_policy_ddl('tab1', NULL, false);
+SELECT pg_get_policy_ddl(NULL, NULL, false);
+
+
+-- Table does not exist
+SELECT pg_get_policy_ddl('tab1', 'rls_p1', false);
+-- Policy does not exist
+SELECT pg_get_policy_ddl('rls_tbl_1', 'pol1', false);
+
+-- Without Pretty formatted
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', false);
+
+-- With Pretty formatted
+\pset format unaligned
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', true);
+
+-- Clean up objects created for testing pg_get_policy_ddl function.
+DROP POLICY rls_p1 ON rls_tbl_1;
+DROP POLICY rls_p2 ON rls_tbl_1;
+DROP POLICY rls_p3 ON rls_tbl_1;
+DROP POLICY rls_p4 ON rls_tbl_1;
+DROP POLICY rls_p5 ON rls_tbl_1;
+DROP POLICY rls_p6 ON rls_tbl_1;
+DROP POLICY rls_p7 ON rls_tbl_1;
+DROP POLICY rls_p8 ON rls_tbl_1;
+DROP POLICY rls_p9 ON rls_tbl_1;
+
 --
 -- Clean up objects
 --
-- 
2.51.0

#6jian he
jian.universality@gmail.com
In reply to: Akshay Joshi (#5)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

hi. I still can not compile your v2.

../../Desktop/pg_src/src1/postgres/src/backend/utils/adt/ruleutils.c:
In function ‘get_formatted_string’:
../../Desktop/pg_src/src1/postgres/src/backend/utils/adt/ruleutils.c:13770:9:
error: function ‘get_formatted_string’ might be a candidate for
‘gnu_printf’ format attribute [-Werror=suggest-attribute=format]
13770 | appendStringInfoVA(buf, fmt, args);
| ^~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors

Maybe you can register your patch on https://commitfest.postgresql.org/
then it will run all CI tests on all kinds of OS.

row security policy qual and with_check_qual can contain sublink/subquery.
but pg_get_expr can not cope with sublink/subquery.

see pg_get_expr comments below:
* Currently, the expression can only refer to a single relation, namely
* the one specified by the second parameter. This is sufficient for
* partial indexes, column default expressions, etc. We also support
* Var-free expressions, for which the OID can be InvalidOid.

see commit 6867f96 and
/messages/by-id/20211219205422.GT17618@telsasoft.com

I guess (because I can not compile, mentioned above):
"ERROR: expression contains variables"
can be triggered by the following setup:

create table t(a int);
CREATE POLICY p1 ON t AS RESTRICTIVE FOR ALL
USING (a IS NOT NULL AND (SELECT 1 = 1 FROM pg_rewrite WHERE
pg_get_function_arg_default(ev_class, 1) !~~ pg_get_expr(ev_qual, 0,
false)));
SELECT pg_get_policy_ddl('t', 'p1', true);

You can also check my patch at https://commitfest.postgresql.org/patch/6054/
which similarly needs to build the POLICY definition for reconstruction.

see RelationBuildRowSecurity, checkExprHasSubLink also.

#7Akshay Joshi
akshay.joshi@enterprisedb.com
In reply to: jian he (#6)
1 attachment(s)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

On Thu, Oct 16, 2025 at 2:45 PM jian he <jian.universality@gmail.com> wrote:

hi. I still can not compile your v2.

../../Desktop/pg_src/src1/postgres/src/backend/utils/adt/ruleutils.c:
In function ‘get_formatted_string’:

../../Desktop/pg_src/src1/postgres/src/backend/utils/adt/ruleutils.c:13770:9:
error: function ‘get_formatted_string’ might be a candidate for
‘gnu_printf’ format attribute [-Werror=suggest-attribute=format]
13770 | appendStringInfoVA(buf, fmt, args);
| ^~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors

I’m relatively new to PostgreSQL development. I’m working on setting up the
CI pipeline and will try to fix all warnings.

Maybe you can register your patch on https://commitfest.postgresql.org/
then it will run all CI tests on all kinds of OS.

row security policy qual and with_check_qual can contain sublink/subquery.
but pg_get_expr can not cope with sublink/subquery.

see pg_get_expr comments below:
* Currently, the expression can only refer to a single relation, namely
* the one specified by the second parameter. This is sufficient for
* partial indexes, column default expressions, etc. We also support
* Var-free expressions, for which the OID can be InvalidOid.

see commit 6867f96 and

/messages/by-id/20211219205422.GT17618@telsasoft.com

I guess (because I can not compile, mentioned above):
"ERROR: expression contains variables"
can be triggered by the following setup:

create table t(a int);
CREATE POLICY p1 ON t AS RESTRICTIVE FOR ALL
USING (a IS NOT NULL AND (SELECT 1 = 1 FROM pg_rewrite WHERE
pg_get_function_arg_default(ev_class, 1) !~~ pg_get_expr(ev_qual, 0,
false)));
SELECT pg_get_policy_ddl('t', 'p1', true);

The above example works fine with my patch
[image: Screenshot 2025-10-16 at 5.08.10 PM.png]

Show quoted text

You can also check my patch at
https://commitfest.postgresql.org/patch/6054/
which similarly needs to build the POLICY definition for reconstruction.

see RelationBuildRowSecurity, checkExprHasSubLink also.

Attachments:

Screenshot 2025-10-16 at 5.08.10 PM.pngimage/png; name="=?UTF-8?B?U2NyZWVuc2hvdCAyMDI1LTEwLTE2IGF0IDUuMDguMTA=?= =?UTF-8?B?4oCvUE0ucG5n?="Download
�PNG


IHDR�Rw
;>iCCPICC ProfileH��WXS��[R!�RBo���RBh�w!	J�� b/�
�]T����(v@���E��e],��7)���������������3��@�W,�A5��Kb��c�S�@d������Y���������-����2��������@�!N���r!>^�K� �x���b�hK`�/�����4�'���eC�Y���d�v��^�P���I��Pg@���;�q*�6�F�L����N��4��4���!������y����3����H}X���)	�����N��0V��W����|�=�(5S���G
yyl�3����!�A���p%��.�@WZ(���C��"A^`��f�dr��Z�.a����D�W���4;����)�(�1����$��[#!V��1/;.Li3�(�9h#������8V 
�W�c���X�}In��|���BN����Q�k�q����`W"V��� ol��\���@���n�(!N��A����S�9�J{�L�,�� v�+�S�����T������xE�xQ74Z��6 �5
LY@��[��=A�$ ����$��k(B$yC����P��C���������)�� ��{�|�h�["x�?�sa��xs`���{~���� �d������@b1�D��
p��W?X�q&�18������6�c�MB;��$�<�OQF�v���E�������+��{Cu�����w�~X�/��
Y�2nYV?i�m?<
����R�Q�(6?�T�SsR�����(bM�7{��g�����m����"� v;�]��a����������'��5�-VO6�������e2��������/_P({G�d�4�0#3���_�#�9�`8;9� ��(^_ob��
D��;7��O����`�;��G�s6L��P���TR��p����p��c`l�|���~ ��(��D}&\�0�sA1(��P6��`'��zp���ep�����/@x>#BBh�GLK�qF����#�H2��d "D��@�#��J���T#��#�i�"���E:��5�	�PUT5B���(e�ah<:�@��E�t)��Bw�u�i�2zmG_���T0]�s����R�tL���J�2�
���s���c��G���q�Wp����)�,|	^�����f�:�����4�!���I��2S	��2�v�a�Y�����D�.����b21�8�������x��F�$��H$}�=��E���I��������k�.��
���L"��E�y�2�.�	�5�3�g����I���)�(�(�(��+�.�g�&���M��fQ�R�Qk�g��oTTT�T<TbT�*sT���S�����QUK�N��:^U��Tu��)���oh4����B��-�U����>����8j|��jjuj��^�S�-�Y�������_Q���hXi�5��4*4�h�����k������\��K��f�I�J+P���@k���N:F7���<�|�6�Yz�6Q�Z����]��G�U�OGK�E'Q�P�B��N�.�k�����]�{@����aF�X���vm�{��z~z���z7�>�3����W���?4�
�b�l48k�;\{��p������3D
�c
�n5l1�726
6�7:c�k�k�g�e����q�	���Dh�����s����a�c43�L
MCL��[L[M?�Y�%��3�k���j�4O7_m�d�gaba1�����%��i�i�����{+k�$��V�V��z��"��64_�)6U67l��L�l�
�W�P;W�L�
�+������~�}����U#n;�:�
j:u��9�;�i12e����G~sru�q��t����Q�F5�z�l��s�p�1�6:h���
�_���\6��q��F�.tmr����&q�u�q�pOu�t���fF3�0/x<�=f{�������y��//�l�]^�c���l��m���������I�����k�����}�g�������e��b�f��w������d�d�
��JZ���e���O>B	Yr�c��q�9}���3C��T��������K�#����U"-#E��Q ��*�a�u����1���������bg�����M���.�?~Y���iBS�z������II+����;s��d�darC
)%1e{J���qk�u�w_<���	�.N4��3��$�I�IS	�I��R�p��U��4NZeZ��[�{�������+����W�wgxg������,������WY!Y���gGe���I���K�M�="�e��'O.��&����xNY3�O&����M�k���?�-R�/������S�,�,�L���x���������y��f���;�c&k��Y���YM��g/��5'x������s��4o������7.0Z0gA�/����K�o/�Z�i�H��u����+��\*u*-+��������~]����������m\N\.Z~k����+5W��\��n5cu���k&��X�R�i-u�tm���u
�-�/_��<��f���J�����7�7\����v����M�67��������l+qk���������[�v�������h�������z���e5h���g���W��i�u���Wwo�>�O��������h:�<X{��P�a���:�nZ]_}f}{CrC���#M�^���:�q��X�q���NPO,81p��d�)�����;�&5�?3��������ag/�:w�<�����]��x��R�e��u-�-�w��p�[k��+
W=�6��i;q�����������|3�f���[wn���~���n��W�
�}�?��A�C��e�U�a���v���-�����u�x���K�����e�L�Uw;w�	���|�����{���������C����7��������%o���x����?�����w���|����#���OI��}����e�W������=�s%\��+���������u���'/���*G�?a�Q^�����1����6�����W@4
�x��=T�j�s���9`s����4�o����C�?�@��~n���|T����eXIfMM*>F(�iN����x���RASCIIScreenshot~�)�	pHYs%%IR$��iTXtXML:com.adobe.xmp<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 6.0.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:PixelYDimension>594</exif:PixelYDimension>
         <exif:PixelXDimension>1964</exif:PixelXDimension>
         <exif:UserComment>Screenshot</exif:UserComment>
      </rdf:Description>
   </rdf:RDF>
</x:xmpmeta>
��+�iDOT)())���	>@IDATx�}�]E���	=$��{���]zGzP�~v��O�X�H��A����w��z�������=��������������93�7����[j���R_��Z����6��B��@��s������RE��m�*�{T�	j��X�Uy�����F��G������(
���5a!g��3��m}k�$&X�^mm����N3��/��W}l��>�5s���_:��[��������4�n��-|��&o�#X3w�����6������M�D��w�m��>6y[����w��N��V��6�n�$:���h_�����������t�M�z���w�'�i���E[���M��G�f��]��m����
��>�N3��/��W}l��>�5s���/�h��^mm���It�y7|���c�����;��D�n�jk���O��������U����`�����K'�t�W[~7}�f�
_������m}k����_:��[��������4�n��-|��&o�#X3�������+aVU7�:W�Yfq�hS9B��4�y��R���"p����0#��CzK�P����+�zclE��L$$�i43�5~��z$���J�?�������U����u��_Q�<4�?��_KS2'@e�5RQp��Z��d������D�1����Me�%�j�.�����J�e���S7(�f�uMe�M\�'��I�s&��N��d���F���KL�]��$��9��_�lL2�Sr#Te�%�j���_��d�����S6&��)����S�D��/�B2c����)�L���UYy��Z����d!�1gr����I�|Jn�����T-�u�K����3��u��$S>%7BUV^b�����%YHf��\�:ec�)���*+/1UKt]��,$3�L���1��O��P�����%��I�s&��N��d���F���KL�]�?���l������k��L���*����XQ��10]c�BD��Y��@}m�����t/E:,�x2�5��W�S;�������@����i��
����v)8j%86������(�8c���w�������O����m8c��������?c�m�E~Gy�����q��������D�o��Q��3&������q�3&?��[�w��������?�����O����m8c��������?c�m�E~Gy���N��X�)�p)�
��`sD��
�n�1��wBW	82��y��|�^�g�-j�Z8 �u#lcQ�D����
U�@�	U��-���Tb����D�V���Oc�U�n��N��'����]^	��O���w�o�?����/Y���$�]_����HZ��������5K����?��'y�$���J����Xr�K)��u�����������y���W���'�����������2�6���p���s�2��^%��<M�����q��������O�(Ij����?[����� �F�X[{R"�_u���:�i��3�,YRk$8[�&x�����7 ���'�Y����5�����6�����#����M�������.��\�'���Bjs�|���7!��M��fr�k��ZL�)����.��I6���?�8�7������V���d*w ���8��o�p����4\���
�����,�r����1��6�����C�&���K�d�C��d��')��q��V�l�+n&��4G�\�Lf9�,K��q����_���\�L��oV��_�GnC�39�,K��ce+kn��d��g'}���������L)��)�X�����d#Y����I����'y�6d:�C��tJ:V����'�HVnfq�7����_��8��2�q����U)�{��9.{�eCu{I(��r�M<�]�.��6u3�����B���"����������Z����5'~
w,�������7�[���:�_���SBm��!����_����5��/�h����Z�r�s�3�q��z�0T�������������
��I�_}���7��Ma��__si��m�6]*a������m�����u���H��m���R	s�����on[�}���|���'�����
�fK%���?�k��������TWT�t�V��F�f��p�G��*hpb�^]"qAbS�A�n���j�*b�E%�E��P�$Q%��Fh�j�d�V�����������Hw�o��3��������;����j��Q&���M<�3�'�?�?����vAS��Y��������[�5����#�HJ�s{����_|������
�������Za��������#�HJ�s{����__}�������
�%���/���/�\S����#�HJ�s{��_�-��������]��"�z�6)�)��
���V[M(�n����t8v����Z?HS��������T�j���\���B���h���c�j2��k(ia7������r����)3��3w��L\�r��V�����?D)�?�r{1I�����_����\���)+���[~�7~����g��{�",�?�|N������q�c�B��F�g!N����d��7��ne�����_����#�������f����������\g��)+_|�����e�)vXA���o,u@���;�i����*j���,TF�b
�z�,�-�S�����oT;��bR���z�S��� $�S�c��?�m�9^��LrzV�gN��l&��m������c�r:�e������������B�����_[��c�s=�,������?������Fz�f�`����C����Qg��__}����s��}�������__}��?�<�#�e����?��������o�_m�
�Y�����f|x@�n\Nhu
�E=MBIjC��$,5G�"p8��&^9��
�>%���b�>��B$�����N%V�r����j�L� F'��x�#��]�"\�#�O�s����7�k����0JP�)���BJ�~Y_��s�'��Z	Ju�
��`�3��M&�$_����z����Cv��	m)����*0g*���A���G5���_������%x�Y5X�L�������F�����?����"���XTW�XYj�
��|�19�<�}�����������\O�7�l���]�\��a�D?����N����9��;\o��l-.L�
,��������\J�s;q�����Eh��������`�3�|���g���+A{���?�C��H�Z���CUf4��RJ�+E�p�+��=k��)[*�Z������G�^c��b�n5�H���1����5��)��a����eS7e��aVH}
U�lw���\���$]����]�?J'�bYN2%����#�����"���w��~���p���cR�W-[��l��XB���2K�r�s��m����u����$��{�T.�EA����������\7����u�+���k�3sh*��D�m,�����o��������L�5��94��i��R������\���|��'���EU�
��E���}��6�b��0
�c��K�}�de��2Q��mh��4����j���(�E��$���[��6O�V=�O�|*�D��c$�����h�m��m���q�������%��^���[���7u�s�s�����js�C	t�-���z��4����j��.����.��:����V����\�\���r�`e_�|��&0u������^���Y�n�]�\�\�z���%���:������Mo�J���w[���������1����P�|�?��V;��y������b�^Z\���D��8���UXt*{�T�p�v����2e��E,�V|��yU��O�WoB,�T
,
����G��6�H��_�#5K,�k*����_�
��<k�G��s����?�0i�t������%+�U3������|�[n�r#_#�������O�����tE~��������__�~"y����$\�����?���5$��_���
����__}���Wk��}F�V�_.�����I#��$(9�~�8&G�?�����$����bXN�F�9����__�#����^9�;�u���^�9�#*Y���vb�PW
u�
`����z�XJ�?����&7�%9-��&�T�Q��T�W4s�q�������y�F�������g^��W`�����%���/��Tn�[��0�������W���������D��4��~\�J�����?���W���������D����Tx�6��7s��������������j���W��$���\I�'h�.x3����__}�M~��__�����uTIvR����Y���{�����@���y�b�V	��s�X7&Z��6B&j7s��Q�T�n��V��vn�[���vjS�����=J�"����*SN����q������"�G�R.��X���_�IR���Jx)[�R�J%���\t	��������4]��H�-u����/i�J���.�O�aVv�����O�nd'�+�K�����o��J���IzE������u��������R���u���C�RG�5e�^je�����6�Fv"����8���&�P��jM��W�Z����_��M�����h/%��_��I;T*u�ZS&��V�,��x�5���G��eh�OlKB`Um����qU�L4�
$�X5�1S�6`���������&Ri\F�v�������)C9��[�+�(�F�:�x%��j{����_�)�9���_��d��	����'o���d�)W�J�f]}�'��%���?��0I���,�����#������?]�\�\�h-)%���+�J�f]}�'��%�?�?�?���;$���L�3��_�OyN��������ZKJ�v:����YW_��j{��������/��w$?�`�Lp����S��m+��q������R��N�2�o��Wy��^r�s�������)�J�J� .R�J� ��������!�&��?~kd%e�W��.�c�[�5n�V����B��p*���
�A�,7t�U^��<�����6�`�k�u������e�M�mp���b��<�����6�`�k�u������e�M�mp���b��<�����6�`�k�u������e�M�mp���b��<�����6�`�k�u������e�M�mp���b��<�����6�`�k�u������e�M�mp���b��<�����6�`�k�u������e�M�mp���b��<�����6�`�k�u������e�M�mp���b��<�����6�`�k�u������e�M�mp���b��<�����6�`�k�u������e�M�mp���b��<�����6�`�k�u������e�M�mp���b��<�����6�`�k�u������e�M�mp���b��<�����6�`�k�u������e�M�mp���b��<�����6�`�k�u������e�M�mp���b��<�����6�`�k�u������e�M�mp���b��<�����6�`�k�u����,`�	� 0�cE�#$=�J���Rg���(2C��W�����i	`>����	^��h�O��cE��b�
��yjSS�E�hZ��ey��Lc��-�n�gI����������Y-S��e^�t��V.K��R+e�)G}���U.x��4]�.�?����bJ[��H>���Ev�\�</i�<���(qs*��d��O��t"�����T�sy�
������2�?�?y�dwf���&lj�����7�%��JYI���}�������f���r����������Q��*<���I�d��</N)�\�.�1�?_d%�����fS����6�����������������`k��?������z��_��#/��JYLO���_�����wL7�)e.�����a�����- m���C�[�T;*Eu�8CD�}�4�4dd�k&U1���1kWo��9��)R)��khN�t��F�
����u�m�m���RN��1��������D19I�y.O�7��B��s|�*�:����������v(����n�C�_��^/�����q���������59�`9�^4����q���'��?��;�kr|�rz�h��q�����O�/r��w�������z�p���������_��������������������?����I/�!_�����Ec��O#`M����������T�^�������G��t�#i��=
���H3����I�["_��u����P3�C<����$
G0�4s�w���Vg0?��AK���%������I�z0�����w��}�!:��\��n�q�����>��i�#I����q������~��p���������O�������4w���?����������V��E	�k�����_��K6�_N�\���&���������_���������+��RI�QT���t�}]��:L(��[��zEh2�Q|��s
f�
����������*�������S|Dh���/��%�s����������6�
�X(�������n�?�f��Z}x�}����W�^xcT1[I%�n�[.�X���W���G���Q"K9��x�54u����	�%���G+l�*�#������4�$����Z�������9���m����Q�������:�������IWz�<�y^v������v�~�-���M��J�����������G+I��[���0���i���Z"�$X�7��K�����u�k����j�!�<M�S%���_�+��������d3��fr���)}��Ir��J������q������l&�����<M�SM���V�&�&��)vXQ�8��u�w�B��M.��7���|���E���4J���g�eB�vX�E���H�4X�O�+�f�
`lk�DYt2����"���+��l|M^j�sQ�g���}���v�M����p�_�3M58����������p��A�?�=V[>���rQ����p��w��5�/yQ��������S
	�4]�v�Aa�AS��?�$���{��G����N%)��	��e��l�_k�y����$o���_7<2���e	�Z���N.��a�;�c��N
��|��L�j����������/�s����=����s�������5=F��Z%����)W�PZ�������w�w�w�����������?�q���������������?5�������&���������i\:�����o�?�c���8���������b��uZ�`�-���9�����X�0<3n�I��9d���\x��#��'{5S-��A�!C����F�1P3�����L�.)�q��QO�['�D�#�{c�%�8C�������������8��g�].��������/a�5�G��|��X�&'B���4����w�0/��Q�������a��������_9����<|c�U���cA��UZ�/<��ka�c�!��L����^>�7���a$�������1��gi�����<8���.���T.<�|����m�������`���O<'������@�JF�����5��v�����5��3d:��;�Q�������Y��d\�X�������o���0��M�����������M���M�����D���������@�#�V��,Eu�r\���M�R_���ID�4I����5�p�����S�u�������=4mE��~m$\A|�m������^��5��$~�1�G~�r�kk�v>���AP��
V�m9 v
�"n��`�����
�����P4����������+��O��F���S�F�'�`���7G
Y[���
��&��.t�C�mm����
��������]t~�)=:lx�����O�{G>ux��W��G����m>�n���^�������? U��C0��.����
������
���l� �������'���a���R��\�7���I�'a�����{8�?9u���������v[yY�/Y���5�|������L:�D��}v��JSF���Z���'�C%7��|�������{8�7��=�tVx����)�Lo3P�����fB���������%#]���nG��U��2���{���u������oB���_�6���s�s����J���,w����.�����#���q�����O�T��G�����p���������r�P���S.�<ok�������ZGg�f3������5_`T�A`����e�`s�rc�^4\A��N�W��I�L��Y�_����&�D��YdK-�|��?�����\/���<VX��#�;�t�_��s%�%:5����������5�+�����=/'9��O��O����������=/�~I#����'�(\�����L.�������",8���O{l~�
��[����?�yg�6���"���B�����9���O
)%��L��������a����?<|���e��y������?��-���#�����p���F�3�CP���^
��x�X�����������7�I����/��V������}B:�V���aX�=��4�����I�'����k~�u�n[���MU��N�)egp�o>�o�v�y(��_vC�`4w��)�(�S{������8p�d�����G^s3J��=	O��5�3���|�n��s��u�?��]����o��?�q���r��u��_��G.�����M^�wd�_�g
��O�����>����������%��?���_��O�H�y9yX����O����_������3X��C^O~$o��9�O���������_���G�+�_m�����z|����qA����Xgy@\���j����5��P����4���*�y��oQ��1n�_>����a[^�|����(�� }>��Y�}����{Q�y����-�@���k�	|���M�>��#��Yn�D���w�=����n�0|�����%�Z��:������z�2���Z��e��8W=���Q��7���9/7��z>����K-������;������cK9���[PkP�3/�k���Q�9��Oi������yx�q��"�|�yy������r�y���??��g�i����%������wy��?+��g��c$uB���=K]��y�qhc�����r���>���n�.�W�r�����fE�����:��{����O�LnI����q�c~�����r���s�f9�9y����������/z�s���{�Ik���$���������;�m����M���������?-�J0�:t�0d���4�z��Wb0��0�f������k��]�����X%s��a��S�������SO1Ex�����#G�'_y=�z��
[/y�K;�I&�(,?�la����S
#`��o�#�'�h@X������vh��G��E����D�cm)}���?��!�Q!��p���a��g�w����3Lgw��������3L5e�w�rVL���/�w��t���3�Eg�	� ��|��������<p*�>����9���}m�;q�y��
����v�����#��B~x=�72L��m���nxdD<���6�p��������r.7�1z����+����y/lr�����_��t�p;v��w�y]�<���k���6%�����?��|������=
���@x?��R�����<Ex�5�k�����'������_��F���G��Z��sH�����w��i��u�?�y��
_[g�����2\r�C��M�M��
�@�0?,4yx��Q��7��������W��A�������G��?���\����W7<�$�����\������?���p������&���#�y�0?v��|��?���������g��r�L��?`���j��/���}{��)O�`�&��d���C���#W���f�&L:��5�W��_|��H��<Ean���}�����i�Yf��<}������=�Bx8�m������$
�����8]2�d�~�-�����m#�	o���y������.�+���#���_���1/��a>�0GJ��5��L�Z�������\O��������k#�:�\?������oC~�`����O�ObG���C�����S�����#/�2F�3N5����?4L�u����~�2���osH��r���?L��c�aC���K�iO�{�g����u�T����������0EK��9���ox����_��2���2s��-KrY����G�Q���s�?�?zK�M	&mq�����B)�������N$���VX��%��������~k�(Ov�����_����3X�����O�D���9�����f�;���gy/���*��S��f����o�~q�l��c�x�I'�����D���<����>>~�CL}zL��;X������U�W;������p��w�
$G�@�`�������*I��>zr�S��o�r~��V�o�0�.�.�0��C0��p���!`+>6N��{��O ����N��1�/��\�?}o|��0��u�e+A�0�����O6i8��;��y2�����/
!h��
���>K}��W]���~�S���k�;T)o�7�����S�vw8���b��d#�6Zb���Z�����2(��/��#p�|��I[>��1@����&0�{����w;n�q�i$bM��!���F�������a���_<��xtw�������S����
���c�8��
�y'����b�� 8���7�����N87l��b�s���l=��y��?����	*I����L�7[f�0��C@�?}��I��(�n7���T�gl������V\2L��"������}�C�	��.�5�|������?f��0�����bX6��6����GZ��n�3�x�����E���N��]a��K�!�Y�?j������}1���|6�
�^�|�Y����]d�����x���������_z]���G�i���7G�h��k��	3�������R�?�4~C������jM���3iF�t�YfGW�<F���s���3���[
>iE�&7P��y�����k���6a|�c.�?���q���5zT�1J����	���A��N������h��F�a�9���k��i�X������}�6�/��D�Z�?�4�~�?������?��/��<����Y`��G`�H���n�,S�C�<p���'��������y����~w��1�������B�Db�?��GW��rW8���[D|,60�������4���Rx���XsO��p���8�h	��R�Wo��{��~�6aw��v�����X=��7���9[�_��HG�lg�I��f�	�����a��V�|6�Ygr�&�����������?�<��';*K�v���|q�s�k���'�s�<*U����:S��������?M� �����<:��G��u�&�?�����i���<�������<���35���q�����O�/��y�?�N���lg�������
X����n��n�N���FS����
B \Q��������/��~��,4����-7�&�$���xX7+�L��!X�U��}�oc�g�!�q�M��'�H����Sc��R���7����1g��S���o��������N@6�^��c���{���wg��ED$b.�h}H��7>�8�\�����CQ=��{��8��%�1��~5�~,���TG���
2�#��@��>��r�9���B���]�@P|`��/���/��4�x����Q��H���NU��p���
`��x%���s�.�����$�Sg��hXi4�������Q���IG\�����_9ak,4�2�<��o�=���hJ�a9��������%���Z���|3|�����x�;>���O����{�q�4�����~��xo�^��IS�c����7�n���-�m��?�7���N8x���V�.�DO�����t���P�<�a\�������@�T�������w?P��?\�������b^�4;uZ��J��|���o�^���j���������"���g�U�ILu��y�p��[��u��x7OE��.�Xu�X'��Up�6�����3T����/��������{�������3�H�5�\���k��[�z(�o����:�U��q��__w��	�����8�����r����p|��/��G��`������'o�h���Y
W�_\p%�W�Z03va��0���?O(��H�H����l�08N��vh8p�
����}N�G#G^��z������ILu��T�r����$��"��S�J�>�+'���;�?5�3IOR��NyjQ��Gu��S�r�?�?jBg��������R�������������$=I-�;��E�f��Oe�]�\��	�Iz�Z�w�S�J�>�+'�������Q:��$�H�����}TWN<�-w�s��&t&�Ij��)O-*5����x*[����GM�L���"�S�ZTj�Q]9�T����������'�Ez�<������r��l����^���u_�V/ogN��z���	+���<P�������F�qXx��|3N��.����W����s��-�z�.[��������	y2vc���W�y'�:�Tq���K.d��_�o�����
��_#X�������%w?���oH�����]�_[g�x<6���w���������}w���Aq\|P�P�.�����fb ��o�b�)1��[3X�3Zz��p��/��,2��aA���d���u����y0WL8�@�~��xt������9���u�<w�����C��8�z
v�r��y����;�}|�Mw���� v���4(l�_X~	������
\tU,�q������0�]�<����U!�o 3�����h���S�����������Wk���yr���y��d���������&;u�e(w�Z��6� 	��w��8J}`8p�
b��O>N������q�������{��'X��s>m�p��T~����p��k�=���G�<�M���V�o��w��1���!����xc��c8z�?�?Z ��������9_��C�9&�7���������(���������-����P��nh��"v(?�����l@�e���+n�?������.]��@D���p����Wp3�m�������s����qq=�q����~.l��a��p*����c�M�H��W���J���w�yf�/����)p����/�O�H���$�J��5�G�;������P�������^�}�G��������?����C��k���^[-�?!�ey=��������[,|~Q�],`="R�q�K�=��v�����1�U~��uE�W��c������8�`�W>�x��`��V�������
���Fb���m��0>|�����]���XS~�Y������?yv�~	�}�aMz��vX�k��D�0h	\�0Eu���k~.���0h�_1`�DY2������
|�~�b�@"8��q�8}���c�����n
a�{	����r�(��p��h�����U������)��yE���W�y���g�����~��Z?����S���~l�����_���^
�l�����%/��v���L2�DaE\1��[M f'�pg8���U������0�u�I��3�����_�����*����W�c%�)�������_2�.���U](m.p�����I�j����(���Tr)|r����$��������$j�j�OU-t��/J��I&��X�\������$��W�M]����B�����
��B�
n�����:�?�����p����Z&��q��R���TVp�����,������5�yW�H����wXq�x�/�����y�9x�u�Hm��u���(�����]k8����8u���E�G�������a��Zd������X3|���.�=�8�p'���"p>���;!�D�:&�1�.[Dx��mO<[��5�z�M���������c�8�mt��1�H
ff}��c|�2;�/�o�����F0�c��8�]VZG��g�/���9�F��Z�?���6�`v$�o.�.\x���C��;�>�;�_��p,�Z��������c��1��7_v��m���cy�n�N���N����1�������x\��v�����a����x�S���s"!&=>?A���F�?(�yp�3�8c��&��o�+~��a���
?�b�����|��O�U������
����n����l���8�}��x������DKe����������8��p�<e"�
p���6X���x$>
8��;c���|���?�|=�f�c����:��w�7�^����c���R���7D������>�4Z��/�(�y���Yd��:5��g�W�T�8�b[-�x��z�����s.�Q��E�g��#>��O�����c�������"�t�(~����h��`��1=�X�^������O�
~c�������&��o��7{�7�F�	���7���]���+e������,����2��o��
Z������G���~m�@�vX��n�����������������L���,|X��sg�����O�$���W}����)?�o{���_�_%���m��4�����u�wR�i��~���V����bM��|��`O���"��nx��G�c��+������A�^�c���h�{"�����i��������S~�wP�I���]���
��Nw��5?��:�����;W�-p�����;�����������k���s.
X+����v����x��>
�/�eS�y[���%Cko��^�M���T�'ah��g^�)����O���n);�m}��7��O�RS��z^��������������H��?�a��YYo��������]��|���$	��%R�icy=/�r���/i��_�/��$!����X+eV��m��d����������$!��dA*5m,��e�[.���%�r�+�E:�$��WZk���z�-��l�Y�����+����^�M���fp��_�}�^��5�]WY��.�~�C����]���q������?f}�-�t�-U�D����7];����1��x���F4����+/0������-~����n�7�}?����!X��������F;R����e]u��c@�Axh_	�����Uw�N�E���|������|���8��L�� PuO���`;���;J�s�E1��v����F���6����w�H���0u��:�0C&�-}��8��r��q3wR3����
�y��7k���(~t�@�������O.�4�r����i��Ag�����I�G�>�����m6
+�?gx���F�"�;]s~�?i11�x6wO9y�}�����81 �h>�)�;�^����
�U�o�����|�(����1_�O��o��W[p�(��~yx��N�/�7���c|�?i�^p���u�[�;;����ut�d�qo��S��~b�����?~�wB5r7����*���[��L��*��*���wc76y�����S
��k����/��ex������B��pt<�ae?����w8��M�����t-����1(�d���O����z7��Mkb}�t	��S���������~�������f�����}�w��������I�R��s����9����9!���(��������\{�����>��/�9*������OC~�A~M����?����������Hp�a������~��5��O;�������`����������X�r�s��y�1�=�<��gQ"7{^_���J������Q�0���zBxm�����7\3l�����e�=��,��d2x��"��C`�r|�q��[�����������7v
���iX�����x|�s4��gs0����_r%������R�Q��hZ.j��|
WX6^���;�F�5�I�#���vO;)�_Xy��7Y%�t\��.��$���%����#�����?��N�M��t���w��I�r��R�Q��h���������B�O���L^n��I����?�'&��S����v�������������P:�w����r��R�I�����N��q���G��<D�)[��k����Vw������n��p8�������jW�;q������>�0&��o�03���������9���u��U���m��f�3/`7�����x
��3�(r�����%@IDAT@<����=����j���X�6?��V������=%>[,�h�vXr�?wC�w�}-]p������o�F���9��N����h��p�e7�3o���V=)���
��n=e@�%���]n8R�(| @��.�5Q�$"�~��������P8
����h�v�-7�l�?vb����9E��P��$O����/8/ �j���N�cd�����b�G��n�'���>��G��6���x�5s��c��2a�5W�c?��{�A���,�D������z9���]��>SM1y����G������c�������x�zI1���<Q�����F�S����Z��m}+s����Yr�C���p�-o�~���������1S������1�e'��`�/�e��$��9.��82���t����<�`����]GBkg�)_F��(�����Q����o�1vO[
���8f�����������A��`�����W��p�y��[N�6|��lc��[���?��Z=HO��?��������p���������x,��8���6=�D��v�H�q�7?���z�U��#%?56s�'�H�y���amm���,U�;���y%���x�����;��O�����q.�k��7�GI?��Il�'���:%��{�	����K��;8�as�A�n���+�,�o��i�U�!f��Ox\?���e�;|v�S��?���>�L�aM|����@��c�Q�h�u��;�%��W}l��>�5s���v��6�n�D��w�m��>6y[������/�h��^mm���It�y7|���c�����;��D�n�jk���O��������U����`�����K'�t�W[~7}�f�
_������m}k����_:��[��������4�n��-|��&o�#X3w�����6������M�D��w�m��>6y[����w��N��V��6�n�$:���h_�����������t�M�z���w�'�i���E[��w���5���T���7q$�C��������������[�x����u_������_��'y���a���;N���"\�5Z�.�?���!<1�Tbo7|�x���
2�#�i�j�`N�'p��T1`X$4�����S���cS?�G:�W.$�S�;����J�������r����c>��fp���e��p���#��G�_���.�O��.@�Z��lb����7:��G����
���T�z�dTs����)=	������w��v�A�O��6-w��cl�(����`��G�2	V�E���$<�UMEfmS�����v
���>v�n���n����k��>��n������������o�c������*�	��9��������.��V�'f��\�w!:������W[o���U��q��{�$����c��>V���=�GaG(��}����)���i�5�0`���,��5�[&/�)����k������H�ia�2a	�4�^v~�����!���'z���->������u|X��/�f����OL&����lX�s�v/�#�����#�m��5�{�g_j�����Q��8~��,�jk9}��[��t�#�������(��<�$A~3@~�A|�a��5wp�������>A���������2���8|
���R0<�A~���d��:+��_�^����Gy�������#�p��I!J�]_��q���������������Y�������L�1
�qL��������k������o�8���/�����Xm��fG��ElIK�j��q���jU���K�������HdY�Ke�ZVt�.�?3�d��$������������($�n�I�s&���1��O��P�����%��I�s&��N��d���F���KL�]��$��9��_�lL2�Sr#Te�%�j���_��d�����S6&��)����S�D��/�B2c����)�L���UYy��Z����d!�1gr����I�|Jn�����T-�u�K����3��u��$S>%7BUV^b����{�_��5c��
��������p
��fB{�L�S�0$���C�&����q� �n����q��	���.�T��������N-��n����Eg�	w���������A�N��N9�'��0�����{�
����D�;L9��~{lx����<��
���/l��p�����mk�>���~��:8R{����w6���$���\��$��=H����
��bG"�|��q$5��e�|c=v7#����G^|��V�^���K ����<��{�/-���� V7Yz��=;�I��K1�8��{�w�����!:2����g��w����#X����qW&w��<��p���9=��+����X[�/�k��J
e�Vj���u|����o���-�X�?r�
�{iL��O`���k��Q1�j�;n���?�<��.>y�U����m���C���H�_��z��]qC8�ow'��e{v����G`����k#e��\�������f���O8�����q��-�[����G���#��?�q����������N;��i���=��#���?9��p�cO�z�8w���wX�s������f.p�z%NN��\�F��H�������{��s�:�� i	�LX�m\��U����:v�7���@-�~|D3:���{��,�<��wa����\���4�<~�:B����h[�������q����W�wFwK������x��Op�6)5��u���j������W#���:��l���z�����Q����)p��]���|iD����\?B�p��}�U��R��,�|������w�sd�4�����l�v���	%���3`��hB)u*q��;��6�k�X)[��6J�R)#A����n����^��������R$�{�������������ZK�������_�mD�n���������o7�P��m
���F����C��<`��m_;�|;N8��P_�o����K,����}�|���0,��-�v�������O���@P��]/<���;�����W������������ql�_@�N���?����l�QXGWr����Cq�v��<��������0�/vJx���+�X�~�����vV5�����%�=T��c�E��z��g
X���KwX����+p��#-�%Oc��
V�"h�t��wW��6{��y���v�D�������;�l\���8�c���3!��/���"g�%�����N����K�n��pG���0��!�l�p&MR����dwz�����z�6����2��@!���Q�[��e?X���n��c�q��/���i���w�Y��B�}�cO�}�G���k>?�|���"�av�8����\����h��'���k;�����N�q$8���&�Hz������[�\&/���lY}���	:u�����q���p��7���!�<`��m���������?���O�]�s�.��^���G�6�q�<����t��}�e�+��o����MN��>���){�������5����3Z��F��0>z�M��'8K&��	�@���kD�!�g`)������<|��>����������;����p�#�s�u��g���#�7[z��?����+��K�9���

���=������}���v��z�Ou$x������a�#��S�~���S*��1���\.�������C'�M1a���C���O�I�k ?�a�V#L�u�P���{�d�E*���arQ��h<	r�aLm�P�����G�s�;�N���G^����_�#o�\���o���9{�i����r���&���;�K�q�7I��I#,w�C9���������_y�������\_���f��_J��o����_|��G���v���-�����������?�����+�A�Q�������"����Pw����9���<��#m	�X;_:���x'#y"��d�f����E�=�������%��+���k������%i~������z�^-�� ������l?���p�#OZ_��������u�eP
�\�3�;��10����Mq�'���K��/�a��g
����5�k�#}o�����(��[��������s���I�!���Q�#�7����������i�������;�����~Q�C����7Lm��b�h���C�~��.Sb�^���������wY�C��L}a��W�������=�����gk{*���hl�����7m�����{{G���g��
G���_��[&�_������,��f,y����5q���[����q���`��j���}���+���}��������l=���?��XR�O����3�� �c?ww[2y,���;�n�
�#7�����wX����G���o�c����*Q���~~���R�o�9�'�����x��(|����nRR����V�a������q����<���+`����z�`�w7\
#�OT�Z��l\<J��h��Nx:��O,�xOq�A�l��r���8N�X>`�aSU�����h�����.��C~���>D�l00M�P���y�J����q���q$��l���b��F�:��"}�����W����";}Z��w�9�����;�s�$����C�c�G������)�!�a���<Id�����}�7��A���[�������`G�a��5)XR����Hp���@���l[g���
��^����������
_ ���m������X3�Zz�8�8�5��~�e��G��>6\r!������f�ps�f�_u�2I#EkO<��XIm����������s�kJ'���EM��d��G]r�w�CKH~�j��{���r���S�cO��_�F�r�3��������,iS�$�J��v�j���7y��M[L������frHY�M��I�J�����_�![���lE�F��znA&�R�%S��le��O���\�L��oV��_��m�t&��e��t�le��j1`�	�u��e&�����K�W\�j������?Ob�5w����i��=��<�0�c��>��0�c�W
z��s	�Xg���GG�~�?:�$#`�P�o������y�]���	�S�y�6!����{4�������pT��a��g	[.�h�d������vi}?t��2x�m�D����;�&�x�03v�1X7������q���:Vy��q�A6�����1�JR(�����W��#]-��0��^y�9��}��J��i��`�����%w��/�b0>����w���Y#�_���o��_��8���Q������a0���;��0������>n|lDx����+r�����$�;��~~���1(���1��b|$��(������7��{������|�����Ob
�=s���^e�%��6�4SW������oc���q�3��������H�J������xO1��G��4��`�sZ�����s����5�����S���S?&��?���D����#����U�J�/���j������y-�l����M?-�6�%j�������s��+��-4����k���3�P�nxdD�������WL��0�G��i��<|�����~_W��1��^z~��l3�!�8��p���=R	��[8�'_y
wX��;���{�O�����/��q���4t�F�?��2s���eC�?�8���gq���10�F�o�������MB����F���7�����P�O/�o�?���������sxB4�>\7�*���j�Xh�h���;����-O<���_]�y/|����c�/��s{��Q��u#��"1�4C���u��x6���,3�cv��x0��(�7:,
��u��X�������j������������C��N;������)J� iaM^	 ��%���1�x��T5����}�O�������{lf��0�mq`N�D	N��x�K�?��8/��N�����ME�BG7�n��+�6/��n�L�������q`��:�:��:��C�������,c:�r�8�d*������Xg5�p?��/�&�h��,�R?$��O�~�u�}8����b�l�����G��$k�j3k�Y{����/�_��\��n������(����6�h��%��I����W���|�����__�#���6X�/)a����c�#�*���J��__}���W>�m�m��������]��1Q5�S�a��[��p�b1@� �r���������?��!�[���Ai�����L���j��{��0}���(�v�_��%e_���1EZ����^����"�`a������C�Sp!;����������8��������c�b���+��z�j%�`a��#��?�����I=��
�6�WqG���Wcj�3L5$�p���|��$�ot�Oh}���_�s�E������t������'��{)����'�J�,)��p���&EP��������
?>��0'z<:��?����I7#�S%q"�	����TY6���!�r��q������]?v�����
�k�d����#z����<2�SK;�������?�������=����;��}��7��~��������������}���:�9�������5����$mR�I��M�>~t�%�a��q�?^c��7E�997~t��5V�]����{�q�W�q����e��������s���&E0_���=>�2��j�!������y�������{��%�E���(9���fO����$f�%���R������?�d|�C��H��a8��;pg�-��e��������l��#����#����?���v���]��k���N������z��w�?��C����6NO�����}���<�G��y�_���}1�����\�������Gz�s�y�O������	�H�(����n� %~����?��c�����gG@�xc�?����~q�u/����+�|�u�d���z�^�'�����K�$�|�{���x��ldF3����7��rq���Q#��[��7[�1Y������p�c�����K��������e!�������t$IIy�O|�����_����?�w��e���Z?J���/���_�E�k����t$IIynOfo������^���Eq+E��4��z��A�k�xL�� M���o�h���w����pL-�N1�z��c��l�E������h�dF�5��Y��z�������U��"��n��ver�����W����S��a��������k�y���?�M�A�n�f��9x�I������<�"�{~<\y�c�c�{Yo��C��;
�Eb����W�3�Q�{�y,4��'�w���uV_������P�Z�_��0}���b�{bw�����c��S_I�����P��������7��e��_lL���������P�_%y%G��l�H��np�Y|����A�F���Gg��w\��-p_�K��X���=��5�<��dX��:c8j�-�,���=p������;�w<��@|�xg+��<�q����Jy���������?wr�����3���p���&��q��|
����������O����|�<:�|�I��q��A������P4N��{r�^~1�Z��GEI�x�aW��{����8���k��q�i���7z��N���/N�����#��#�G����2��q�w��8<�">�Yk�x����e}����{������Xw��Ow��O���������~D�����'��j�T���g_���|�_�r�+�/��6Qb-/[}�I&	{��-p��}hd8���(}�]��C9bc,���������w�
3�����~a#�p6������{1�{��q$�'��������F���B�`70w�gp�7�A��u����rQ��������y���������oXl�r'�d������>�9��p��/���cj�T�_�t����~�������\?����fK���$A�?'h\�S0�����p�	�������}�VsTLC�J�Ah5fd��?\��;����M��=�?�d�xG��e���w����	'v��yi7O���I`'��"BnJi&������q_�3���I����������Eh�n�mO��I����L�2e�����?P��t���~(��������o�3�����_����_�|���'���#��o�z%_M:���:��LY����������G0�w�����U0�N
�bNTG�SP_������p!2
0����u�V����&��tP�z��q�����Q+y�(��>���ff�.���B����y���!��u�$~tlW0��;�jLk��*�l�nq��2v�r�c9��NU�s������6]/���|��{wf<
�bUe%���[��?Py���\&�����������Y��_Cp��,SA fTx����<b}"p|��a_D��?KN�������x$�AH����=���+������F��[���{����ol�'���0v����^+l�c�s>v$��qW�X�x�54�6�����	/�O��5�\�	�Q����G���go�'�����i�<>z�)'/�A�1G��:���p��_>��
4(�9��0�����Ww_k�e����<��x��������M �����p������RKi��X�G��tS�<��������s��?�8��i���$���|�E��W�2��Uz�yt����t��������+����F���,���s>���	�a���`�?���#�_L��t���>������������O	�������a�������K\������?�������Br�+u�|M���K���b>M��9�mp�?�?�?����~��Y7��?��P3�>�z�Y����__}��\or_!oCM�0��G����q���o��o0��~�����)BG���"@�Q�5�*pl��X�o�w/�4'|�2�H��#X��(����FE���$���D�]x����L� ���>�K�Uw���-���@*(��*��(������#:9��Q4�]�sg#��q��i���6�t_���_5������S��'��P��c����?.O�a��+:�[&���r�k���������+��r����T]y�r
V�9��`u����f�~�F=q�K�A��v()����(��B�F����'���?1��Zy�.�?����E3��K+s�/�������_����������'�3�~N�e�?�?��dn�r?a>Bp�����Z\*D(Z,�����	D���Tz������}(?������;��Ykq����4�����C�/�]�l����G9������-��Jx�T�E�(2����t)K�����;�^���~�w>����O|��+����:�V8�U�K������H-�}Ac��(�kL@c�;���pIQmM��h�8�u���o��p����j�\z�x�5�=���a�kI#'��VAs%S�6�lK}��,����GRa�����O��o���68�����)`g�������<�=O�&�.���������eQj�U/�]�&I��/=a.�������l�z��z��&�4��]�����7p�}<w�o��ba
�vf�G_��qZlSo�l��~���.
��<%A�Y�7�;I��/����������<�������ob��r���_�������_���6�������r�K>���V�����% �`���������On�������~=�#�$9,/�5�PQ4�����_���n��u����"`�2nq�R,Xm���n�~��cc����v��!�����u�<�Vk�N��F��a��S��R5
U��9��
LU+�l@�#wxV%`�"`m�6����Gg���X!��;t5 q�F��������gB*����N��:����+�|>��R���IPo������e��G���c�k\*5���c�|�����1�*����DBr�S�^�z&?J2��zw��>�q�B��/~���Ozn����If.���k�h�D�4)��~|�,[?���.J@�Mz����8c�q�VzW��;m���^���O	���^m&=�J0������������_�^z�R����p�������/4�Iw1���E+os�����n�����M/q���������>��lL{�������?�l����w��o��������.0O��
W��h:&�6���x5���^wk8��{�Z�'��8o�a�`��D7i�x�h�Ac��U�� 7�1����(Z��_Q���ZY-�S<u����|�%?�x�j�"�������������4$��psX7��M|�����?�E��0c��71d������������m�n�!����w���1�|��+>.j��>��~&�����)�F����Q��.�*I���M��M|&�l�������)�q��Fq�X=����4V@���������NhB�|Uw��e9��W�eBh��6�������j%�������� ��\�����q�3n�o�+i���?��?f|��?�Es�Q��_|���E��d��_�,'�*��������<��"s�kb��J������_�����$�@���OZuSI����Z���r��^v
�0	v�����a0���u�wl�
.����p��#p,��QU��u%�ZN*X_�Lx9nj�xb���FNFZ)f�����Q�c����T����bBS{!]����s�0��S�!����F�|=<���������HP��f]�f���%�m���7���-QeyS��z��"wV��#���^K�������=F�������@�_�^��������{��0QI������^���������*`�1������a�����&�\�1����{�%����������76�a7
t�s�s�3+?���GKRr�S���������u���7�N��	�Q�L	��z
�[]�f�������?�����=(��
��$��'h�.x3w���������W���ov�5h�H�|�X�U�����"^��G�[�-���I�|��+bU�}��T��nh�i��l�6�����N��Z������^e��Y��:J��]����]�W��Z�E�+;���,IJr�\	/e�ZjU�����.!Vv������tEz"�"��-�?���*�:b��?�W�Y�����?M�����h/%��_��I;T*u�ZS&��Vv�����o�nd'�+�K�����o��J���IzE������u��������R���u���C�RG�5e�^je�����6�Fv"����8���&�P��jM��W�Z������R�~uF�7mG{lKB`U�cou����g�l Qh7��d�U�r�~��jj��P����H_}m^�/��X���G`pO|D��%x�.<���Y�L�OI/��?%��!9)�*����/kM�J����a%x����������o�?�G���g	F��^�.<��j{���������R��N�2�o��Wy��^r�s�s�s���C���$1�������t�����������l���+��u�U������������r��|G�3	F��~�.<�9�����?�h-)%���+�J�f]}�'��%�?�?�?���;�'4�7�1�������{�TA�"��`�
��+6���5&1�)����hLL�Fkb���5Vl��EE��(
�h�7������������������������2��[�:��<����	,��
�m5��o�����
mR�W�C
+�9n������B���T���3��8�Q��<m�r5����hU�	c���p���/P�l�t�
N��xV��a��mu����1w�e	T���	T��N����1/K������_�u�T'���_Y�6������Wmu��
N����������N7�t�
Ns����m��������6�|I�0�e�������_�n��R�0��e	T�������_�m���*8a���W'c�?��:�������PY+2� �G[�����1`
R`c��l�v�?�V�os��#�3
��Q��0��?�H<�ml�9�M���,O�i.��E�L�������]������HS�M����V�xE���IeI6��R�<���eNx��
������w�Km)�������7�S���KeH�0/������?�/Im�h+� ��>la_���y�������_jK��m%�">��~����	O�"M�?�?�?����b���Z��_*3J�`�
���(�T�i��q�p�[���]�r�\��(�T�i�zqS*\c���eNx�i�<���(��T�����o���A^��:��\Z��E�"5�?|
��E��T�i*�B9�a��V��n<��vX�bv%�l�P�<H� j�z�4(�'	����O�?���a*���a�t$��$�����SX>'�3��R|����	�F����
�4�f�OX��r����]�`1��h�����Y���������)�'@�l����H�Jup�?�?�?XGL�=Zg;����EjV���������:bJ�	�:�!<�',R�R�������SjO����)>a�����nnn���R{��vO�	���Tw�s�s��u����u�Cx�OX�f�:�������#������S|�"5+���KvX���bl���zB�	��b���6��s|�����?:��!
\M����s�9<���A�.�����/5!x���Z:I�!,�\(��./ ��[�9+6�|�;6����!������6F��X������/m�6R��^�����������?����(��������	�H9g{]^���?����_����X��������m����./�[��?����?����?��OK�g��7T�T%S�bZ�ORL����=��htG	��/a�h"#�X�Fh��7����3����3AK5�-t,�Ky�e�s�?m�|
�E�����NV1�����������=[X���_�f���]�E��j��_jG���_���)�J��rs��R.��u�������D�a����-�TB�wq�[�+QF�s�����1[0�I-$�#�����I�D�DX*���"J��������_����2���=m�P`XJ�q�A<�?����h3��fr���)�B��R�q#J���M������s��hD<�;7�,Bm��"��M<�C��`:�E���D$J���G�%J�d;���Q�!��`���gt��Q��2��I'���	-�����ef�+�bk��2q��.��(�n���?6����j��o��[�O�R���c2���?��5�`-��?����PB����_�a���?&#���?����t�5������<'�F������������������@����/�q�N�fv��_�����/��3����EV���L#`�����b����A�zfp%<7�`�/#I��
/��p+��p���K�a����.��G��&�������
��m�4b�g8h)�g����p��^�%BY��)_�s�SlLh@��R��,�������;e�<6jL6#{>=-|S����?����S����^`A��]�f#��,h����kg�����3����������Y�?����Eo���(����������M���?��������������=����������?��_�>#�;�����l��m�/��#�mbU������"D^7q��H|�Xp�Y��	����=����B����(r$3���<�>y@3�Wb�{EZeX���X9��7�<oH
Umu�"�>]�A�z���;I�NdVs�L���<��hy�G��t�'l�bU[��?'
u}�;
�����/��o�N��;�?TZ����������������1�d�Z��kY_���o�����~$P��$#��'#^SR��L�t���}]����=�x���J�H=��j�dY�V�����=���AKJ���e}�Pt�����	���y0����������I���Um�Y�V����O���Nf.��*���T�����������T�3���T�u���������XGc������t�T�Vs�����/��1����_��U�A
�j����u�������l���+�����du���H��p'
�L���!���������#QSCF9D�C����Q��A�>�H�����Op�6O�~v<9c<���4�}
l�H'mO�9-Dx��5����L�(���1��nV�t���l�i�c?k�����m5D6]qi
����4���r������*���/�t~_����^����l2A%Y\����P��ma���o0�C�#/�I����7�_��v������g��r����x��5�Y�f�����9W����������g�j�b_��F���i9#���������Nl�V�t���L�E��c����Q�]z	6���O�y�?���<����$��e������}�_����]����`�e�v��M}��������
%M����&w�������?�������K����o�������_�;^�~��S+�����i�?���`=*��b�yD����4d-Y�W���]�Gc�'M�X^|{�������LRg����mPA*�
f
�5d��3���!C��7ZK�N�,�u�2��D:�}>�Y����Y�N �W�_��x]9��
r�4X������#��c���}�����r�2�������d�'�*N��,��LRHy��(�y����7^GV��d~nU��SI������V�����Hk��
������w�%s�S�iy��O�S�iy����m[���}�c�N��t���1���7��9�e���C;�M��M�!/r�_�����W+��-���Ny��������2|���\1t���Oi���0�?����L<�Y��i������/�9��R���9-����SX�T�i��.�����g�����=�Z��b[jsi��U��>/-���������>�6��[���\Zv�s�s�s�k�w��R����xi=�9i�����?�R_1�r�s�rK�R�������q����%�QnK}���;����e9"���`9|�u�Mk
?��kX�4r��������/��V��Q��?c*=E���9O��f�|
0�����2t�%��$��z����7t&a���g<���K����bk��b�8���#��<l�d��p���$��]3K�?)��H��?��t�E��#�\g��-?��<�����Yzw����;�k�����XC�#�g?_���dJ��������V6^��/�e���_�T����������~z��X
��~�C������6�!�\������mZ�k��&Kt�>����o�?���)o��{P�����F[�*9b��y��F?�X�OO9��aa��I����������?f�y���eDH��PfU�4�:x��N�s�s�s�w�w����������l�������m���F����E�������,u�r��?�����������'�����?�����A|OdnR�l����~�F�_;p�����2��i���M��i�?A���N���v�������:�?���}�����q��ns��tl5�2Qb��������V�^:`l~�y��k)�!+>�@���0�
�:�R�K6����?C���BO�]�+ `�,Cu��V�����2pCVn�|��w�5V�l��Rn���~AN������(�~�����?7�����f8w�O�6��=��sd����5�V����27l�Y��A�o���K�Q~��W7|��t��2F}a�k_�����k���c���m�K
;����]��Q&_����������������O���Ru�w�O�����H �	J$������HY'~9/���G|�.��P��'��F�%������:�[� .�Y/�?i���Q���r;�He>�������������������:R��������?e�@����� <8���r;�He>��������Or$�`Xg��v�E���Pw�uG�7��#_���5"������Y~��V���4��	r���h�Yw�v�E:�����������[����>8r7D�����~8UK���o;�7�_m��7�'w,+zC0h����"�
��6C�/g��{�E�������I������� @IDATF�:����k ����`~���B+��i�l�l����M�&����?��x�Cw���BW
Xk�3��y(�2�e���Rc"^l!_�h�g�U��-7
H��������C��5�����|)
�
��]�w�(�?��GdO�Q&��O>Kh�����m��	�����G��3g#��$�-$��'+/�W��.���x;�y1���z�6����x��:hIY�G���x�+c��)Se�%���K���-$����{���������cw���z�����^��N����O?�75��������?��2�8��~��&Q�� �C��2'<��M���2ms�i��?N��'����y;�!����G�Q_�s����~�k��uk=&��@���;!�6ZK6��
����]���!���<���?����E�����`?�4E��BmU�z��V3a�L�5[a�>��b��T�������-��>��������0
���#�	k\OwX������t��:$�0���@Z����.��l���'���h�=��m�V*���Z��u��i�^���S1`����VX���������~(/�q���qL}U�K���^j��h]���M���w��rg���7��^|��'�C�=��Y��F��p�k�%���D��B��cK�>�3��suH!����e[X*�a�9�X���G��-��"�rg[X*�a�9�X������&4&�Il��1�-,����x,[����MhL���B�c[X*�a�9�X���������'��z�<��T��:s��l����4�1QOb��yla���u��c�r�?�?hBc�������R������������D=�-�;����r���e�]�\��	��z[�w�cK�>�3������A�$�P�����}Xg<�-w������n��5�
�
����+wE��-o}0E���F
0d;���������.=|OYG�j������q��~�0�49��[59>��{���#��6���}��"�C��[v������q������K@��CO���n6� ��w/?��hy{�����~��1�c.�I��������D���V!xr����y�=�� ��t.8x��?������u�������|�0~���s�*{�}Y>�
t�4h��U�����m�"�}�6~�Z�:�F��'��b��c�y2#�?4f�Ld�5W�����A�V�`�Z8�|��4
	���}"����!O
;��g�
d���3D��u�����?��\��S2}��AOS�.���c0$�g`��
w��w�Md�����sb:�+{V�]o��#�
?���������o���/c`5�:~�y�
����\d����[���$����I�����������+J��a��/;��O�o�5��w�����:1����~�A��:}k+��� ���uV����
8���~{a�����D�|�UW���7���'����������"����d|P/�Z�?��$�r�E7d��$�m��������I��~�����j������d��=���3o�r_g��������g�w�P?���w^���15g������O����|[?!5���~�:����n���������
`��g��c�8����5�Lm{���"g��������o�����R��_�����1R���������e���Vj�j"��|�_r��'���fb�������'[��q��L�!O�}[���g��s�y�=�������@(T�jA���U������6yv���s��US�KE���m�����O����R�g������%�� �?��R5
���(��,����%�;�D�����(���A.���J
E�Km�Z��GI��%�����2)���� ��LrI%�?��M��:�)	����dE���L
���o�KA&���������ez�������pB��.	���=��������`��y�d�XE@m{
� ����?�����.��D��b	~|��O����7ZS�p�\_��������E
��z�Ay�~N�����8~{������g7��%6������]F�1��1������(
��?��v�58Y���3>�����M56�<T�G���k��Y����������C�����Yw�&�����FUQ�@Y��f�yX
3
�����l��ZN1��G����5`��ko(���x9}��v�+���l@��I���� |d��q'�M��y��u��j��0��I������ztU����s������Wn{�%V��;��������_pu8��?��a��{�>l�Lv���5��oX�>�TB������5�A����)��}��(X��V��K�;h7���6a�a�~X�M�;���������_`)�b9k�2�
rJ�����\x�0��&9>���P>t��B"�����[j�q���}����/o�Wn�(ftd���H�H�����~����4��cX����M��
wWo����qy�?����om��+JK��
��w<�"�����u7zP���#4���u�������nl<}�#��U�QRj����`�����&��]ND�������V���<�2�?�?���2\���B�4��?�.q���2����S��6F
,KE|�o:%�u���eV���b?����[�]�������RY��zZ&�����CJ�����\�(!�?jJ��:S�a�������?ZWQv���#QBn��X*�XZO�����u�����W��H���_��P+��X/������_������G�r���R���zZ&�����_�.����PG�����V�ZQf�z�-��l���ve��z���un>Y��Z�M�!-3�O����A��@7M��N��40��7��=���uw_o�u�����eC���7�)�����q�m�(�~�F��Y[���Cf�l���(��pL�UzLlO
� Rb!i��������l,:���������'�E����<Twq�������!�#s���|�A���_������p�8���c��d��i�s����kc��,t��j:~m��x]YRya���S�	�[����9@����@����f��_�.z�I����E���
%�C�����x���������^H�8N{�E8B�r���Gh#�)q���{�NR_z�~��
Gz7�N��a�����L���������|v�{�-h�,���?���0B�Y���;�qt�>���f�6�1�O����V*��W\F��o�<��g�'{��J��	�)�L�?�3"����������z��w=$�.�_�]e�0���J86n���s���nm{Fw��s���'l���^wH��y9����pL����A����������?����~��������_�1��$+G~�c�>�+)�M��n����i�s��4|�L����N����o�<���t��������n9$��G�L8��l6��H����C?���P�����Xk�lg�����M}ul��A��	�?B���R�z�99�j�8v�����}l<�g7��O?/��4*�������X�;���JKQ��l^������E�c��;��+�����#|]G=��[�m���������~p`<BSV�����j���e�r�=�����Q@��Fh�/|�I�C��������e� �qP��7>�������t�_��>Z������m�z���w�U����&����r��O�_��zN^�I�j�����_/����-Ao[�/��vy�����
x�������63��K���~�S�G�S�p���23��/�
�H��H����b�Qe;$G= e�(�:��	�r������P�3�i����MYNm�RJK�%���I'��(��i�-���������=QK����?�`+���f��t��I�
>_��cv�cZC��������������{�0Y���O���O����������������kJ������v��������pTw�-4���%��)l�x���������+�q��?'�(���������]����-V[����I��M�>�q-��������Na���p��;;�B��f�1����_����|'��T��O=�A�G;j�pd�	�n��PGA��w���C3��>~��a��OvX�/��������o�����
;D�?��G��v�Z���u��������b��gh�(�!%DrL��9���G}����zo1��Go����G�cW'v��!����c�f=r{9����~���}P����� ��[g:��1�����D%-|���giPi����;S�������������,��k�����
��]wR�� �Sz'������6�k��dR��]�#�Q��"=1�-9�
��n)�_�a��h$�<=�8�:�3��<�����-�E������U��U�69�m(�����G��)t8;�~�L���G�E4��
j#`���s����\��+E&�Y?hXE��������5`���PN�O�����������rq�1A/?�����g����c������3��&���n�������
!`�������a}��Fyj����v��d�� ~p@�gu|0��o(�t'<8���K~2�
�������P���&�����q�������<�k(����o���or�y*?�C����';n����j/��+��,����}�a�^��+!�]5=���f
���o���Gk���:L?88p��8s��D��ya�u���rQf�IX9G+aU4[j����G:���������U}+�����:Q�[-�U������:|�&>�s�W�!��;��D�n��V�_�O�S���I����M^���r��]��U��R[~�>�N9��'m��>7yU����w��NT�VKmU�u�D:���������U}+�����:Q�[-�U������:|�&>�s�W�!��;��D�n��V�_�O�S���I����M^���r��]��U��R[~�>�N9��'m��>7yU����_��_�����<M�fi����I�mb��|��7�@�t��B ��Zn�����{�����q��z�����	�V��}�5`����5Mi��8��v�*��y�����
��h8~����9G�n�g4�����$���o�����!8��������T���"����,�fk�:�?���A9����� ���GZ7-�Xf�H�~Vc����C�(��C�I�t���{���j��=�y��@�����\��3���9R��B�g���r������N�4���^���Q����� n�Xo�k������2�����^j�=����Y��������U=��@�)��ut����W�.z�v���H��}W���p��@�
�a�O�1{R�����o�������|�m��^��1���o5`���N��C���?u���c�%���|'�?����������� >>��j�r���������XN�n-�mFc�5W��A4�����+H��)z�����=���5�>����#�������t����i'�����������?�q����,���U_�H���_���w����K�wMs��xV[m@�������|��[3�����4����,`=.�����Z"
|�0PO^��R��h�Me��pz���z��������S�\~�^zG<�Ho��
����������<�x89���������"k-�x���'v$����Q����X�m�R�e?@Yf^�d-�u�Q�r��{�D��OJ��S�����He���eS�O��Xf^���\Zf�H.��iT�+���/�P��1Y�ru������#��5��$S���e�y��H��/��2C����(�L��r�e�EL�"]��(�9��_�lL2�_�
P��1Y�t]��,(3�H���1�)7@Yf^�d-�u������#��5��$S���e�y��H��/��2C����(�L��r�e�EL�"]��(�9����vXC$����]��o��%S4���v��iQQ���X�Nr����]��m���p��N����e'��;��H��~~����^;��5`mwX��pp|�I�moX�-~s���]��J�X>D�8r;az�]r���B�"��Y������C��>��o�:��`RX[�!�}���[�?����#�+v��W!���\����g}*�-U�L(���SO�Z��G��&����1���B�S����]��Aw��u���c����I�o���+
<"!���Y��[�����)�p����|.mn(���k�,���M���7���w��$?�i����6�#��������������H8���}v�e����Qv��?�x�������lu���t��46����������s�+4y�R�vq�C�S��g��_#`]��.Y���k���8� ���_���z1���8��4�c��nz$�����
���E\��|���bwX��p}P����uw���s���i�3/�	z�=��Z�t�����H��G���s����?���?8��E��������������C�8��GP�e���5�/zh�����9�-��b��GA����{��*�f&����'���?\:��	"����2U�������c�_�Eb��s�����a��<��e�*��%�*�9Qu����Q���f��G�������y�������U=��������?sk/E���N�fYE���5���������=C��[�w�[�"N��������?�O�/}�s�W���e-�����Y��O)`
���;�����z%5�\4`yi�1���@�d�������[�M�	y�_�	�;����kL�k����#���z��H�l(!���z�6������&�.����G�����V�G^r����_3������(i�;�����/�>�D�F���R�����������d�)O�������z����M�|0&R�d�T%b��!����{XP������*u��q���?,oG �Gu��<�$���}���vM/��������?vX�N����n�Gw��2������2��;�y1���q��������+�v�����p�U���&+��rf7VwQ?��cO���w�/�g���E��4�*[?�����A�W�k�F���*����JiJ�������)&��n���X��z<s����
�����q��I�n7���I�y����������*zO����;�������1vXoT�����1��V &��wt>�;�c��y��:��
k�aGKQ��R��������rb�|X�g�����c�_��>����Q��c��(���&0����G�X�TW?�c�O�����!�=U~8k|�?\��o=� Yt�NN!7���@�G:�����������UN������L�S���}�����yZ����7f��#���i)�?�R/S�����������UO�(��M"e��\\��������E{r�=J�L��Dl��(/���@
����%@�����_z�
y��"���Tb����?�����?q�K�����o��������j�������h����|]����5��\#������������z���l��=N�I�����j!���������?gv���n��`��O���	�@�I�U�^��#�������@��H�����tt��
?l���u�5��/n���]�F<�������f�/U�����/w��kX�Hww>��h�c�#��
wX7�5�4���o/�#�?
��?�d��)��Z���2���,���a��v;�C����~����w�,��C"��F�7m�<D�^i��T��FzV��>F?��#��kM?�#��zqd(�4�a�a��;�k���j�w#]�;�������G�/���?:L��$�5����*�p���@��w!����������AUTm�>�csL1�ec���Ky�'�)
��B�2w�BOq�pU"���S'���d��D_YW����G7������-v�.�H�06�9E����Z�9qN����9�����X�5���������^?dXW�'	^�?�pE���?�j��g���s����;��#��L��2�����z$����i�����_v��n��R�������wK���#�5`}��a=�����8�[z����/������S�_���0YI?��*\��3��^�7���)��z����7��?8ROh��7�v���C�(=#�mV^N~��`�������U�nz��z��������gV"�7�Z������G��?e�Up���E�g����zLg��P��c��������\��q|�X��9c2��T.Q��q������M.�����!�!��R,�����EE�����?m������Z����RH�L�R��V�\�(����4��f5�S�
����b�:E+����G�PVnfq�7���Q�
����b�:E+����G�PVnfq�7�}^�kZ���t_[��}I�4��[
�-VZ6(������j��=����B�����r[)�Oz�����p�[e�%�#���{�cm
��m��r�1��"zt�,�;�5P��l8v�d�����AA��w���w[J��7����"�'L�C�|���'��O�'l������c�#�� �*����(?�~-5�w=��3?�(&1������=H��>Xc�u�$�"�r0�x�C��}[w����.������R��U����vXoFwv���_�����������-�t������|0���Z5����MV\�O�e�>-���nz�YOw�^�H?�Y�z'����;���.`�;�����zoX��W�.k�$�����.����Y�W�����\u�����z��j<�R���[��M����e���m�e���j��U�g'�O��w{o�;t����:I�@�q�o�x@n}��4����I�Y�h�~��/�/�?�^A\	����l8
��������)���k���4��k��������7`6��#�-�:?�?�1`
}��q&V��
���G���S�^����3>��W������o�:�S�M���G������V��8������q�a��q�����Dv^C}����������L^�V�z���K������r���.�o�>/Z�G%{�)=�G��(Z����o���{��^0C��z��#�����dJ��<o�7�����B�?5'��TB(s����o��U2)�������g�C�j��?�?���*_S���"�����?u����?�R���U0�O}����������l�����TG�|m�J��0�������U����u�K)��FP	��9�=4`r����m�7������'�v�)��Bm��o�(�������8��z�5��������_�#����[
L������W[Ai��*|=<��o0E��k@y��v�Nn~�y��*#_Y���Zw�-���\��S�t��=wX�����"x7Ew��O����
��7Z���/�;X�����gh�����~d��?�!�r��Ce��W���O��C~�Gm���hT�
���T�;�������*��u��0�n������� ������|,�����*f8��;��U97���<�p$89���e�uV|�`�m����sg����c6�P�^G2�8���[r�s�q�u���e��������_|k|(���i�)�a�,Wj�z���t��$���*
���n�4*������8��������9�vX��wXs��Y����m��78�!p����&�&YEia�(������|7j:+���Z�����G,����]�amt���:=�;��z��C��H)��7^W�@�F����}���9�4����Rj?�qwy���r���$��������\���|�P�?�8kK������M��|~��4dv��"26����om��k��#����G�[��{?���������>2�������+���5vX[��&����b�5�o�-��<;5>��kn+�P�7K�v���o�������yD��c�q������qM������;�{)�1�������������.���w�cZ��(=� ;�� ��v�e2��)��H���b�e�Q68[#�Y��39�L�/�����F�J5�Z��X�S}r�����Z~�3]2�s�����}���M��J�(+{>�s�~��������@=�&����?�0�,�4� J�R������o����?�����
��"�������O�TS��C�P*�����9���/������}J�/�:������,��,O�'���|�G,w��I��z�^�d��{����Q�����A�+��'����l���m[��`��ed��=�/3z��������	
�<��'��";�9X��F��)���N������]�����M=�:K�?����W���H�CC��f��
�GP��{����.�1�s��q<q�|�5z,���F0��c���W�O���������,�����s�i�b
V>>�
y��w�>O���rncJ�N�v,r��i����0�U�=����G�[J��h,��X'\��6_q�0�eT�k
��/������-����{�����5?{�]du��%=^��1����;�����#������������r`�K;-7�2F�������+�	Si�S�6����_y�������������c���w��m����q��
{]?�����yy��O�K���;�w��*2F���#x����dU
2�(m����
=��-��~���%���\����Fw�b��U��m����_F&�l��6]���y������*;�\�w���^�.0�n]���2�����o�'�k�	������c��>�E:vr�C�
��1��n�G�G	�+:b�?���R�������7>��G��Z���t�eePo��`��"r��'������J�~:��r�&����7e�����r�s#5@9U:��������,z,pn�]�O���P��@�����e���p�|�L����m[����|���0
]~)]?�aBl�������K�3�OgL��u�0�s���=��"]�zb9k��a-�#
��������`C������l���-�G�c���|�T���~���_;�}>��{�<<j�L����?�-�_640�#0��3���kV�tl/W����3����4�=��]i�������������q����
�?��|<}����� ���t�8�J���$.���_����B�������8J,�Y]�q������/�����5E��u�3���Ku��l��E��J����gZU�s)�����������?��_�m|F��/��`#��X����P]r���?��c����_����|�?�d�<�����[�a"���A$,��z7����2��#�UhG�Y��[����tg����[�Lq��#����t��B(��b��
��x�W|��C����y���g8������a�q)���X�z���7�����R���25�CC�cLA�u=2��i�����HG��wq��|���u�2&����Z5��?\�|��Y�n'�#�W��+���!����o����ml�XX�G���������C8~8+�J9z�� ��� tI��dO�k�pgl���g6��5�7���g�>d�l��1�X����>����(�����Y���� ����N�H�������p�����_��r��{�2�����z�e�8��!r�]������]���,
���O�O�B����c�A�������������9��j{��������Y����O��x������_�c��[�0���n�y�b�'�i,������v�TvT�i)�r��>��+��D��G�"��{����n���7U��M��c�3g5���q����N��#���<����K�}�3�u�V���l��,�������|0ak���Br������h�P����*a����o�L��;�j }H
���|������w����
���!?����C����0'����!�	��&����6�`�I�l�'q�
���9�/Uw�Ns���g�i���p��^�\)oO�H�d5��=Rh���Nc���?����3mm�i�w�f������t�����1�<������������6`U��������f�}J���������_�4>oR_Ao��������?��&O�Hc��?����?����?R��Z�l~�$;���0pp�!V�HM�;v���z�;����P$
!@�{
�����z��3~�;����m�~r+�I�K�/z��2����k" �N�l{E~}��0
�A��?�����O�th6�4h��{��wu�(�8J�~z�� ���H�W8&z�����K�A}
��>�TFi������g������ZH��l]�.i��m�&��A��x"���o_�����l�t���wl�VN�a����s�vj8���7���_��_�W�&�:C��?�d
)���5��6\C�n�k��FntL���4n�~���"_�[i�m���=`�5u�dG�Z�����Qy@�O�����^8*<(�~E��=��r����+������AFJ(��Y�������l�G�@?"��g��g����y�������F�i����.#��/�n�A���.H�Y����v����?v���s�G�������S���Gc���X�X���~�������$����U��0��f�|X8��^R|���N�tz>���?s�]d-�e;]w�O�c�qb��A�%��;��[{���3T�.r`���adV���j?+����i���)v1����<a?�5���m�����a�L������! ��p�w��1�R�}^���]�H��O|��?Tm��!k�q�Z���������wU����9z��*z�{a���?��� ��k��Nh0,�����H��l\G���	�����+��@�(�7�B8�wPg�6�OQ��J�;�.�U�X,���>� ?
|�`�����!���Z����$5aM�������HyV�XS��������{{��l��c�Cw�?���7�o'`|��[�Nl#��������MWXZ�o���?�k�������(��[�A�6��f�"]�V����p����='�!����p�A^�XXP����Q�%��������_n/������,�f�G<�+`i��-0���N������)]����w�S3LY3���8u��C�68[���MhX=�7��K��l�|(�TN.��?h����F�,����e)����?�7�D{2=��/����~��$>w"��obA�XX@�T���_����0���N����������
U+�������<S]�����]�m4��#[q/�G$CW��TvQn�vm[�����d�LyWw<������@lI����p�#h���i2]w����S�����$�X`��?bg��p�i�Q��	XL�su�n]5<�,i@�]=�8MU�I3��8�������xc/l)�J\�E����v�����D(�&������?vmv��A�=M?V���i����'Up(���w��I�\D�iwU��q#8�y�O�}����:��R�?�'���Q��]���u	w���E4����a��O��.������"��6#�x0�����S*�{�?/G��
+��F��W��?�{���c�A���\�����oQ����]��O�H�k�~�G�A�8>�8���g��=��(����o�������#�X�c�T�d�	�/k����(�:�(�X�T��D����R,E��s�u���(�?�$����)�(S@\�L.�J*��W��]�R�p����'-�������������E�?�������6�����a����'-Bc����_�����?(�������o���?���a�u�.����my�����I�u��b��i��Z�9��'uPVF_�i�yk�6ddJm�om9m�?)r���>X�>E����0Z4i��g��m��N�����^��8��ms��@�l�<�q����.��c����I��)��3_��������7\�7��.�����Qa����V��5n����%�F�q���U��?H�%�R�I�N���L��R��L�-���6�K�u�s�����#�������2m�?�?���m��h������l����q����XkK6�R[��������Z��?H�%�R[��u������?�k����1������B��Z	�e4���f��9�(���B7�6)�.[���<h������}���-����[m${��
��+o����_	�Q8�8��c%�R�!io��"�Qn��V2|B����<��~���]����h0!z3'�!e�]����o9xYi��sO�k����8��S��09���}9��kB9���1���?���h��=���������?����%��?���"���D]a�]���9O�����������/����K=<}=u��*����,�vBB;�7Is�����>������.���?V?z��������������
M��8&��e@����e�4X��g���B��I��|<4�0����������Yj�&#g���Y����������*�����5[�����5��#�\'��'��&�o�c���#e�d���x����s���[����^���t�_���*Dm7=�L�X��
�����,+pV/�{�^�-����~�����]���D��e{.�{�^�g��&�(�T�.�52��d9�-�	/������Wn����q�K?J�D;)zR�Z�^�����u�����W����_>m����(%���$%��:����������?�_�o~�&wX����*�(+�m�c��p�X�m�;��s��v1�KN��lk%�d�6�%��������U1��������G����V@��.�@9�8�_�1��7�g���I�%�^�?t!^��bN��X���_�QR��
xQ���V��8�s���.���5]��P�-�j�����x��2M��d�Sc����v_v'�Q��Y�]�\��U��v�T�Qj]�3��?�������_�o�O���aqP��,q��)��.�Vv�s�s�+�
��v{)��������RQG�5�D��������-�
��v{)���u������@k��z������u�[��	�
�R�q���7jKE���
P+�����7�a
���Qg
8��X����-.�\:�f������4[��h�@7��X%���E�Xc�����]�������K{�Kh�<��r��Q2��O�5�c�8����)�8&�DNF'������+�'�h�[�W��/�z������QRQv.��	��bR�u�1�R�.����o���I�n]�s��2���d���e��I���2�(o��:���=�r�Y����Q�ey���;�:���w���5��/����?�
�M����N�an��������5��D��va��p���cN�u�������%�h;�veX^��/�H�����������z��;���0`F���u�1O�V�����q�k�)�N�]V�����<R�.����}���!`m
�J�t���NT�yU�6�X����5��X���^��@���*zH�a<�M�2:y�PH����
�sx�[���#j�t��mV���R[�*8a��Y.���%��M�.U�	c����<�����V�0���,�j��!�j���R�0�e���p����t�N����1w�+K����������m���T�	c^��:������F�.U�	c��W�@��������U�F�/����l}u2v�s����:]������,�jw�s�s����:_R'�y���d����W�Q����C*kE�$�h+p~45�A
l1c�����'�"�*��=��oG�g4����������!��66����Y��h�'z�p�����X��U�A_b[�a���l\����xg�2'<��4�?V����"�%[�T�\k����9�i��7i�LS��e�)�*����t��/zT�D��S�S����*�"5�?������t�;�����Flh�=Y�����TvEYQ���}����	O�"������%[��
�����|������a2Me��
��<�@IDAT(�T�.�1�?��Jh1/ZL�M�6���p��\���������u��'�=��C9P.iNm������i�$V����k2v����Z���5����rIm.-����j����}Y�'	X�"i�Ka�����D�M���b;�*����	��wK�Ly�2�9�,��!`��+�7)�y�fl����Rz
���#d�9�/��3�.o*�O����@�)>a��719�T.�<��LS�9��|���������EjO����R�9��|���������EjO����R�9��|���������EjO����R�9��|���������EjO����R�9��|���������EjO����R�9��|���������EjO����R�9��|���������EjO����R�9��|������u��R�����!��[|�Ae��
������k��C8�!X�4������@3��
�A�.�/�O�<�l��P��<����Ia�)�l����VG0?��A�4�?��2�����TA��������GG���Y������_�m����./�[��?�����?��j^��C����_��&�����?��.���������������� ��3��?����?i��Qe�i�W���/����9��~��j}@B��Q��R�@���3����jtKSR��+�#E$_�2�GF���6B3��1-(O\G-)��:��-t,������9�_n�����BG�_'���t�s��_�R�T����i'��(�K�V0��J.����-*H�Gh��u���7�W��8(�������Z��z���=M���X�%�Pl)�����q���^��Wfr�KO��7}�P*��MQV%�����?�]i3��f��i�>��(�TnE������?����fR!�0����}
�Qr����%�?����w���B�a|��Oa�u!�|@����'�E����I��f����P0	i� �%E.�����!���m�p��h�(���4�~���5�-S�/R&��6&���N�
�7:�D��u������������K�����q�����?|����P�e�������t�5S����Po
J�P�?��u��)�L���_�����������~���W$�
������?����6h#�������������k�^��������_�|n�w������gX�XU�� �,m�F�::g���\[��0��h�F*U��_�����y$���R��q�QHF/��2c4s��tP���[�KH��Ur�4#
�WZ�cM�P�n6"�o�Z���*d��/�T�o��a��L����(;B����R������m*���UZ/��Qv���EY����gV��������������w�����E��(���)�����(+B������J������������������_������=�m��)���o�QV����g;�����C����6�T�MXP#��,�L�y�@>�z���6������Y!k�b����d�vE�b��"������~������;�U��V��FU[����]�`���f����T�5���������_XGc������t�T�Vs�����/��1����_��U�A
�j����u�������l�����*��U�������u��hLu6����o�nP����`�����8<8l5$��`s����������P����4d���<�J��d��(�%7���u�������8 ���!����'�p2�0���"N�Gp����/Ib�u�z������I��~lO��:�����l���r�#O��o��;b�ue@�nr�=��;N�l������u�S�����1m�����4��q|������e�������������hB���2�1mO�)��������D�X�������7u�<��\�$O��,86�m������c�eH�6md�G�so��6/�k<�������M5�3�z(Dx��a�������&M�X�}�,��7����i9A��~lO�>��-��O���?>����+��_�S�ZlM��������-��
����R�����Hm��T�����MS��Z=�q����i�~l�}��������G����s����F?���������%�����?������3X�CZ�~$mO�)������}~��Xg��:&�C=�BR��PW�(�
�A'���2xEc���Z�X�Zb�����L]y�H�cHyj��gJ���L�)v���0��{`��#���?'
������U��r�A��SG������;��]����?���;���z^�������S����@N�,Z�[�si���-�����9-���t�i���U���V\Fdnj�5�Ap%G�� #^S\�B��Z�c������V�����/��'��J�<-�����e��%�Mk�J�����d���AZ�Y|5����GKm[������4J^�0)���|]�%]$�����/����gdZ��)��G����9K6>��R��gZ�f�/M����9-����-�/%�(������L�E����E��i-c��\M&@�����`��t�i�8�>]�A}�E�,=:w�Y�f��������QN�z���"k��R�V�����e��#G���?�����������"�
��7}�����������,�������.���m��I�����\Zv�s�s�s�k���������0��S�T��	�������e�Y�	=�������Hp,�VC�6Q '��X.E��h�d�*�� �9���%�����f��VS�X�=B�E,�w�.2���e���9M�K#�K�'���$:@R\����#�q
��F��_M���	�����{��������^)l����z:�f~��2���ZN�q���%�w�n����i���>��f��~�t�|�L�]��t��k�F����)S�C�)-m�A��������(3Q�c=�
0��F�Qf_����!���o���������u�E�����d�s�P�M��"�TR��@���s@<����7�e��.�?}��d�����!+�6�%#����<���^�O������%r����>�7����XFy����~Wf��}>��b���k�N�)�|jD3�����8���}C�S}nl����l����a_����8#�>�����=T~G�l�L��y��]:�����uT��Zrq���A[v:�b�8uZ�,����A�����[�������+,���-k�{����Y������D[&�2���h�����������������?|W������u�����`c&n���s�?�"
�t��d��v�����5�3j����}���������$���l���d���MD��?��	�������5��o��'�3p������K��#�@��8�������{���2I�~3���pn�
������.I������0[n.,�k�(�`\3�e%E��(��X6t9H��P�{n���`��S��d��p�#��j�����?��������r;�H�o5�|���l��d����O�����H�����c�+���?�^'���������1�o +���!3������h�i��"]d��f�A�����4�����p�����S�b���P~Uwm���{d��}��[n�>�Y�~��3�~X^|G���E������P9\?X[�X?P��]�!��*o��L�V4�?F�x��wUh:`�5d���Y�X�K��Y���>�����QF?������8J�����#u$���A���_�yy~q>���o��o��<dm������?�'���	/���r{�?� ���8z��c��^]:*u���!`�gR��A���/������C��r��o���y7�i)�H?��J�%<�(����#���������m8���R��Y����2|����}��#���T�Y�������� t��?���r�����k���u
4#�������u�
s#�����0_�_9��{���_���z�"j6�.�����u\[��Y�5�V��_�7��9�b��s�\���d�r;�H�o5��������h*�T~gS~e������s�;����Y��t��>�\|b�K�/��oA���UV_��N*�>W
Kh��5{�l�E����������o��y��1Q�g��	�=��f9e�����K��)'�rw�������/�Z�~s�����h��	�=��r;�H�o5������r,���(�b��^����?E��l��g�~�W���M.��eMq�s�77��E�q�S�,��U������DI��q�����^B�������X*�����V3����_Y/�?i���Q���r;�He>���}S�/�avV7!`�)F���$��2@T����;��D�4�l��dJ�YVR�H;
;���
���_����B#��_s���o#/�T�6��st) ����$�t8��������[
�|�S��:s��lya�$r�E���?���!���^��������?:L��$g�=B�z��l"���?���
�jG�+j�Q�c�9�Ws�UW�w�4
%��5���~w�����������:5v5��?�;
�!��_��G�c���Y��)?�m�Y��CL����8��1�35�����hy'1��Z���G������ot��+c�y�c�o�������y3Oq������Kf��������Q�������,cN����p�-���#������k��
,��k���t�@��a���"
���l9��d�-�D���	�~��z2�L����Z��A�_�&�u���l9��G��!�)�m�T�A}{��*S�K�����ln��T������}l��y�m��Y��m��������������5���J������yj��Z��I+�G����p�K��'���:�G�@.���?�����K�1��x,[N��B��!���4T��n��;U'�����H�y#l^����r�~���U�8a��-�jA����z�eG��)����"=��������u���;�k����1oXY&�*<������d���N�b�r���e�W=:x�Z��9�=*�=�tF�xYU�/���K�1��x,[��M"�`�)�����(,��a�,3���e�]�\��	��z[��������<g9�m�u��g�r����	��z[����u������?���,���3��C���u��a^���Y���b@����5�\N`����l�5c9C�y�=z�y��#e@[�?�`�C p��[k�z�������]�?�����I$cN�f�G��+�`@*������������6+/'�`����o���c�;[�=�ZY�"�����}l�?��;RO�c� C,��#_�;t��t=;����2���`��N���p�c��;����/=���5�#)S�g��#_��@���C��mO���Z��6t]�������A����"�>�L^�?
�+�"�����������?���0N|p�A�i��u�?U��������z,�zK������_��s;]������JW���?������z�n�WY�����1�fYy���F��}t�r��
�r��>�`���S�"��CN�����9�S�mv�A�Cu�����z�1����-H��e�R�ex����B�m������������������?���<��_\Of����A���x��C:������i���l�O�8;R�%����}t�z4�_�0������n�m���M|�p������������>�g���f�e����7/�)������o=��;���o����\~��s����F��i���o��������x��zn�/���y�����7	�:7=������Ut���Jcn��-����ew�R�c&���������_�qZ��z*�nz:@�*��\�?
���S�w�TZ���������e__������~2y|�9P�Y7���T���������������������_*�$�TR(��E����<���?������'���%4���5��3��:���|��_����?}3�3�5��~hD�w����Q�M�"������J����G�%{v�%4P�����pZ�%���}�;$S"�o!�a�����O������h�\��<E�h=I���9��?��>J�7��`�/���z^��#�>�a�����:<�c�?�l���0)���F������?d!����L��+R�.K��������/��"���;�W�O�}}e�����ok�{�����O���C��C�u����@oB��1����/$�������k]�Na�o����{@�j0su���W�����i��rVX����������uh@uG=�
tW��s����+n1�9�e!#�:���{GY���$y�	����C�4��g�����	v���;R�#���_ww����K�5��������[n`������y����C.9;����'�������<�3`��+|d���+d��cm�;�������7��WY.�r��7��1�����T�l��?������?8"�x�����.�Ag���UN�u���r��7���Q�`�S���4?���~�pt����	�A�EU����q�@,i���(=|�����0Yf��m����wVI���D 0+F����"�O���K��3��3���g�bD��Q�H��������y�vD�n�u�������������iX�3�����gT��~]����8�N������������t������|K��I�"?��Mi�����
��b�t�������
�-�:��
��G Mq��4�r	=<CN���m}MB��I�C����,}��+.��6\&�1|p�~���7�'U
�������4�R�O�>�\/m0�
:�$���!�B�
N�h������g�(��������l�x�������W��H*����!�g��P����c��rm�x��y���P=1b(��������#����!
;����x�1�#������f�/N�D�C������������������=��>R!=���0��?��G����������%��/}��q~n4�����|�oesK��=����{�����$��4���'�s{�$k��=�Y��'L/�����S_t��}�CO�!�G�P��[>~���o�NkY��X�f�K�E|���5
�ya�����s����;a�
��E�����q_$����5;_&����^������=��#�Mt�L��A��"�������G�<M�?<�V�d�*�xZ����klc[�����l���8��i���'�������T���������)���,�<���v��(^����:�CD��d�����0m�G���?���'W���z�5��q(�_�ge&����V&[���WW�w��o2�9��]��5���c���z�U��OX���u�a��d}�E���Y��B%�������7��y���X������;n���N1���5���0F���;n��o��s��<Y�	���N��kK�QU�WN�,��U�����R���f���E����n��k�#_�����0��	������s��?e:����$Kn}�����6�o.�0/�H>z�w�v�����\��e7�����w���=5�����c�~��N��V��FX������@��C��=ygx�CF������x���6�=�Y����l��^�'�7�������b������3`h��o��*n��Vp�a�18�)�����>q#�E|�a�����k���F;��{��f��!S4�w�=H�7�1�D2�3���uL�����0���Z��_t��9k���"v�<�$���an���3�����s�����Nw\I�����4�n$>�8�3`��d�	�5
2��F���,�������H(#��x-�����lC����'�	�}��n2�Y����q��������������*D<��A�z���?q����7��9k�
���Oz���q��b��^��s����+��i����~z��,(�O�q�����
tS3��g�&��O�u�-����z��n[�<jg`�K�?�F����O���]>����3g�I��56~�?(�/�?��}z�/���6�����]��2����F����P����y�����;���1�S���OR���!�V����'>�����l�ko�XG�V0���}[5��_�f��g��C���o��3mC%�S�<�a,����K[�������]�X@��%�����(M����w�������Bt�DE*���5�:�X���+|���S��'���t��w�		-����g��C�WH��z��i��,�5��!>�8~�����-
��S����������'�8&�z1�f��=�Zw���o
%|42O��������d���ko�����f���V�<��y�	A�6����<��@������fmk�����o�]�$�>��������\4��%��jK����8����j;~���P{���������������������=w�� �
�c���By���O?'�����;t�M���6�5����&u��=�W2.�L���;��G�G�D,��]����c��Cd����t����x�cT�:���&����w�d����s�_[w<��t�o����,�}�����+5x�O��/�����O���m����X���{��e=���Y?����o�g2� ����8�G��p���������jZ1����|^����Z��>o8��4���2��Z:�WNd����������4�_W��Py��5^�������Zg��u�����N�����DD���)q��� w��1�j���5�_���/�'�]]V�?���C�\\����9��p�)�����g�%�rB��m�?Q�.i��3X��rn�N����!�����Qcc���5��
�bx����'��2�����]p�nY��V��'���<���N}��
��_�e�w0`H@��mWtW�/��H���0m���$�N�����vG�p'�J��k���QHk?$L���TC�RG�=
��_���4p��<�Gz�nZ�2�d�#�
�{�h��
���O?R��F�����\�
�u����>��H��q��wI����+x����0�cbJMG�[�x�	9�9+��+�GB��|�8����Z	���|x�;�~�����a�/<e%oH�p���w��������%�1G������pH�#���x���L�	*�������(����=���u_-x�4@�'B�������y ^P24��<�x���/��m�c�yO)?b�%���#��F����W��&V�7�>,*}�a�
�pTo����q����#��T�H����u��O�.=�����G�M��`������O����s��<i���G^��P��q��e��u���������~m��+x�������y��+/�y����!�����?�����{^zsp�g�O�>�+�;�E]��C�:]R>H,��<��`����O�a�*ec
�K0J��.��s���+X��?����W�G)�$�h���������2�qg�U�
���k�H���q�HB���r#wf��3e���v��Z��VO	�q�c,=�}e�`N��#����;H���{�=��w�[������3�]�{��x�u��h}�k���U�M}�A{�����q
�$�h�xH���$����CNK���k>R<�p]��N?��[�����������A�����W����� �}ud�V�Kr��D?;�p\a:?������/jce��m������:�����Ai�k/���@O}
��$[M��_����1ZY�����+�3<%�����W $^���?g�`�u�'{�| ��a(-�{��4_��������@����]i"�����d&�u���@�����o��o��'�u���T���x1����_~h��>����Id�@\a��9�����5��X���h�G@1�Y}��	��&�Z�����1a�,��tuu����XY>f[+������R���+�n��|m��6V��#�8�&E�U]]|%y2<����6x��&.jce�8���o2Q$[���W�'���+�n��|m��6V��#�(�&E�U]]|%y2<����6x��&.jce�8���o2Q$[���W�'���+�n��|m��6V��#�(�&E�U]]|%y2<����6x��&.jce����sk����W}}��]�Vx��i�>f���`�D�n�Bj�����v��r�n����e�.�������{�����]9����d=���1������q���hE�9
�C���{�U1H����O���x�?_8���J<C�9�p9>�uh@Jr|�,i��5�����7X��`�8�u�c��o��c�	�
`^��
��Z�n|�u��Io\��b�fn��Wq}����&�y,��|.��w_oM��H�1���~
���W)��c�+o����H���v����>[l,�%�G��q^`\���}�(u�=�v�<�������<�i��g-E�����^o�����8�+O�0��������k�~E�mWn�\A�����o�	x�x�c�����^4j9�:<�������riP"�����G���Y�������~��o�WG����;���/���3���;K������w�#��/�';z�}3�{���<�R�5Z���������R�kq�I�������'������������;���I��z�?�����=�$��W9��Ch$����Z_�^v��������H|���a�`?F�yK[l0���=��V�+��y4L�is��s4h����� �����������;4e�����V����
8%�G����1�O[�3��5guZS�uY����k��T���o���~rM�����'����p�g;��q8Yc��WOP*��1�����n:���u���JC8�,t�A8V=����8E����
��]G\KA�.O��@��s�z���X�����<�s(�@jx��&� �^�����py��N\�������y$�<#�������#qe�n=K������f�F��`���m����W�s�=��s�zT?�5�������k��{��/�L�Y�
k,mq9t}<n8�7���=����t~������?���AMp���cz�u�^>����� �^�<)aM���B
��*8~I�u��#����Fz�V��4
~�������^����#�'�.I���O[o}��uK{����y�7s���������[H��g[�����Y�J��8�� �����YH�-��/.��`�v`�
\C|��kV�4����������A��s>4�r��C��
�A��/����z����=��N��z���H�UQP�/�����>r�1��u��_1w;��3w��WE0��4X+}��r��C���=��g�A8�a<��Q�'���q�`�P������G���P�}���v��%|7�����@�����yu������Sx-DQ`��5�V>�5�u�&�k�Xji�����x#}��c���������e��8��iO3����x��!���7���������8i9�7������1C��r�(g���7�Z��,��<�(��3�Q��y�����Xji�����x��y^�3D�+��r&�k|c��-�BZ�����ya<c����7���������8i9�7������1C��r�(g���7�Z��,��<^��j
�Du�6����Q"�������!���:b��/�hT�1�����;U���Z8c�C����W6���?��M"$N?���g������Vh��zn�+�G�e#a[�.���[^��8����p��/��8�*���w�;������~i<Wj���h���5�e��)���[��������kb0��&�;|���	�����
c�;x��[��K�����q��������������|���8v��Orrg���_�~��������a�9��xI�/`~T�0���xI�
Jn�����	�D<n�
�����/��8�����������P~�g`��Y�z�[!b~�@og����0w-�o�e�5�?�Md�w��9�&�K�����S�kSoC�U��+�����;��(���/6
�f�[�!�m��PoP��cn��}<~�/������N8c��K��<�}��������(AHO����/9n���.E��S<$/��{kKG[�#�O�5��WL��L������aD6�')��fk�9��;l=��U�x:��x�N�����{��'8���%i�|��_x�s�h��A��/���uq'�(.�@��A�~
����h%�5X���q]��u������������=/��L����=��c[�������������+k��g��w�Hv5eg���]�q�o��T���M�,IC�#���~��+��h�e����)���rp�5�����bx-n����@'�x!
��!�X���������d�[������q����������i�;��[`��H���m'"G�2{������y]y	q�����]�E���.p�o>(�� }\�-qF��,48�(�Sq�;�w��h4x[�|��w$>���g�m�
����ANyxX_G�umB�u����0�c��o�x�Bu��Z�J}�SX�7?����,����������8�������������#��#������o}_�_�~��8�$������O���-&���>?�h��q��p6$��z��}��]�_�J�%]����0�w����������8�dRr�	��>��W�C�����<�_��NN:}���?�cU&��L#���i��������X�]��9�w�������`���;a�m�Q]��4(�sX�q��w�X!�0a����Qm�,�;;~���Xi�8�_������+�R�!��j�G�q\q�-��Ke*���L�F�kz�8b���������O����������1���[?��W�2�?9�5��D���0��G���G�M�T���������CW�����������������Meg^���}���xT'^�������'_���M���r��e��~��M�����x�������<���k�w��/4�8S�@�<xx��Cg�]��-�w�Ad'Z&E4v^s�~��1�����
�*9v�/����
��c��x������[x����6���q�������z�����[N8��j\�3��~�C5�\�{O�p�w��������n��yw���3�>��C����l��^����d�>�Z��u��������3Y�]�}�;D��F41b�����B��A��Bow�?�#�h�����u0����f��ut���G����?~�b~XB�5=�3��6$D���~�m�8���n��A��0��.�?
������0�/[���~�����8x_.������	�-{�����q�.��@��������H��N�����;����}�R>_Z_�3����������Q�%�������"�Wy<�2~��|�t��[J7�_O����B��Dxb������0�^w=��7�2=����
������]�+|��<��!??%�Ox��c�+<>_��p�<fW
�����_4���v�(�������+���q����vm���g8����Z�CB4�0�iJ��u�_c����i���i\>~�������_���7J�y�9=��A�/�A���A8=P����*%w���1���/X{����\Nf� �o>f�_�����������N���}3�'��������c��_w����,�>�����aK
�/�����Z���Q�f��8������
�y���e�_��x��8/��Hp���	���kBWO]�?;�����-�<����3\��+�Q�������Z���e���J���<!�'�L�6]N�a�/3������0�������q�����c��2������_K��{����'=��������R��[�?�;��pu������������3�\���$?���t�����O=L>J������co�;i�6y~iUH?FT��8�����hE��9����J�����g���j��X�=F+�����/��lu�:+�O\�P�?Q��
�S��$���wa��s+������7>��7>F���7g�6�
T|S�@/�Cq�-
�<*��OF�T�
	�������{���ou�q�k��Od�7/�(�������0\�F��a��[a\B����{'$Y�����*�������}�z`Z)h_�K�V�������	�)
��r�o����</�xC?0���Zo4�R��%�So������)��\��q��/��w\!��(y�G'�PQ��
:�/��
N�=6Z����"h#I�����W��P`�x�h���X��k�p��>T	��~���V������������+�v%EN/=)K<����n�hbJ�d��N����K`Q�5��e��Zi��u����
������7�3�A��'�C�^�pd���w��y�yeB�k�^�A���8����H[�=�P���r�������>�b���y�;<����W9��`(+�0M�G�������a"?iR�����v��������{���j���i7�7�_�����r\�Y�o���d���~
���7�����	P�aM���SP�~����5�������U������������peC���Q��,W�n�����Fk�?�z����eP>����D����^}9��A�1�6&�4,�p����C������/���z�S�I+)�;�C��4����\>���^r��x
�������%���u�$�Q��qPjre=�<�������Xo�W7\���k�H��C-��1�$xW�Q��Sx��=�7����s�-�:>��8w�6l(�v��F| 6+2�����_�������'�C�X�}c�nP�z�=�A����g��=�d���e?��isI�;����'�|������?!_X�Mg����\��Kk���W��|k������:B�+���`�&������h^��p*w�������/���t��w5kt_<�q
RM�O��%}�vkc�C1����}�,`��a���Kz�]<iIe�s?9��x������-k����t���U�gq�9������R��/���t�z&>�{
������W���<Q�#�g��/�������&�ji��4�����`��+���~1_�O���[�q�w��r��a�e�/�_�\����G� �L�g,�u�����W&W�9��+���l�x�o\��G������)?L��s�9�<K�i�i�?�b�?Q�(U��������Lr,J��,,������l-s����U�?�8�7�����Gy�/�y�����X��*b�� ���-�����$�G��
=������c�A�/�EI���r�
�����1�qT ��f�q�
8v������JB���O�j����AC<7`��q�-a�-\O��x[�H=T�>����9w�� ����<���n8�u��l����$!�6}p����o'��y.������`q��F��}�,����T��G����d�+�<��a���:�y�������VC�G���?�������c0���u�����9lE�!���MK>�w=g���p?�C�QYC�J"���>�.[��!C���L?!��������.������,��g��
/�OI�z
��}?x[�>p����!��e���@IZ�C�QH�����|<��;z����(��4��;�`-�${$xv��������caQ��4,7�����t����P&q�~�2�����a<eyU��)��D���CW���������f�sx������'��c�u��}�Y�����6J��mk5�d~�����v^����E����?�DO�4�����y��O��~u�D�k!h�&GN�n	�4��6��=���d���7�����!�o�5rU�E����������n��a���<�H�P�L��q�=a�^M���wXg�	:��~��t���w;�����U���$wI���^yKN����_p2	��[�����
���x�S����F|�[���W!IN��C������e6�a�����U�f�x!j������@IDAT��6���;w��y�T���!\����e��.����?�������;C?����a�O����o�|�~���������P��<�!�����k�_�_t5	i������`e���(5I�����?������uO����|I<���~L�:u=�_m�6�c�N2��S[�!#�����Q_N�����?�����=|[�_�,M��t�N�+�r���W��?���
���������Z~�������B��c\��I���_t��CDJ��,�QY�f�g��5�e���?��+���8�����,�?%����gmQ���r�/�_���*Z+Q�D��H��-*+��lY��Q�F������\��Q��2R�k���d)[�o��?/����N�{�jy)�;����M���"������S�2T��MSw�K��+z�s�w�i��K&@���/�L$��dKIGz����^b��xX��ad���^���wPn��	[��k�5j���}�h����}w����$��
�%����9kv��RHR'&��z�U���%9E���������%��}{������j��{��S�E�t<J����?�������`��U2J���F	��y����n��������p����_�&M`hU�u�Q���k�9����a��c3;�������Zdc*��} w�6�����UZ����������s������s��O������}����`\I�i����f�O	^,-]�#{���
G����l�"/[v��.��J����=��l�#$
�<
s�w���GAz��1�6�p�������;pw��<������tBV���
>�=����������}6a�;����L������(����X��p�	!�:r?~����sq��2��a���`]����#>�om���V����������_����j��
������V�7����#�g�~�t��������nW���S=�|pRy�C��/�6�?���X����`�c�/��}_����l������5���j���<�p~�G�L�~�1�>y��3���	����{��G����a�K(}�����wEu	WC�w'4�u��U:�6��n�z�uG�33X^���5����o-]��T<B����O���o��j�������.��`�]�zlIC�8J�ol��+�Z^}�[��9'�d=����s����?��gw�����|n?�f������8E��pT7{).
��k��YMzt�����~��wW���k�9T�^���;\o��<�BH�W����
�?����?�g����M(-U��b������Cy!�j�?�]����@��t��#�Q���(k����R	~��+L��W�+F������a����UO�\v$x�S��v+����-���%���C
~���v�k��$�L���\{��)�~<���_�������a�V�Z'��_��d=��w>�z�D[��`���a���|���@i|�:s���*;1�x��>�\Q>�,���W����`��T`k�-���W���5>k\���%���?8W�L��o:�I"����+�e*���T�z��E�#����rC�b�1���b:�������7>��'>���������G���R�JJ����c\Q��p=���������m�m��y
���w����u������D��c{x/���*�)�������t�%w[>��+����tzm�����Wv��WD]	/�������A{�-:u���/�C����������%{������x��4�x=����_O�u�	���yK;����3���p�|�i7G��0��[���X���aM<y�l���GW�n���x1i�a�"l�y�K#9
���~��=��`��0���_I�B�f�|[�������������aK����:���;Y_&d�(�k��w���K����O�_|2���P�_��)���x�����M����5^����pl9=����V��3v�*�������[����kR���;����0������m�J;��{l�>?��%g����C������R��7�k��NO�7���`���!�|�xn�xw�|
�^����)�Y.��m�r=R�FO�N�s�?�L���������g���@����j4����_�`�������;�%������(<K��cy^[����X�����?>����8w�k��P��|l��/����(j�=$�|0r�{���C:���0������+Q����_,\����:����=���(������N�����0Xe������	�{���|��g�}�������g0��\�������{Z��W?������pLox4�$���<�������G��y��A���J������*wE���*w��o���K����,B�[O<������B��.i��������d������q�~�lG�������a���0�������Ia�0M�r���	Q����wi���L�yp*�i�1��<��T��bX2�W����t*�����fS���sG�/NVao�=�������bbX��7k��
xX����L"�c������9=q%�t��b�3�a:�n��8����Hpb-
�����t�
����D�>i\v�>��?����sG��lq��W���L�X.�L�V����C<�;	��z����<�������w|��7Nd���t�������>�L�cc>O�&����X�����W����J�������)���<V����~��Ji�1����1C ��,����,+Q�)_��	e�R����'���T_p=D�[��	�yT9����&>B���&�~Z���u"���{v$8_��l����W��~���������=��\��y��w�@�x��Kg�r^M<��{��O����v����b��%�����y�6�/����ss�.p{�)��'������$C��sT�.�9�����c74���~�G7���,4.�"���}�>l��������-���
��(�������{#��s�/|��{�s���%����$*���?�wX�'��MX����0d��#�?�$(H��g4��=�{���?�l�M6r�������o����>�f������^�~�	���_Hy�s������������~IS%��i}�b�8���m�	.?�^��~y�=�m����#p��z>�mB<����������%�J�/>���pdHD�;�;�����h�� �a
����������P~�}`����<�Kn��iog����dr?���Mf��Ok��#�������6j(�g�~@\���{����aX~�f���������?�Y�����i�=s�I�q����a���)�,_�X���s�t�=�.�|N��������[�~Z�`����/����^&�n��7]u,4������>f�^g=a��O\��?���������������!/���>o���F9�7l���>�cp�qr���z������]��������q������[n�����@���cy:�zh{���q������6���� N����`]���s�)M�uQ0�`]6}Q�}�����N�	�Kx>ea������s��A/�X���'�SL��������3�WDe�&i���R|��GC���q8����'$�vIQ��Jj�K�7xf���!@K�������%C��{Q��G���r�6E����~����������{�����<i���~��
�ov���ko��Bf��N���������`��l2�%,c���
������+�,MOC�k����[F_g��������$=�����T+J��;~��#RMV��U�+�b��!s����C�,rT��%3��������.��S�z��/�`�;�+�������+����L�=���G����`=��,.�/'��ko|��?��������d���J��w�:}�s_��Cx�������?������$��{n��3�?�}�qde�u�eq���I}	|�3����F����C����kY��wz^z��p`��x���u�U�K�����	���r//�VZ}�)OG�G�����>o��b+��_+�9�������/�?�E�������������O��	�����7>����������7A'A��%a��W�
Q��cv������Gc�r�W�'^rc��E���8�������;��4q������OG��]���&�����HC��`����0>�~��0X7�N����
���i�q\lc��*���wv
�L����g��`����x�����v�*��a�\w���q�s������%p?�=��G�������6n��C{�v0�K��()Y��N�G
�K4�_��(���+�.�G���0}8�Bi���OFy�������W�S�{�����)3gb�Ma_�u
���{���{��Sw+���T�=O�W����N�������
�����h��{��f���8�t�x�R�&!��P�G�NC�����^a-Iocq?�'��0X�7���r�F�����&�H�E��0f���Sx4:O����������M/���k�������E�2
M��c��Pr]V��6�	$��%7�F�8�[amP�v�����IS����A�,���+��6��5���OO�������v���?��-�5<q�|�c�ip�����m����}�#���h��_}�62���}�Gl}�qN�a�{@��^x���I3f�,j5���~��7�6��oGJ��������&N������@q����w�(��=��34�<�|�A��FH_{@��N0~f<��~.����>�V��/#��X�g�������g���N�G������z���>�����[$SM|U2�b�x���X_�?���Fx�:��k��MWi/3��y	:��g>��i����#��vy����OQ�&a�����q�5\�-^4��t.d�|������r
��������E���,��
��~�+�Pbu%���7��#�	��ws;��f:���N����<��GT��}�6�W�n�G������Zx�o��^�:B��w��X��_0X��~�A����!�"K��n?�/��f����c���k�k�`G���'���t���1�=o�����k���������N���!{���f���U��������t�n�{��'���;^=��g,������+���V��I9��]r��5g^�b�����tm�?������'���{����>��)�<�����I?��l>��E����9�u���}���!�{;A�:����
����Z����~��)4>��}��c�I�-o��I����Z������<+���'��#�M�G��t�m��d����'�J���h�-�uQ�����d	�7�GNt����a�j�wn�\��\]�����G~s����_���x���M����u�d��w9E��tv.��oK�9�?�?�v��n���\��u���o�/��w��Yf%,����C[���������!�#�CU2�TP4��U�c��C�\��{�v�<�����%Y���r�@��@'�5V���x�=�,9�����D��zn�"����+^�#\'^����P>o�+'Yi�%B��������3�����������~0=�R������mw*�$e�%�����������S���$>������GMX,oqN����`�����b�f����-��HF2��0V&kxh�e>�s��z
�4��#�y0t��B_�������������AK�G^��3�*e"�CG��=�O��ha)@n��N0�-���������&�_��r5V	i�J�w����o�b�^���57�+���!���_Y�[w1����n/xZ[�^c�8����]6�4x�]�7�P�����6������d����f�%/�@~_�~�>���h�>
����3������6
u��?�����F_�$?�_Tn0�z����=��c\�F��cw��?x���|+���m�yz(�������n�Y�a����%�V��jk����x�=�g�M�w��k��gy���� ayO	����r�+������F�?h	��]o���x!��
���~
OUy��O�������^�IkF���99N�����3���
c���-c+���u��I
�CwK����VWy+��M�pz�+�T�f��_w��zb��������M�~��X������R���>��>��7u�_��o�������/+�����^�^�~t�),�����w�n�*9!�->���O�z��P��7�g�����k!�����-�>������O��W>����m[�G[���~�tg|/��>���p�D���#.�������z7���Wc��#m
������o��<��<p����I�������f�og)+e�����$����1����P��������CF������>�a�&�=����Pj�g����x�o!c�GY�f���|���o�����*���O�`d�s.��~Q>
y�������i�S��'Z�����g������g�5?��a��?%�����d���������yr�'��~@��y����
���%i�K�����m�\��Y��#�������huQ���~U
Gb�����xJ�����|Nt�������������[����?��p���ysw)�U��GJ����3<�ygv>�L�����p�����8�f����%#���*x���}>HI�?����������Y�aMQ=�`��Z�����3�����2�/��������(���%Y�f�5�������\��/���Q��7Q�F���==�uFX��^���0Xi���Sq�gR�?����A,$>�����7������<X�7{�a���Op�x
�Ndzk���T
N��a8B��a���OQF���?�z�.�'k�f��C������:���G�����>x���.����PS�5�Rs=~�z��>���������{O�A�B�*N�?���.��h�KU�����_��=t���?��@�6WI�e�����0����Ro�c��Gn
%1x������W���ObSt"(f��w��0��u�y��:��w�a��=�N�x�k���f����?s����]xw[=�+���+��}��2��_�>�%�G�z�-�� Hz�_�����:��Ffm��D�?�z�#.�p$�Wr���[{��x���&�-�6q��y��'����Ft�cMq�����������}=|����o�[r�;�
��������������P#�#�1X�0e5��;a�~�Du�oWP�Vi�J�y���J�'z��������[0�_��\�g�p<a�D���II�t6~���
qC?�R@8F��6L[�V9�0>����{gq��uw�
���/�y�-��S��w��)���_���m9�����o�����F�Op����},�.
#�y���`m�=.?k�=�T�o��YT�uY�a�����0���1�U����w�A�=��g���C�@�[K���w�C�~��v�!���������-������M�5_��_}��&9���bCw��]\k�X�`�A��S�yv�{����!�������.�>��H���X|������p?�)������[��?��9�u����q��}a��c�����������c�t�~�LY_�7�Y8j�e�����RF%�Fk��<
���p��k2���2xG�=�9��G�7���������5��X��q�~�}����}����7*SqB�����|�o����p�#�9��������������;v
��z�=������ng���<��i�I�c�^�)���h��d�/��������1�7���C~��+��z�����?��k�:�S�����G����'-��_�?|�����2GO(�(md�s<��x\/���A-���;w���I4�Y����zk�Xw��/��U��������L�SN����8l?x��#�<yV��g�I
��8�)������6O��)9����e����a�����)�������8�P���Yw;<����������#a��>�0���p9M��[
��q�uJM����6Y�a�t���6�����r �%&�?�JD�?�������U���d)���q����O�.����'�����'+����������tIX����6�_�?���dDk~����"z=������+9��zSyQ}��{�W���+b��*�m)I-�?Y�3b�f�
����X�o���:��<���8�@QgP����Z{i=/��E"�'m�#��w��L�Ozz�5[j�T�1)�2��m�����&�x�90���&��*}E�i�m&w�*�q7���<�;�/5��2�X��ee�7�i�p{3x)��9�$������;����h�c���������%�x
��xu?10�O�-�YZ>~i��|	G��w��C�������-��#|7p���g~ ���i�_��/}�c/����}��1���q��J�-�Z4m��n�wS���g���?�{�L��r[�9_�aY���,�=�I��d������NmZ������v�]�%>������|\w��Cm��w���\�������qS�J��!F�={��R6�,��,}�k����*w��\���d��}[t���uF���]���/��O��a��s��u���&������������Y�����������Z~,���[(>��d��e����5������Z7k&'������T���
��oO��O9L�� <���d��I�%?�f��cm|��F���B����g5��I�������X$��k��_����S�3�b�@OP����z������Q�~��$����s�y<���^�~���^���7������{^-��9�_yR�~��[u�V8��������Tw���q�t���zm�����q%?$����!�����v�o]���F������e�`�<x'}����9�-���[s�6n�	}#�������8R�O����Y�fg�	��A��8O���Q���3���~T:�H?����^NM������_�/�?j�1U�X�i�0&D\q��N��EJ�I
�^�6,��'����������1]iz5��o���W��������:��3�7j�	5X'����4h�`Mo6Bj#$$`�����$Q�!i��������%1y{!I��W7�l��_O/����5���}^����Z�������{>y?yr����%�t�2M����)`.�OjB��������sd�l���'_�k^�Y���)%[��n�=��x�y�ME�*o:g���)z$�7X��7�����{�IX�rG�s����~���/m�YY/��m������{���nO�k'���Lq��y���ig��^�����=�n�|$?�:�������\>���fq�?�Y9^��y��:���*!���N�c�WZ?.����'�:^�H���������XMa��_)�n�KZ��4z�/�w��E���_\��z�8^�����?i�m��Zg����S���G*�/'6R��_�����G�y�Cw�#�� ��G�~)�'�Bn�qqF�����<o��8�_��������B�9����$���|���q�?���k�m����W��|�JR^���,��E����U��*����M�F�kz�8�����L����V������7�����z���[����As&���F`�����1��n����x���4Y�.�q�������@����_1`����rV�v���eI>���M��'�6(MI�b_�d���l��`��_v�`m��A=�1:K����>����������o�Q��)i�f��Orp��PN��Z*c-}�45��H?�:�8e|2��<�[�|���0�����%���_8�S������}�g~��N��l�3>C��%[���SxT�X-��A��&���1�k��r�=���	��~����.��_��9�[�������m�����y�������b����%���1~?�E[���4����4��q��������+��a�{���CV����q-����+���7�Egx'}�0�^�BN.�����������e���J\q��?Gw�-�wF��;�a/���l��3��t8i���M/��Y��?�����^�m�M������7i�����#�t�MOc	O(������
�?rY��>����:!Gx���S������������/��������������Q\�*Q���(������t��������O���o�^F�q��p��M���3�?���9���a��*�����up�����p����:�<$�h��P��{���B��B���L�����JI�I+Zyh���������<����^����D��Sw�m%�e}��z?���}w��I��h}<�bA7$�����C1h�|a<=m��g��W���MZ=�<�����w>om-�X�S������^��+y��w|�K��gq�d����h+����#����eH��G'wr����.l
���K��>���k
u�����9�@@���L�����.
u�om�?���J�y�F�^G�c(�,
������ ����W[����X�+���������W�w�=������_��7���]{������������U�z�Y��_��i����������1t��������$s�������S�o���7Y����p�K��>s��	����/+���\�e%_����&�W��"�_��(\->��S��������b��8�_\q���j�;���e������
��oQ:������j�����u�P�<���{���������/������Jn�u�p����<Yf�z����:����/n������N�#�����Y����i���� �S��.��6�DPo�)������x���wL������������>�;=�NN�B���E
��D�W�����ru4��������,���(���r�x�}�������f�%�(��~�7x��9�Z��Z�����?����M�
=���S���^c���kx�|J;�]�D�w����wn3,�"��%f��c�R+��`}l<.�����G�o���2��r�B��~�|���Vi,E�Vfq@3I�����J������E���ew�i�W+�S���������f�����t�����:�� ���[i,E�Vfq's�<V���J������b��/���pLo���@��X����������i��c�8��^i����/�����b�����q����s����M���[�������Kb��������?�g7w�f��c'�����<���)��[lT�[�MK�^���8����Y�V����r\�����,��-�s�����Ec�2�=��������kL��X6*�RQ��YlR��b�>9P��J�,*�2�=�-ULCk��*�**�2�����iD��@1o*�����,�|�T1
�-�������,6�>.���������r+����R�4������r+������F�O��/����b�wK�����J�����b���b�>9P��J�,*�2�=�-ULCk��*�**�2�����iD��@1o*�����,�|�T1
�-�������,6�>.��������(#0�8�l��n'�\�F(�R����9�����r�g�2y�5�le]�x�$,�'����o)�K������zDL��*}��s_�m��i����������!a�F���8�v��)8"}��9{N�.lc�Zf}��lL�`����daY���	��BkkqZ$�8�}�+l��
� ��kk���qg�ON��y��U��_
�y�#��o���������=�=7b���]6�<�-�����X��d�����������s�n�	k;b�\x���	�4M���������>�-M�_\�`����;aO��
�I�q�`����������S���F��VM��;��E8����/GZ�R�J���]���D&���3e�<
_K/@�o(�����SZ��J�2��j�p�4�tl9���j���n��m�z�!PcR9���4����o�+���E��xj7��v,!���HI����_�2�<Lk�,l������b���"�!�0][���?�������f���o�����������,���/:g��(��Q�e�|"�T�B��
���2����/����F�����+�8�SB���E6�b�"�#�MJL&|���"�
e.L�f���G�����V��������06i������G�C�	y��U�E�����5)1��qVb4g�����`�E����L�n������u�wuJ������H���D��[���?�X�C�	>o!�}��lk!�������8���tL����_!��U��������?��hE������%C������M�B��<��	6���#�����z�&R
G��2��
������Q����m%����,V~����J�����<�
�r:_�����Y8��4&����W��l� ��$mh,V�� a��o��F��q_�i ������ZY&�J���s�5��e~��g�Ox���dU%���(�_����U��������Ou���P����5��k4|�/�_�?�(
�y����T_lHG�q����_�.������T_lHG�q����_�.������T_lHG�q����_�.������T_lHG�q����rk6����#A������1�<�g#�g[����aeh!�o��?MR���aIH�x+��HRC��g��`yHM�\��XY�8���Jq8���_-}��hx�����W�s�I6�����gk��Hv
���O���&l��c����5�?���?����X�Y�������&l��c����5����������|�Z�����������5ak$[}�8����������������>94d�!0Xo�.F�D\�hT�<��eh��4	x�`��<)]+K�A������Yi�V�	�D��:�,��������f���4���9��z�
Q-�L�H��2l����'R��D��|d�j�?�8l��F���Y�JG��p�3q�y���b\�%!����|������7�_j�"���"�_��Y�j�^�D�[IV<�T�����'�]�f�������'��q���|����0�Q�F��������2����i�,��BC�.k�O�?Q�p5��	W��)���3M��)V�9�-�a����_���xXg��"~�����J,�*H`I
��QmJ���Z�_i��pV!Fq���@H����5�KS|<hY���'x���+��|�a6<��O�1����i����6�
��F���E���D�����D�?����R���7�����gM���Gy����kO\]��#�����+IE��/_#���Gyd�������'����TNT>��'>Ts���j��������-^���q�A����W���Ke�r�N������q�����b������L�`�'a��.Tf�y��������+�8l8��]��03V8�W+!�|H���oR��4�x�7#��
qr�)�����<�����S���[�}����=�;��������S�����3�O���J��|b:�����H�W^�7�_�*Q����C�������
�C���P����zY��������}��W���g��_bq���S�gH���w���!�VtW�������������p��O���������n����3�?Cf��xX��|���������"9LH�����y����b��M$��#�I�<������gD�$��.����}�2�V��.%V�L�$�R�4Q�
	�Y���Je���
�]W�Y���"�0�)��T�_\���J2�O�?E�a2TTW�,�������(��L��Q���IPQ]����������<TZ3Q�F�[$&AEu������7�_���Pi�D��o�l��U*��7����:�C�5�o^�	�0����yo����X�)<�<)�,R���*0��I!YC`8�F��`�$k�T4X0HJ;C�*��)})��Q	h�F���I�BXC�a��K���: ���f��x��0��a�};��m��O_�-4����a��gq�vV��D�q�e��hH��C�5��(��!_��Y}X��O		��-�����>L��������/������3��_�w�^�z�Y�W5�y���.���������_;a����>L�X|�og�a]\q���g+#\o�L��_G~���_����/�oV���������7�_�{���	��t����vV����_\�2����t��u��O����Ly�� ����~n���`�L���`r%/?
$��R�'��<��D|�(k�N�HE�"�xy+j���,�/@a_��P� ��")i"]�f���~Rm�C���9�2��[p��#�0��__�+�����C����a:�?��JQ��T*	e.LW�gy(sa:�_��(\E�����a�\���/�������Nw��B���pa>�9a:�������'�5�C���k��0�O�?Q�D�S�����:'L���|�s�t�?Q�D��O�+jJ�:'LW�.�9a:��������I��Nc���	��S=��H��xj�5�D,�I[d�-
�A�V��m�Y�)�g��(q���,����?�X��`��FkY����O�1�m���(�����`�4���>���pY����������&��o�OwC?������6����������q���+���{%r$��y�=����}�_����'�=��^���1C����)G<��WV��(Q��������xY�2�a��_\&*^f��VO���/���tE�:�������`3D�����J���|��G��?�����������^Oz]je��!>���MO�*��������ns�sj�H
�{�UH�J�����X����+!d !���G�f
$�2#d�R�k�F_�+45�_�_��/ >�Z�8O_���[������}���/e���_��
#����!�>?����(f���R����5t�=�XW_>Bp������L�`H��������1kL~�\����%��
��kwr���,�x���n��I���5L�����~{�oP�>��iB�s#F��'N�F���[-�?�`[;O��}<*���
�u�y>�����������y�L~�^K������E��m��JL�?�C~}��T\�_V~<�����'����.L��1���
>���g�����(Q��ra����X���l*_�<C�K��E�����O��c�"T?�z��t�����O�?y�`�#�C�a��T
~���3��D��O�?Q������0����R)���3������?���`���<����"cS�O��k�"l��h�M�TDI*����V�r�O�����=&-
�~�Dy��sO��
1�`����
S���|�)m�Y���rn���n������X�b�������:
��W��"�I�|�[�h���_�������,�F��'Mu�\;8������~��������q��������E�����i��N9�,�����A���u�i�}�V�:�3M�_~��{��Z���}���lg�2��7]��^cB�����%��GO����M�2(�q[������c������{^Y*�3�[L8Kk�(�?�_��7�?�����pm�����&�>Q���'�I��C��R�;{XK��X�b�YZ����JBy09�5&w�K��X�b�YZ�(Q�(	�������Y�k,�ocy�	gi���E��$��_crg���T���-&��5�����PLN|������R�6���p��8�_�?JBy09�5&w�K��X�b�YZ�(Q�(	�������Y�k,�ocy�	gi���E��$��_crg���T���-&��5�)�_�`]�5_������l��i�#H����/�����W�L���������$����`J������$F�F+,��IE�����0f���mkY�DK����B����}XF 
�w�����0�����y���{�	k�d3��~e��fi2K�@����b��h����u+�pm��'/�v��S\��h�d����4r����*&��n��}4n��W4���:�o��L�L�R8�Z�,�gx�����]���[o^r<J�K�`p~5�p.M8����u}��D�'�2��0X�����u�������Or����g���?[�_��DN�@IDAT/� % �[�&��(#k���<)�~���Z�����Z������(����7�ya:��_��Q����?\�a:�������������B������'�����X&�����!S�E���B������'����~��7c��	*v!1��?�9��4��mZFm�{������ � �`�������Q��pz��<�Fx$xH3I4�}P�W�=���v�]�u�[@a&��X��t�F�c����%���/������az��7Zf����v�����*�[��0X���
i�i��o�]\�V���'^p���f���?�����'����s6����mP����nEw����p<��?;i/����~�zn�?��������^�!��k,��@����K�_����������X�����
����:��p���I���C���W��M~%��x���SQ�������h�J4d��������8��,����|�oe�
�[���Q��&�Q��Y*/ca>L��Q���/>���/>��5>��{Fx��o�)�\�g�|���6�����+����5����� K��X�����6�?/]q�e��d�s(���*b.��l>_�[o��'�t�`�R��`bp���`miLRo]�z��� ��$I��@YAT�B_��ER)����)�_n\6�.��D,a`�`-�xm�	�����d_���
g}@��u7�I�����y����L<�7����m:~���TG_���e��ki?>����������s�PG���I����5Vl�F�Hp<=��>��4����w����S�1
xy��k�H%���wL��� ��=�
�E����&��^������o�:�(o*'�����I���`���?l�KZ�?7���/�?�U�L�E����y�����I|��J!��?��_����������s�T��O|���5�=_By�4W��g���S5f9[�e��ki�?������������4�_%8�_\�����?q��������Q^��K��|����C�x����t9#��B�C���y�F,ts�-p�}���	F�6�5u_O��&}?���R/�6���-�4v��i�~�3G<l�-X�.S���=�{�w���3����
��`��XY�q���M�U���_L����><�X)�?%�/-�O���5��q��n�Vh����>��q�7�fx�<}�i��q�50������`�^�[��m���Em�l�6��&�d.��1����F��-1��W��s�N�%�J���N04���5u��N��r��<���,X0�t2Q7���nM��zX�y1}N�+�qM6h87	�;e*�tn}�����Z.��j����B��Q#7��i�K���Q_�6���
:����j��8}�`\2���2-R�1Nena�e��vXa�����d�+K_a�,la����
�u��M��7}_PZ�8�w�|��a�xH����Y�����?�/'}�J�����.�����wN���h�?��[��v����h>���.��Em�,����8,]]�����6V������xj�+����h��J����-_�������H?���D�lUWW_I�O>�o�
������XY>�����L�VuuE�������J����-_�������H?���D�lUWW_I�O>�o�
������XY>�����L�VuuE�������J����-_�������H?���D�lUWW_I�O>�o�
������XY>�����L�VuuE�������J����-_�������H?���D�lUWW_I�O>�o�
������XY>�����L�VuuE�������J����-_�����������z;`U�������������-���g����w����:����<�������sw�o�����W(LmX����:����9}�T��X<���b�:|�.)���>���AbTN�(V1�����m~2�<��6&1� ���z��n��v��C��%���_�Q0��us�2=�����z^:��0{��5k�����Vn�M7p��~���)�y�K����q7����N���m�\���|+9�y��:��0����?�>����4�
���#��S������12f(�����.��3s����u�7�H����XN��O|��������<)�B��q��]�u�o��g���|�p��an����iO
Ck���	��<W���jcw��]SDF�����E�K�r����������k{Z�����4c�k
C.q���w���\�-6rg��=��$���w���Lr-�5q��(W_dQ@S�^W���� �
6o,������h��(RT*v+X��(vD*���)&����Wc�b����`��,v�" ���v���s�����OE���m�3�sfg��9�ki����c������{u������i��=w��0�#������A��&v��g�8���;�=
�.`���������������|�g������j��@�c����jOXgi��[�_������-��?�G�!-K[\�"�Wn�;��3�����Q�d�o,���YH�y�����3�Q��y�����Xji�����x��y^�3D�+��r&�k|c��-�BZ�����ya<c����7���������8i9�7������1C��r�(g���7�Z��,��<�(��3�Q��y�����Xji�����x��y^�3D�+��r&�k|c��-�BZ�����ya<c����7���������8i9�7������1C��r�(g���7�Z��,��<�(��3�Q��y�����Xji�����x
��yX�{6��I�����,���4�5J�sj�D���������l��;
��-a@�c�����������.!��]Rv���!&W��T�a���cG�����~fA`�Y��|x?���0��z�9h/g�3C!���q#4%V
������#���<���!I
I��i�&��h���re��b
�A��4c�o��Jr�����u�O���G��<�
�:����������G����F����[t���#���y}9(J�>+�o�����Ve�����^�^V��
W��jwi��y���6��A��1��Z�k�����zfl���E^�2M��iw�,��I���!���O�'6�&%���l���?�_x��)?�]wh����i#���WVX�u��o������h|����#�'��h��K���s��Q���J+��~}�/�����52g��8��5��R)��'���_�U�������m���a�#��=��7������%d�V\��c��?�����'�?q���O�Z�j��%��q�5���o���Jq\	�o�`�����^����}�������Gv������������c���-��q����]���A���F�����p���=�S����i�^��r���2��pSH�q������N��"��,v�`jH �|P�}6�@N�n��%o���Mu����^�����]I��yN����Oo���]�v�����v�\O��_�������������5=������{�&0f�z������u��Q��H�������+����h���1[�9�����rh���g�U��s�D/�&}$s�������9,�����8���+o���^Z4[L��/<�[������z�s�����c�y����'�6\������&��o��`���~J0X��	]��~��������n+u����
G8z��q�|a�9w�!��%�L.�����C��}�[��c����������������M������A~�gk���j�����#�K�#K�A��'�������w=��/���$�|)V��7nT#W�����]�Vd���0>u^�=V]IV�3V�*G�����������}2����G�/����������.`���zA.�=���0F���G���
�<?�fl�)��R��2�[H��W��F���<"���(E<W�Oq�y�fFK���j��QN�����O�?�!Lc��O����wa��s+�_?���������,�>���i��`^��uL����Q�������+�����Y�������.���C>����s���mrC��AXd���d���9/�/������<x�"���O�aK�qLC��c��qLqs�|�������Y~�3��K8i��`������9�'�8��Lq"e{=��k`���k�~V�c�Y^�w����s��#`��� ������ls�5�����>��>u��n�9����7�UR�5Eo������d��_#�����f����F��cg�GF���j�;�Gg[������8n���+�7�EPVwH�M�`�W��Fn��\��S����Z���{9#-q]���2b�rT�2�����v�L��9 ��wX���u���n����q���,��j�u[uyrh�6��r����H����{�Sl����!�	;l��A�N��a}�V�N{�\2hwt;�����%� ��H��W�3����y��^8��wT��A��_�~�=���������S
:�_��Wy��g����s��	2c=|}
G��i�>t���@����8�}��:s���z���K��u�	�mk��Hp���f��������T����\k���	e���]���H��_y\����(q�q^��Xx�_>���p��Y����3��"�u>R24W��C��~��K*����x�/�gI��+��Q>�<h�����`L����rG�k�1^E��/�����T[?����STn06�l�Y����1����������U�?�-�^wD��:#�H6m:�tL�����7���U��|���G�)���l�xj<��2�C�_��Gm	S�������O�5��������N�?�|�����4����6��q7w�3�K>���d]x&_8pW���=m�V�C���8�x3���J5X��`���3���{��y:
m�e]W�('w���������]�������]��)+�`��O��Kv���k���o�%��!�.���j��5��+-qD4l������_��j����w�^k���=���d���d��V,8���
a��f��<~�>�j�	�"�
��{V����Gj�|���r��[�
x'�����}�E�.���;��k�������,>���-�I
���n8�"��������w�sx$8������O�z���-��"��D�>��[������}������(�#���&����K�8G�O������<E������<
w������{��+�w�����'�s��X������*��>���r|p@|����g���C�~t����wr%v$������(}~��C�R	^��GqZ�������??�H?��H&�d)[��$Ggy�;���������8���O5W��2�!����=b�Z_TV,Mai��Q�F���pvX:���C)��Ee&?�������7�[Es%���C)��EeE��-��7����������w���kz<3����X����F���0,��k����s�i���2��A��={�<����a�]G���q#�k�X���3�1���)�>����^&���;��F/\wY�:�-3y�[�=���xB�x��.K��k��}�qt���Q=�K2�����f0������\���K��������<�2w��3�'����Vk�e�����S�'��7E��e�5�+��<��r�ov3�����Q�=L�6n�����=�=m������,g���%y���r��[H����t$x��%
+M�!:����������������8�C����7���wn����=������Omp�����������'������g�H�?��82�J��wb�&}�x��~�ZJ���$2��-_��t�U�5�T����6�����X���������e��j8�m�^^�;�6���J�z�)��3y5X�?�����!}�l������gP������+d�U�X��.��+����*��*S>����|��%��8�(agJ�?��J�)�����Z�?��z�|2�������Q����,agJ����������$�_�K\���_���O8_��������5�V-�Z+5(���������7�?��#�?�u�k�������#1X��sc{����������yc�'`��m�d���,M�4q,���ke�uV�#����<�����.���1^����cT�3{����u	���D�@�����qY	��u���[8������3�s��N��)���o�s-�����<� �A�����h����re�������<��>���N��Z�:L[��z���x	�qi�p!bI���x\Zb�<�PxX3����=��'�����?	5�Z#��(;��A�����D��^k�S�Gz�_~�^D�c����W�����~>X����#���!�0�����#�yL��a�o�T��x��N��.&������5lS)����W�_�,�
jd����n���K�,�?��;�����0��jH�m���O��@����i�A�_�v�����D[u��h���y��/��������a������u��S����]�z��Q	�UH��1=�1CPN?O�H?�3�]y��<Y�������� W(A����{��SQ��#Q�B���&������`����i�P~��8��G��O(3���U�?Q�D�����!����7���#����� ?*���o(C���c\������RG0��G���e"�gYq���������xXg����	NEq�T���1�����50����p�/�m������pc�M�b
�o�'���n��tJ���+�IC�N�=�/@�1�01�s�RE���f�2�g�����o_��Y���z�C��6i ����l�n��h�a��3��d��^��]�q���%�M�s�BY{�R�|�������S?������>���N����+e��s���	?��������O��X����<J���E���-��tC������\������^��� ��h��n!<�y��_v�������Q�o�d9f���H��;�������O6���<xX��G�{b��uG�U�i�p5�<�=d�)��}�|�URY�9g���{�/;`/xW�Fu�1�6y���L�������6�Dz�G$���d����l�Fe���q�5����sG����y<����\0^������N�`�T>;����(T�#���a�?80k���2�t[�.q��<��?�1�����m�w���.�O{������I���P���Q�������?�|
���F��o���u�<*O��'�?q���O��$j�PW����o\���_�u�C=R�����������(�o����L���G�����5�����n�S"�?����5�Y4P/����wpbL6�p�[I��k8oO�L���w��-������	~�}����h�6��Hoxa�y�mP�)�����q����t(/��&�����������Q�w���M�y���P}�u��&�a������6��5r���r�5���*,o��")���;��[g5��Hx���W.���?>-�r���a�<2�������
�(x�3��f}~��A���;���7\������r�U7������m\#�&w@s�~�.��-��u�_5���Kq�5��O��	�;�����d��4X+�������`��y����?D�~=|���'�zWN����O��?���#��8E���>+�_�������9��|����i)�������x?z�>�������>a����tnG�{�}�Y���qI�������}d���������gf��
�����\�{�m,H�����~G8��������^���a�������,-�D���4���[�}��I����sU��~�SvYB��|��79����*[����E�S>��g����T\,�JQ��RN�Z
��\F���������m�,�z��gfVZl	����Z�_��(q����3��H�'t�2���,)�%�������eZq�z��E�~�q6e�%"�Ur2R�?p�$C�c�8�8���1�0=���'q�������%-�c�T�_���Eq�������������`��#��.c����Za��8Y���X�>[�5��ig���Fm����e��g��9i��qG5������p�s�����W^^�Zcev���yX�S����I�j��t}u$��L}���w�`-G�8�����{���d�N�z^%��)zX�k��H����������o�O8�|X����q��k:�j����$`�����
��8�!���`7F�[#���Qv\wuYa�6�{���DeCv|�:�����������]-K�x�]9���d����2��A[n"oE�����0n��IW���[��g���<�����=d�My��>��p���z�X�7x�C�Z���b�&	N��y��u������$���L��������38��7F�]�ic��Fr�9o������p_�r/E��W]Q.�oW�f���P�:�A7���0X�Ak��Z����^1�f���7�ag�n��r�������py�4_���z��*�I�Bim�> K�3�$g���I{�o�����a���W�C�zO:��������~?���BX�����<l�q#�?-J�)_n�l}��|1�D���06��6�B�l�|��=N���e��O���J�����N�����P^����|m�>���q-��Pb�+Q�D��O���u�jBe����(�DQ�>�?�%�J(c!�����'�����1�xV��&���\�>������P�������o\����Ey�u���r�$G�L(;��� �ec(���5w�����X���L���n�d����<=z��26����K�S:�Y0dT$~x/�S�I�"(�`}w�H��7
�� �`��a����	fF��@]�m+k� <�l�P��al�#����^��E�GO�(O����Y��m�����d�.�e����[����1r��;���������[ f�7�c{1��������j�YL~p��7~��'O�X�C��n�;W�0���XMc�&`K5��3W&����U//t���$��E��79c0�\4hO��bT���|�=yFP[�P���Z���J�$�=����;��gX}���Q�Mp������/��/=~���3c����r�s�T1n�fgY����-���s|��K�v#�z�~l�����c�8����=w�mxwx2�	��},>:��Me'x`/���5��)xW�w�1b��(�KqWtW��tE�z{����{���g�=�S�},O�i(���Z���p��T6(����<M�Av6���n�����d��/�����[�{��h������6���Ls8�����I�C�|@�O��5�Ef����qo7��{~I��o����|���o�R06�O��>��n�Y^�|�+��rM{~F��x����6^�u���@%�F�3�Y�GQ���8�*���x���%(��y���WIF����'�����M��uQ���tK����gC%��8�����;��dC���lE��O�?�������tLmu��6������}�hmms����q���_�a�k�6��|%�;��9��'_�p2��$W��M����}�����cg�&D#�����!;���D�Q4J����{�_���{m�����D�a=�y'ab47s�1M��#�yY�:�(|�����ns���'��6���~)��x���#��a=�}zG+��Z���zW�U�&�����(���-������a��|�Lqx�w���n�VGw�����9s���o��L��hYL�d��/��!6��`Mk	�@���0pV�Oc�_n{F�/��������+��p��x�g��Q�����'�L��}�D��H�����)�aP��#�qYG�=>O?!"��ax��'r������;;#����g��H��{��t�N�o|�X0��e�/�!W�"����V�X�]���*��'�����b���*���w�7u��_q�����a�����V��;��tI���Q�����1�N{e}#�0���~������lL�^C]�o|�X{���C���C�?�7��s\X�c�M�z|����y�G�����8�n������������G9��u��#�?��#�?���q��_����)����j�RWX�k,K���q�Qnx���UXf�c������)��q&)�3�2X�ZY�Q�D�������MW�'�M�xX���{b���H����I;��#���;|����;�j��m�jI�G�O�]�/��[^xU�O<��}(m���*�-����s'N�w9O����Ro�@���Ny����	�������T����!s��5�����i�����5�oM�wO���@�2�Q���#����$M����n��f8�7�M�����se��x��<yJZ���?%Yb����]�u����/�U��K���S�1�x������Yi+R"�������`�a���r�����lr���w�8��O?�q0�����p��z���A����A[l�z#�������r��c�y�.�e�����y�?\���A�UM��k���7��0�3�n��:-�������MXa��?��w���e���C����"�3�g�{@����2��������H�l��/|�p<�	5����7��{e���Y,	�����`0��1�����rh�m��s�����W�d���]:����x|�1��lJ�����h���@!�?}��G�?=q��K?����
v�O�����&�H���W�d�������7����T���c�����X�X<��G�u�?���k��?�m~^Y���i��[>����8�����y���'��6Q��5��y�u(Sg�����������7�?^���7�����u�J��dW��z��g�}.�?q���O\�^��O\l�������?O����Yi>o��8��q�]t���kpj�#J�^=�y$x�1�V���J4�Mp�8a&���� ��K�)�$%9u��e[�L�G
�]���iBC#�0���$�xh[iy�J���i������w�����P:�xI'���wT�h���Wn���?�0��?�1�y-g��O���'\�6�d�V-��;�����>d{��w����F��������������e
��o>�Y
��O ��68�z�e����\�~5C�!?��P��=����X�p�W:J���G�h���������/a�%���������C
!^#]q��5�3%Q�k�b��n<���1�P<�8��G��n�L�������r0���4O:Xm�vh���oz���`�J���},�����C���gxY������T�����e^��~�un�O�W�gy���K���2b��c�s��t�q�U��yYb*�����o�^F��!/����7����az���,s��RYk�c��M���_��yc����K&����tX*+#��l0�b������7�����yb���%�o��^:,��JM6�\�T�Q�F�[��uwXS����Vgy�����.�k5��D��I���+O�S�����J�.���;t_���4����:w.�I�m=��Y�R�L)=$\�U[[��*��pO�����.�F����'�5X;��yO��*�/��
�b�����$������������e��5p��2�S;��c-N5}�����T}��G������;l������o���x�xu$>op������c-W~�������Q��8~��!OLF�������K�?r����d����T�q����$��N�\)�/�������R�/�_�?���������k+�78�=��T�q��������;��J�|y>om-�X�Sq����_��v����_FH_��|��,������'����)�W
���ykk��Z���/��8������^��2B�rm��gq��(�h��2����q������mm�>��er��;g�|=�m�"�������Z�b����Z�K3x�~5�[�<�����,�O*��8��px8�;���N���r��oe+�8����]�9�9k���r��d�
�K�����gr�7{�6�\�b+�H]�3�.���c�U�U�UTne8��X��8o�pL�{�`-�-<�g|;'G��pXu>_[��Zl�>.���U�UTne{��*�QN��K6k�,����r���e)N��_{'�^������[�L�M��2��m*=c�+�M%\E�Vfq���@1�#���b�T���r+�8��J4"�#�+�F%Y**�2����9P<�����/����QI��[����W��q���WI6*�RQ��Y�/���9�_�q���J�����,���J<��/��J�QI������(y��8������xnT�%E�Vfq~�U�q�q�U��J�TTne7��kpF`N�5p���{���k����Q�FP�m;����$��u5�,�S6�l,����o�hqY5Ss�}'����<���V�;�u�z$����A_��~�8�rx���C�S2e�t��y�����������;��Ip���!��Q�Oe�c9N��K��S������/����x�&�K��{��x��FOxGQ��T-}m��6�il�a�>2��~j��p����~����9h�,�*��1��>3��gg�����5������J�i��.YY	������jL�,��0������7�eA%&++�E��9��J��������P������f�E��5�8�<��i��8����aZ�da����j"}���/a��i��0�-��!{���j���V�Y�!�0�-��!�H_y�����>����9��0]���/�q���7���me�5!�?��K��Ps�n]���K�	y��U�E�����5)1��qVb4g�q����	�E��2��y�K���L�A�������}�ve�nC/�I��j�n�z�Y���I^Y��������i�5�w}zj-�-5K@����<����vm�������Y����$�#$�f��+�V0w��<�����������o}��=��//L�H�q�h����7��`�xX��@H���2�l�\��V=V[Qz��wz+3�a3%,�#�Z�h���g�+�`��"?��\���i�r4�x�m�F.ac
��,���,J�;�������=2�����������>�_�
���S^6�����/�0h���5>�c���^��_����&���_�m\����9�?����mbyy1�d9��j��0���|b��p���
�h:7�=?�,g���� ^)�����0��P�X� �����T,��O��!�'�.H�B��z*����/�����|����B��<����v^�y��Q�F��o�B}��&,������5*�E\��������"\OX^IwXyoe!��pD�����O�`�|�+������,K����{Z�,���5�;��$��[=��8 ���B���D�m����������9��_����d�����W����=d���zt����]��������FJ��;��_{�u�l�����MkG�����O����������m�X�1)��L>��Jq^�4�s��n���Fgk�����~X���0��t�|�5�����(�U��s���7��s���`�u�V���Y���c����5������,�.�,����+MzY��1�m.�w�7����W��X����n%�^{5�D~�3j�%����K�?����?�?�Q�D�G�`:A5d���W��[�dQ[����1�������8�g(����_����6�r�dM��������D�����|q������S�0
&kQ��/�����'�?�LG�c����5���������#�9�?��t;jp�LbDv(K4mLc����6F�\�C��'����1����2x���I�Z��v���]�\\5m]L�����g<r�+2���]�Yd��&��(E��rh3E�v�@���9��
���F����l�%��u��V�|Pv������G���7>��ea�3�� .�����������5>�H����@y>?c]A�M����}���MI��g�1Q9������8������o��e����M�d�����Q�T���SQ������noLg�3��������o'�{!���:�n�?Q�F���jW����2����V��N�R���oYX�T�?Q�D�����L8C�L!��1M��)V�9�-�a���'���T���	g��)D�?�i�:�J=�B�ea=SQ�D��p�'�a��:;����]��nb��I
��G��,t*�Hj�~I���Y�3������F}�Yc��TB��H�Y���/W�'p��	�'}b����4A�����`#������fI����hq�E����)������2������V\�	����|�~e��MF�P�O�?������������5��2a9���)q����`zC��~���q�Q<7l�h���U�����8T&,��K\��#�?�����
����q�Y���3X�Xa��F`04�2M��_���rl��=�dKp����GQ�<m��0JY�v��$�|HG��b�}4d�,���!����ok%�5l��G��qz:�0����g�<��D��<���(�.���P��"!?��)ZPUN(?�WQ��Q�*�o\�U�P6��'�S���O\�����\Q��_�mx^YI\����<l���Ww�q��_�5����������
�C~��zb�
k%q��q���@|���q��9�p��������pC#tz��.NEi]����:���b���H��(|p�i��m|�7������!���������Y�����Rz���N��I�R,���Eu��"}�6��0�����(E�a�STW�,��8���-
�d&����d�d���RY�?Q�D���Q*�����-�
����JeQ�F��/gGy�4g�����H6L���*�E��o���������7��"�0	*��T�o��Q�rv��Js&����-8<ay�����:�7Fc*��l��� 3I�"��L;O6�5�h\���dM:���I��P��Q����+��Q	h\�+��z�"��Y�����/�|�6��������/���>�����k\������|��t����vV�E�G�SB���CK5��(���8|;��m��a|�������i�����Y�o����?gH���R��y���b����6q����_��B}�������^�z�Y�W2�y���.����������;a����>L�X|�og�a]�q���g3#�o�L���G~���/���X��7��m��_Q�F���i��~�^���a:���};��������5�
��`�q���������>�S��<��C3�R�<!�����[k|_\����(�K�9:��|B�HW�b)��T;1�=����&j���$B^��� ����9��s�<�<LG����_����rI�s�t������*�!�E��Q�F��om�3_��0�����	�Q�D��O�?��XP:�9a��v��	�Q�D��O�?���|]�s�t.��:'LG��O�?Q���bA�P������:'LG����_�$wX'�!�ZN���������Xj�5�@������[|�b��/����
�2�Q��el�W����������`��FkY���b���`���`3������`����>��b�qY��0f��=��#�g�++�q������b�'�K+3�Q����L�Dx���[=�&�_����������O��S�D����	?G��|��G��o\���������Z����?�1X�W������J������D��o��Q��60=a���q���W&#V�����Lx���K�����W�����d����-�j����F�,�i��}8|����J*��KX ���9:��$�z�	V��Z�S����f�4<�^7}��D�6 ?�2A�����!��f]I������M����hr�|}���*`+��a�:���|>��3�`�5�%q�^_�a��R+7�|��g�!�_�������_^/���PX��G�T��y�<�D�������0����P����g�����_�?Q������0���;�R���g�!O'�������'�L�q�?��)���|=�y:Q�D��O�?y�`�#�C�a�N�����g����'��������a�+wJ��'_�<C�N�?�d�#���@IDAT	p�D0�x!��5�LL�r���vR��*-m��$�`��I�\���`KB{�S�WU^h��K���Jyb��Zi)��5&������}���m,o1�,�qf����������R�6���p��8�����PLN|������R�6���p��8�_�?JBy09�5&w�K��X�b�YZ�(Q�(	�������Y�k,�ocy�	gi���E��$��_crg���T���-&��5�����PLN|������R�6���p��8�_�?JBy09�5&w�K��X�b�YZ�(Q�(	�������Y�k,�ocy�	gi���E��$��_crg���T���-&��5�����PLN|������R�6���p��8�_�?JBy09�5&w�K��X�b�YZ�(Q�(	�������Y�k,�ocy�	gi�����zX��`M3�3'gc�7H��q?�iL6�k^^�2W�u�u�U�C`I�N`��:���$���Cb�Qj���L����<�}1����}��.���w���P��}X���DY���+�?���"��^'|����A"�?��0]6�j���mZK���e��_&���w����E*�u>��gP�3��e-��r�x���,��g���k����v�����������u>�_�s����8���W^|��,�dd-���O���8��9�M���3N���N�4���3s-���OR��_���_���>�rY����'��O����_>����y�>� ��������O�D�'I&z���^�C�d��a������x���kLgj�����pl��Md����R�$�f����f;d�5��K���Y��kdd����Z8<�����m�Qy ��H��f�.hf/vYE(
a[����Q����Ca�hhl�.�)G��m-��j)���|��_���3\���8���2�_t|����W3g;�j�����C�Cy�g�%$|������z�%d��;�&�W��W�$�[/�:�����3����*A�gIg,������h>
YyYT�O�}1s�������>/���|��d���H�������/��o���Nm[��S<�l�Y��}����E���p��n���_H�����KXC,�����o�m(�[�{����-�C�������tj���|Q�M.��Q�������o�DsY�][�����������������^�������|.3H7eM�_&������J�����(��G�N��?����11����t����='��,��x�p��m����~��o��|���&-�l���:���d��O��B�����9�t�A���@�%���Y|^�hy��������U'���?�P��wQy����o�����w��g����cZ���o��O�"���(j��1�_���������������7?�������+�P��
�@0E�?�-�����&b��?.!�k*m��l��JK���0�9�5��~��������tk������+o��;��c{o!��4 }�O����/��������&}$Ox[f#��[��aT�C�m�����.jw���c��+��
��K#OoO�T�~�#���H�;���6����vl���x�w����U����~���F��������*�"��A#�������>��w�V�D����_�����5�3��aG��BY�������u�x�;�*�0�y��y��f}+�~=C>����W�����
t������Z��#��.k�_VZ6[��,?�f�������c�i�KI���A��~i��i���E�����?>�k���~�.�_�
 o��*�6�]�������>��=���o��wYy�/O#�0���N~W��N�~����6�g���,�r��Q����G����~"K4k&���-Z���n�g������?��`\Z��u|L3��p� o�GcV8�,H�A�X������k�&�As��><!��.�N�w^��w�
3���0�))k-�^�����	�i��i�����x����K�������k:Yc��_��y����3����]e;����A�OH�i��?����	��i6'4s4oc��u�0��?�����P��oPJ_[�|�u�_)/}��#zu��"�<F�?����;�������"�Bo����v�e3�����������j���������O��������	�o��r��)a�y���{�C��U����i�_	+9B7N'�^�����������5�ta5���Y#?��#�j����w�#��{@�����3�_�g�[��\���1N��
�j����� u�3��/�?������-��;����x��e��%����[�']���6�V�����8rM���>������L��}a��j�����������
��k�`��O�X���������?��W4
��^i{�����Qc���&��jn��$��4�Zm��e�vr�N=��b����{�/�qu�7�������D���B,��s|��[��o�~������{Cw\6)S����G`���w���
�[{%R����SC���b�tL����d�6-���Pl��
�eOM�@~w�]�|N�K�X�%��&'���+A���u�_N���ay�_���a�N�\�/��k&������h�eO�����������+�������p��o���>�o���S���2��j������O�5�����`/X
��:�}6]���a������O��~�]laa�/�q���[��o�@�����O='��}.GV����!����	;l)K@Y0��W�l~��>t��-7�����Q�����{�9�����W��W�o�y���N������)���A����x<L6e�����c]}�����Gl�C6[e�t��}.�<���O����|&�?�����!��#/���_����o�V���S5T���Z�y�_������������[�����a{�u���Y��
=~����ji�gV�P�?������w��s�
)M�L���o�!�O_��4oc���7�H?����������|����G�#�?�7e���T�TB��Q����/q��^1^x��yc���G�'��l",��Fcn&d��Lf� �
H������r���el���3���V'��Oa��w��������`J�5:x�����e�}
�������(���+]���V#S�V�z��>�_�^����7�ah
�4���k�~Q.{�iW����c��m����(O��2���xG��=<�V�:��[#Al;�e���nX�I���6x�6�V��7����xS����:c������=V|{o����x�4����j$/bg�_�%����p(|��D�9����'���1�����k�Il�(�9����k��r�����%�l�3�`���Fk�_FN�cG@��r#aI�"=��T�����x��������B���==��<��>�����d@8��|L+K��Dq�!����8_:9]���`=���
?��34�i(���T~�@~,������_����>DI�=b�������r9���@�����5;�si�I�������v�yR��m|�������H/����o��K����|0�|ym��6VV��6���-7�b�#��_�.K��^���"�bR�$�DG�M^I�ed1��a���-6�#����k���o:���#n�������:��]{��J���Ox�?����� ����1�h����������o�����wx�Y���t�������l��*�)��H~S1
y+N�������`�y��0j�������$�
�%@k�O�9��9>vCQ]�/k/?��b�
�i��uM��?��z������"����K��B����?��l\��g��Xm��O���Z���q�V��3�;vd������!X�5x�7������������H�N��yz�dQ��v?��W�*�}���}�w����$G�;�����?~p���������oo�Ii�OB���D}	�~�^�@���wM���)�k���<}�d�uWG�$�]{�<?I��
ex�1k���_������3io�����j���;}�����5����������������|��G����R����q4�C�M����������>��Hn?�@w��w��'��$����~Z��l�
������_��K���@�C��$'�x��/����/
��=X�w�`��S0&�J���A5�?C+���S�������=iG2
l��@V�i�d�����5���r��������-��,�'s������b3L'�N���R ��1�_}�O����U����>?��P��
���>T��d���1�h����?����c������m�J��:��2�������j�w�g�=�=O�.��>[Y>&>++�][]|%|�'W�7�o���Em�,G����L�VmuE�������J����-_�������H?���D�l�VW_I�O>�o�
��u���XY>�����z�J�^T#s�$������	������i����II��������/1V
<���C�M��p��RK6�M�oW��3i��K�h��d��-d�5;;�5_F�{�}�����^!��B�����}���8cm�%[��0�,���l�/�5����&�l�"��K����������?=��a�<��j�}5�k	^>���.��{�#��',mp�"�)|_#[��X�d>Z��g=x�6n�^`���{F�Q��yYx����5�"<����Uo^x�^puz�z�����8��o����2mq�o�����!<������b��{Y�?:a����5�_z!�z���|	|�R��=I>�����c�]s5�o���P�^���j�.�^��C�-x�~0���G0��7�w|�u����������,{n������X����CaW��B��9���T~Q�
�������t�%d��V�
V�4�d�s/G�$������gj�c�(��5c�w_��h����%}�	lO������\��s#�;�|��}My����Z;�Z��,���w�f���0���;W^��9��u[���������������!~�#'?xV+����C9d���a|Q?
�/����/��$���$����0���/��a�_z2�_J>��[��|B�G�Wu�?k/|]�VgP����\*��8S��F�����
����#���# �.�`�IC������C�����F��o�o�7p�w��K���u�e��j�w7�+c��d�\���-����E��Bz��l����nd0����x��������nN��Q0x��������(�I�?�;��a���������5tW}����?Q��ml?�����j��
��!l��J��F�e�������c�e�#�����[uY��-&�����g`���q��K�������?�q2N�xz��R������6�5�i�� �a����������n]��n�����1����o����*L�s���p>���A��_������V�G����'�,>�?������gn�A�w���qH>4��#�7��-�BR�x������8I�C�bs)N��+aOt$��<
[���_<E����p��_�Bk(�oNR����2x�/N��h��w}�_C���s��;&^d
t<�gz��cP��u���0_l�^���������u!,�u��������T����\����O�z�����1q��|�GF�!
~�&�,]-}Eo��8 $�&�|��X�s�OK��W���H��of-mq�'���^��R�p�A��!LnP6�m���p������_����pxz���J��z��o����)'�x7Q�B8VK[��v�7��6w��x���C������_������(��r����o��/N����������W��7nx�i�w��#���kd6Nw���k���(W�O��Y�b������5����G7���Z��$����#����E|���Dh�'�|:��
�����Z�b�����^����������������P^�������������E�?��)/����4��-���S���!��<�ygq�S�#���2�t��5k����4z�xQ?9���b<�5�u�&�k�Xji�����x#}��c�����&�A��������yG�E����H��o����E����ik��!�?�_%���JF�������8i9��EC�r�����m:�D=������7Mh���.k�h������A�
ce�r�F;"$�>���y�x�
G+�}��(o���o���n� ai<������P�����q��?�;�n-e���d��J�}q��q��t��|!����>/Nm�������So{@F'G�����pl���%�{r��{�� D����GU�����
�p���E=_Loq��H���4��u�5��a0`8:/8�\���
jd7�l]y�<2��a����4��{�cr�����Y
��z�-��^���/"F��,�g������;nw���������W�������������C�a�[�{E.x�IW������_��as'#��r�>8�������}&�QS�����?�~g�ao��?.O�h�����/����	�|�����QO�)���&��$'���+�|>��s����@�&^��N�_��/�y{>dq[+�����^�1�c�/2<���]}���<1�G^{[�����`��X��������<V~��6p��C�G�^d�����d��G��O���Ox�,��U����XO|�kY�Y�[�,��V�K0�lQ��}�����p���(�����r���R�i����4�0��D�Z��s������@�!���������7�����`z���Q:������V��y����y�i����?�;����F�7��u���?��k��[��l��G�4[�I���y����Nv�� ���O��n���p���W���J������5�C~��7�a�\u���g?m�2��<��g6?����
��������7;6�4\�|�LC���@�@�/��;�?�U#�<�r�a���~C�?����F���bo�4@jd�3/r����cO9�?��[X�F���Z��W?�<�w�4�.������VD��#����mC�]������p�@H��y��Ir�]����;�������x������s���m����������;^xu�X��_y0�'G���~���}C�o��h��.�'qN���<���������>(�{�6�6�,��V������P��Y�=�����9���z
���G�)2���`������p�U�G��\��N�:W�,h��?�����?�?l_�7'��<��������r��n���Z�[��7�3��n��N����:�D�����_q�����W��%�-�����j�n>����t�t�	t|?���D�������<T?~{���������n�S���Y��__�Tp����������Y����_��������O���+����}mqw�~5���n�������O7���6�����J��� ��,���
.c���H��/�����Y�F�s�]T��=9���k���G���?������fu���9�5�	�#���!K���"L��Y
��8w�`w�O��y\~�|9�����^�6����k!_��:p��]����aL"<���p��	*�_m�
�w'����?��X����c9o����#>�qI��w�-��_[-0,�-�P���_�k��������~�K#��}��$x��|�4�d��4�U>�a�u/��
�7�8�c�_
��l�_���7��%c:��KoDz�0��?=�3G�
���_Sa��3,a��L�s/
��1����	/z�w��/�^�w�)�l��;��}F���{n��OC!?*X���������[�?�Z~������������_���x�j�
���[;���b���uG�{2J��������{5������v�V��O��6^�qk��ir�Po��^o������#0���F�������V8F��Un���cy��G��c�y��tx	<c0�����E!��?X�YB/��y$�����������m��9����fp�H0��1��_z�V�qkT~�hz,��@��i��%|>�C������p���������oe����T�y���t����#�5L�G�A��K��{����b���c�����8��j�F�B���K8�u�c����|�<������g;�^5h�A�������qFJ���:��i�jy]�?��`v�0X��)0���rC����Q�5�X3:�oW3|�B��i��:��S��#x�'�����n�O���0W��b�n �O����i��������RdE��8t.��?z����K�+��K����O����������[��i�:����)C�S��������2����bm�q=��)8��{��{)5X?� ��!G]�?a����X��d�u9�����3��������,������	��0�z��~���0|hdd����]�T��X0k��7��l���,�S5P��vf����~����|�S��e}��T���C�^~�Xs_|���K��y0��8q��;��/NH���=��%��U|>�S6��p�\�B�������W�t���q�*��(�qc����2#=~����{���G�^�aD ����o�q7o���u��5���J�gy]����S�?B�kc�0�S9����)
��;a��Wc8������?	o��2�yu��O
�����������	4�\K]������0������G�W9�������w���Z��q����M��'�QpO�?��=���ox���U�I��1��j1�
�:�kp�U9m����a��Cn�)l�s����_��5�TW�o�S���{��__�����<��9������l}��/1�X�?����;]��-&��_kK���w>�,��a��h������������=�?�I�g����>����0���7�7���8/_V�����G�R�����/���(��������2����q��C?W��3X���C�K�0��Z���H�5�p��dx"�hv��:�Y���K�!�?G���{�h���88���g����G�Fo�&}E��'%�(����������Pn)4X��#�hd|��������c����N�u���p/����^�v�%������c�5�l�Q��^zm��D_"��w�x�s�}4����i�x����r�-x�t�M)����2~<�H���V���)������r����l���i�Jk�19�d	mc������=�wY5X�#�8����7����:���;4G���0"vl��{�g����3���l����;A�H�v��6��x��z��K}����<}����o:��S���W��Z�\�����q�@6_�^�~Mo8�(�}��x���,�No�W��ysy4=��9��!y���p�vgw�2_�<E���dA����S����8:o�]Pl~!N��J��/����>��w��qZ>�����<B7j����>�����W�6F��[�r ��Q���a��!������(�D��-����xX����:�-q�(+�@�GzX�B��~;��/�����������������	��c��L��Ma�����C�;�������d�����>?��CO��~�zO�l�������8.<<!��j����r�kN�
��Y��6O������~��Gv�rX�B	����+~�s�#��?�?���T�����S�_��7��o����?���i��Oe���z8%�h|�SL6yzO����z�9���{���5����;_��������q��f?|��p0�o|<
��&sm��Z��7b����Wb�W?�l���?����P@\�}�'@�����w��;�?HO����%���=������5���I��;������F_=�a�A�k����������"�W�o��i�P�7�e��`~�0

���b��v�	Au����w�z�,�������W�h���eb�>?<��2����?��<��&�FDOJ���==�6��X���W]������ZcU��)��-�#/����~�������X�,
�]qcrZN���Z�y\���������X<������W:����D3���>b�r���xJ������������Y�=��	=���s�m��#t���^����������8?�u,�������?)�O���������g?�)�W����)�������%�P�g��������_�V��`�k�ny���L�U����d������O�O�`���1�����W��%��V�zy����?����qW+���_������/�?��+��j�_�����#���������y%�_���W
3������-��F���{5\q�
�������l{��:�W}��<^��H_y\��J�oa�o9f�D������\�u���������8���/�{,���������?5�%^��q
#59���?xh�1hCy���=&6B��������^�Z�^�����]Vu�3�������zX�����`������;Yy$m��Z�Q���C��KiOI�_R���S�������Q������5=`�����2��O������A���e��!4�}%��e�%�uO� ��CUC	/�����#\/��d��^�/�C�x�������^���iA�@n�/��I7��%����0����+oF�p����M���)�������C�C��{l�p�s�cx�����Bj�Sv����������0�s�4�0�wO���RO��W�����a"<���oA����������>^F_7�6���S��F��{h*�zW�f�hQ~{�>��g��{�s��������a<�����C��{�y�`<C��(pT&#�/��/�K�������	��
9�{�x��\��[����*���`��;���iMH�}arwX�#���
�b���������w�;u�����>��V^����J'N����+�y������� ���4�/�	���.:b�'���/]���>�o
�~(C����aZI(wyoyx��������Ee���{�(����B����}s�B
��X����^��s?���'��0���-Ca�{��I�x�&��,����*?��3�xH���2x���
C�UO��[�=�b9x�R���&5�����vd��P��#��4j���J�7��m,������>��_���]�q��e"�mku�G�!�5���`�k��?~�;���7Ov�pX�g�����n�UF�u
N�#oN��W�@~;�_��!���q'(��x�������v���B���|Nn������R|�g��_����W�/g��Z��F��
�?���#��	-u����W]�oF(�n�#u��^��.��r��&O�8�N�U�������n~h��;��]w��������������/�����`H��yX��c-������!���p��]���c�8�ga��>?b���������=u��IX����y*=�&c��	/���w�G���]��e�v�������$��}�i�X���X|���[���?��#�_�����G�7mR��B��YsxbA�;�'���[�I����a�x4�x`�{_��XG��J��B�yZ?|<�}�H��������7Y1�E	����7 `�#��^W����y�?�N��h=��w>�'�������������?�`]r�0���������'6yE�v&t������8�������`�
���������}�W�������_QY��W���N�1���
��uL���\���o���=��5|����L�F�6���P�����~!���T�]��<��g]TV�+[V���**��*�E��s���R^����?&#Es�����ai�q����l��a�8��������n��9���v�I�+r�~�D�C�_
������V��l�@��k���sd�Z�B����J�53<f����+0$.������f������Z��KzR'�@�1x!Mk����������\u��5�S��Zj/��/m�<�@w����?�C����V�q�79���GA���f����3�{��z+�%�y�?�cw?H�+�GOA~�?�j2�6�8�6��G�*v����r��9�����#��g�9V!kt���������?�^;���
��q�������B?����#x�w���1�;��y��<}����X�m�1$=rou�X�#�I$^��H��x��������R�J�g-1,������&�(���!�s��������7|y���K9�#O����r;��?w���)��{����Czn*�g��i�x�����)10���^����G�#�^�c�s�"�������}�j< �����6!�D��;�[J��q�e������2�8�|'6/?%w���x^����p�/����'9l���!�yX�c��;�������(p�&��o�� ��]�%��p�	�����{�\=}E���.����������N���W&GH�����?��w]qyw�i#��s[�C���K��'$c��$�~3m�� ��_�|A���@���I�8����;��H���z4���4����<���}�c���x���7��w�-�_��B�7�������X��!���GG�_5x����8\
�E�O[������������S��o�U:�p�����t����6?�����<%�f��(?�F�}:��dLZ�
�gC��?�������j
��������i������n<������������0X�	-�a��B�o���U���#u�����5���O�����<���_�-���Q���;���I8�|�f��}#f�eO�aa�_}���Vh���r�����������a�E�_�S{�Sw�'��_����W}�a��e�_I���A.?���n����C��0CH����K��G���V��%��(^�?�>e���� 
QN�����:n�4~����c��f���z�}������������g_&G���A�����}	���!���6�B����WN�~�0�j���/���)��~�������o�������	����U��#�7&�T���Z�[��O�$���`�.����(�9�r������Ye�
�����n�i�c�j��T~���O���c���L=���~����������U|����#��?~Rc������������?�������o��?����y�.h��v�U��0v����?8��7w��T>���(By�w���{�K��o��p�xJU���i{�[������\�����%����qY�9>+������������f���H���n���3U���'��yy���_����_b����V�D����e"Uf�M�������/��~�^���5���V��)����Y���zw;���R$&���/h��������!�LP�5��vWT'u	�<:x�M0X���F��${n�>���
%����1�'��V���l�����?�����p��#�G����p�����3i��#m���Z
��������=�>�7,iN��Ok~�u�H�/�3w���`
��n��m��sc9x������{ �����qS�>~o�0$1T���(G��%�L���>g�|�_}�v�g��/�/�����af�r�+�����x9I�3��1��'H��8ot�y+��@N.�W���t���/<��F�'D&��gX8��X}h�M\K�������?G�����+���w[�V;�DD\�[�q��nE��V[��Z�Wm��V�����7
��V�{��8���'�>7������AM�/���9����}onN������� �Z����-����T��oTc���y���i�����?�Bu������-� �c�
����6{�a�����]��]���vNX�;q�����6V�om�����U��t7����Zk{�oO�Y\?N�@��y:��$��pW�5p�����������;���;��.��Nf�	=
���Zj	��^W<�8+�
��7�@�,[��[~c'�BY-���ut�V��������@j�9����BJ�����������������lG[��6����Yy�5��+C~���^������������m6�m����6>�7��p�����[\o��%�t�����
~d�Ob6��N
�c;�:������w>��OIk�d�����_��r�IY\�}�����������"�����/uSz@( �tBq-�;{����6�fg4|���H���?������d����/�40�`X��YQ�k��Y{�_?7��������|1�������i�]�Gl������+�	>\����,
�o�?���Q���ho��`��s�{��2`��<�7��?�jm�k�]n����/����'�������:��	�5�9�M��+�w��cw�������������Lp��!{����FZ_��,��N���g�~��[��?�����/�=����F�o��_�_��W�q]��~�]yR������F����_�>�������z.,\Q��U�������'_��B���K���?5�#�}�o��G����S��G��F�_���l�zI?�'���k���h�I�#����Y�����W�Yk`J�����������W����F���O�k�(�_�U_�X"�����O��M�o��d)�Z�V��I�&����KSV���I.�������am�b'�5�a�
j\R97�0�9������������p�9H9Z��GX.T��/o<hW����}��w��h���S/q�����"-mX�|�i|!��_�\���4tt��w���~�}��1�-:{o����^v����m�Ep3�U ;� ^v��l��RJOj:!F�����B�p�
�?p�����~��z��Bs��8�Hc;v���e�0��z�j����
t�	k��Xj������z�}w��7��pZ�_���E~��1N��b��{���p!O�	&�D�8�i5�K7|�O�v��=�0Mn�?�7���r�~n�S/����;$��b��K������+!_r`�u�v��_���*��-��Q8�>'�����|�^b:��������a����������]�#~��o=]o��&}��2hm�[���x1�A3�)�z�N�����?�g����/������v��	<o�c/����<a�0�����>�����;����Aa7���.Uy�u���t�?iY�q��]��b��a
���:�r��������=�q��~1���+���q_������X;x�x���������&X\�,Y}Xs{n���xy����|$���]����P�����i�o�
�<r�������3�$���Eu��^����`��M�|q��w�
���\��_����w^��b:���~�{���������O�r������}��k�J{�\/,���dq�?�;��w��r����q��.x����}�$l���[�?��_�����{��{�z�i�.��IT�I6������v��+��$�r�.\�����]V�����`��x�Z'��,�<��r��[.���g�`z������ �?������=�n����K����
����H��������^��Y�>���n��9'Y�������w�����~>�\��Y���n�n�e��9��O�\������'��V��>T�w�s���+zi���G���"�I�k�������V��P7|�Y?�t,��|9|��:>O��!���������t�b\q,��mY�t:w�U�Z��A����t��A������H�dp��H�����,�km�e����������������RV��~�+��������Q������Ex����}�����Q��p
=�1�ce�:*Rhd��7�{�"�����5�o�l����F�c���A����R�����w���9x��^�Bh�����gmh�#�����hT�;�J~����X�X^6���������u�p|L�������A,���s���������|W����� �f�a���������:�z%��V�v�6����8���4|�'���_c�e��������k{H���r:���j=��y�A��o���(�������I��F,-@IDAT���g>� n���' 
��m�$�.��2xZ���wHn���?���� VF#�h���t����ewX���t}��rK���;j�h7��-��5NWc�qv����gc�6x)M.l������4�����&)7<?��P�H��������<e
��T��������I��?�����nx����
�<�]��y�����Ox���{�}�����]�M�O�n27=��O�]���c�\���4�y;k������'�y�5�'b��C������Dr���O�A�g��<�_\C�����V�[���=�����E����Nz�0>�!����wWT�5���������{_��UIV���E���d�
���<�����E��3��W,)d����{?��QFO���{&f�E���d�s�Y�W��	k�h���}�5���=�!CAK�]��������|A�i6�e����~���%8��&�Z��SV�Ck���������[�|m5E�e��>=c�-�n���Cv�����{�����p$���}���40����	k�z-7��v��n-����6���@�	�%q���:�O�B;���8Uw�^�g��n�� ����=�~��;�-��$^py�v5��=fp�.����<���>��$>Z�zft������
q�Z�G���l!?D9cC��;�-�V�8�B����Qn�3/�4c��p�����;�w�?���~m��������O��u�s���#���/n/����T��c������3������p���LqI�>b�������P������e<�6����p���g���;w��B��	�������v+-����\�����po�S����������x�h��w��;)���I)�������@�Y�������X���5������z����z��=�E����W��a�~���������l��� ��>��W��=g���F~6|����z�Pt�,������G�������%��I<�~[0<����g�ut������d24���Y�����8i��f��X-�����������W������E����9w���)�����p���F+.�5��7��������������MQ�j�o��TS5�����j�A����>uO�C�gxv����[���6����l.���(�S����c>���l����I�����W�?v������^p����6�f��
.�_�#�\g�_����o��c{�F�	��
�s�/��G����R!���E��_����G.��*�S���Q�_�?���le��X�a5��`%��W?'���Q����]�%x���Dg�^��������$|�����s��������?iH���������3�O#�?��F��#�����0��C�W���N?�Yq�����������}�
�����_��N��������L.�<�v��D���:���h7[��������^�D�x�o���_�,�Yey��?���>���/�qq��5���K�������$� ������	hf�~(��u$����dHy����X�?lX��Q�* ���L1��L%�k�F�,��PX,o��`����l7�G�?F�k|	�d��1D�	����
�&lX������9��.��W��0v�kl���@�e������yN�6-�P���8�M���jC'�������b�����p���7$�C��oWSQ�$_������\|�#���y�t�o�P������X�� ��Ox���xBp��.?�A&U�m���p;�
��Y�og�t27�����1��,�?�[���������G�������=����x���N��km�g�����-���f�Zx�r��B-���[�5�
����[f�9�i�]��,C'��*{YL��<�����w��j�������?=^�>x/�r�����]����m�Uy���H_����8��N��7�F>�M���^�|�=��?�g�s�������}�`���o�]�s�:��\u�Y� Z�oP�
��m�������\��^��^�;�������\t���7=|�;����_8>�_�W�	m�9�t�\ztv��o������c��_�(����H_�����Oox�� v�������a��E��iM�/��;����"�K�)d�x2Ew�����}�g*L�JL���-�?1����a=
�Kf�����V[�������9_e�u��]�?��1��Ri?�s�M��R����������e�V�����Om�O�8HgX�+N<^�P�r�S������N�is�������K�}�����S	pK��/���������������A.>{�7�������wR���qbN�h���X���/VA����z���*?��u���b�D<?T�����g��1���ZT�C��?H����+��w&/��I�v�Y��V��/�d�to�
��=��� ��1�5��x������������w��F������=?�*V���?�?�h���km�e_F�vo�`���?y���J\7A90�;��ni��m(8�	6�9�Y~"��\�������j5�-�F���_����@��R�����"rh��J`���Z*h��?��n����8
���9��;�6 �����L>�������Z��k����z�|�>����PGm-��������R��lGhk�����3�6�YIe���k}�f��	}�
����C~js{�_���!���i\V��F�Ong�6��K�c�������7"��{���c�.��c�����������F��o0��6;�
�^�N�m��).���9�p������[�:j5{,�'�u�5OX�'7C��o�-����N���#����!�����s����V[�w�������Q��(�)��_r)�aLY"
���W������C����:j@��#�����<�z��������f��*�}���_�w�����O��O^E�P\fC�chH�k�?`���x����O��?J:�U���4�d}��K�7����6;h%�	��\�D���
��|*.c}�U��|yT�=�\�����(��������O�2ie��@5]�g��/O��S����������K��7d�Q66��P���t�������.aK�,�������0�X���n�L����4�MN<�}��W�e��p���'tK�^N�6�E�_>�����y������ w�KN����\������Y�b�ce1�,���g�	�w?�	�l���1�m��_��6]�n|�9��u�y�9N�� 6���	k� :��;���>�����������h�/�������wv=���4���z���z���.��������3����glX�=�.p�[�C�m������v�IN���}u|i�P��#t����_��2_����a�
���~�jQO4�F).��i���
g��+5����#O��c��w���^���������a����a��������1�zm�����X�����<�������8�6��S�=�A�#'����������}��<�T<�����m�O�/�%�S��4����?j�
rW�����b.��<Z*����.���,�k6�N�YX��x,�.s�����|9�m~���81�
\baw�VxL~���b���g�{���q��_���=e�	�,#��R��Nx��f7�����%��Kp��V������
�'�zM~��������~����i�'U��j����G��Ia�8�����G����������>�H���W����{����17��
k�ZNb��O��<�&���������\���
k�M�K�fB;c���W5��^��'1Jf����_�V�����_z�������s�����`��"���[�e��+������eg>�����R6G�p'>��g/�_����K��pz�����b��\���[����F�cO����Bo�������>
�
O�Q�|�3�Y��v���$~��
�|�}��v��L�I��~���Wqc�����>U����>�[���I�}q�l[��@���=����cl��o���>�j�b��vZ��������O���+q2������Z2�,3�������|��������0b�W�)�_8m���j��V�5�u\e�W�R�z��7��_j?�F������y�]��m��i�=L�g��#��X���i���p8��F�����Xso|�i@����F�<�������m�Z1�������a.�7�i��G:�;�F!��Z�����gJ��������v���qC��pm��kw3<U������p�����
���p�}6a��2�n��i��k�g���������F�����������t�����+���h�k��I������U�1�y��������%8[��#�a���m�����6�����������&��O���/�_����d'�M����DU���1�f�Y�����������������-\�L��?�����6��������7��]{%�Np����G��]��E�G�n�k�!4/���2��4�
P���k��w����k���t	���?���)�`����\k���|����o���������{L���i-����]��?����������O���w(����*2�kq��,NX��X�_Ex���\�2lt�9�p�Is�d��g*�?��+���#q�2s��6�C;C���.�{������vJ�����7�G��:�����"}A�	�p�}������%��J�������_v��R���]w�r�eX}b�Z�V�w������W�tw��_�>�����e�I�����,�_g�a��A���[�m�x�B����7u�o���)���PA���
�U������Y�&�����,��cqR|,��|�2t���v
����{��u��(%��Z���`�����NX���0Q��,�z��61���[l�Xj|y���}�?��]���oN�����g~V4���u;]����d'��"�����+���q��;�F"���1���������~;w�����?�{����g��yf��]�?���hC����?���2��r���0�;a��L�P���p���,����n���w����{���n������BN�>yw ���v��U+#D�L�(%Y�\�K|��a�2n�y�H@E��m��b���'�?����J^M�C���P��w	��E�<���'Xo�~h�'U��j:����d�V�����-m�o��V��s�n;�'�}���	���]A���e����������<C62��A��iD�3��_�rck��.�u���W�����v��S����e��3A��u���P����$2i���t��������v��-;�R�������?���w���s\�K�=���t������+K������I�CW���+l�]WP��0��	�S��q��^b!�W�a����nZj6�1�����2OX�o���)�C���N����;�����=eX�O�M��v�S'�5�YB|q��>3'���������������N������������}��"q��"_����7��|�����	g��'����$���+j�b��b�V��z��������_�m���j�������O��;@��! �?������|U��`��������/��-����[.�.a6��?9���r�����$����������%�_� ���~�����F�o��_�@��B{_a�����q�K��$F,����#����3��F�/�`�!��4�cs���o^A��2��^k��������	�xh��?����^���G�RaL�&���?���v��P������R�����F������K>�������?���h������7��Y�w�u�C�ak�7�+���#/]�����?����kM�����6�:K������v"�%��_lah�4W����������H����/��?��	��4�6�3��Qqq�'
��N�YA������2_������S�yW���m��u���g�b���w?r�_��+���<�9�{w�XlZ���V�.�,4�M�������_��p��#�����6��'e'�hf��q��R���z���OH.��5K������AIo�ew���l�A�]��a�}��ws�_a�������+��8��*|94��g�{F����,�ew�\d���f<O=^�����������G_|�q��s}l����W]����<�]r�cS��#����7���a������������_��3�Ln�9z;���������_���m����P�R�l�-�v�N���m�/Sy�_�G�fp���.]^�]�sly?.7��CxN�+�)orx�@�z���[�����=!7�<�	k~]��)O�*�������w�Z{]���)%6������[���w*�;{c�}7
>/��`w����������|nF����!+�b3�6��*�`r��n�I��<#i���M��F�,��wA����SM
W�3����Fe�p�_��D��f������B�a���pR��.?��(���pWJ}�lq��r����8Q��?Ud������C��|�e��w|R����W������	N����O9]��G��^���M��Z�����y��KG��1�����'�w�������]�s`#�n����7=�,���=��~��dP���&�_�x����������6�������0�<�_��M!+������#�x����G��X+����y�o���2���q~�����G�6����]���.��P�r�X��l����l�B?6�J����~��0
�4�5�&�^�?��
��t�W����������~�B4e��s�M-�?��'m�);nn����w��7��P���R�my{�??�C�+��3���!��s�~f�������w�����a�n8������2c�hl�;�y�F���w�%t�����V��>�������i��������)5{��4�];K�����m+�&����_��_f����6����_>���+�������~���������IJ��M�Z����^vc�<�^��[��8E��h�'�d��c�������+,�~-�;����o;��D�h�N���9��x�=�^������� x'37�x���w=P�������:`y��Z+�e������"���s�g��fk��k������O��U����.�}�+���w�9z��!����j��X�M�M�E���9��o�����t�!�������a����{�,|�f��{������3�������=���L|����[���{hU���Za�g�F�c�R��~w�����_kMy����f���M�����r��q��k���A��'�����8a}$��W���U}2\��~\�M��]�]*�?������v	4�*���/bwV�i�.��������~]����!����_����!����?�/�w��������[Y����g�������Bf�7�d$vU(���u:c��w _|���������B���w��cr�v��wp�`z/�{�����g���xw������"����j�7j���������{���;�����:��
=����
�����z�������g�Q��qd�P�ut����?:��E�Hn&��;���Rx���n[��b+�o7����Z�� ������J����xH�Z�I�A�j�Ciw9N����V��d����
vD�����DvZ�r^�r<e���kt�o�|@�$�>��e������D���@�����?�	T�._,	O�	��s�=�K�)���������g6P�C��N��mp�9n�/u���E{o��O���!�0��� FC��""�8H������p�&h��NVl{OF��_��_&�*)�-�!�y�5�Y�
9
��b���e��m��v?6��R�����M��4c����QU2DP�6\��^5��?�M�<z�G�+4�
�[cw��
K
;�����������������������SF����t9����'3NjX
���y�\t����� �:��2YX����G��[|i�M1�?���(�?��
���|�]t�#hgh���7�/OZ�?��������B�H��RE������n�'�`��XS�l�F���/�����+��7�aguT5Cfv����0����I75>d��u�#�`�2�YD87�N��w�3�u��%�%���"!��O��������	�D����5���N���6"O���m�������C=��,�K�+�����d�6��8���~
9�b�v#~-�E���`�^�R����"�z�t�u�k��Z�=��?$�iXW/��[��u�����7�.�w����f{�������G[O�~��j���������z����o������;��������K���;�5��R�%���4��x��aJAs��������P{"�%������;p����R��.g��.�'���������������5]�D��Q$��>��+<�U�-����m��/��
�W����~�G-*����`�{x������?�c��H�\~���(e��8�Zs0>���Ukt��V����8<�����
ott�u��;��b�z��V����?�$ql|�����J��_z�����q2N�����:�5�e�u0����z�#���m�F�����.</������>$*��7���Z#�b��[�y��FAg������?~d��F��^��q�����$<?�U#��mX[�������?�������z�����So��w?�>�������l�F�<ux���jg�_��F����~�����A�h�����P��}�^�(D���|���j�'A�n��'�����?�a���#X<��'Y��.���	��U��a6����L��������F�?>l�u���?�����
=\���
���
���h���m��[{�t�V��7R�L�]'���T�6["h���\m����������+��`��M����������h���u!�����o��Wk�&�r)�V�a��TQFAvJI���t�i���W1HO~���a��n���8��W�����T���
*cmU%��"��D�A���a���G	q����G�����Q��C+/4�;j�
��h�)sS��w>t�R���M����p-��3��8!�Nu���m=F�2U����
���W>��f�;s���i��_n&���k�'ud�����|������}���w�����i<�����M�tO������qz�aq���6s3`�+��B,���?�,��r�v�h�8'P��;����?������?Ro��/%�82����~�������o� ��G�D���dmn*p<u��(�W����
��9e���xg�f�'t�	~@�����������AOX6/N�W���������!4{w�#���b��x/��J��n����4nB�����\qNn�U-�7`���Z��{��j���^��B��g�i������g��>�I|��� �\���o�y�{���}�Aqm���������+��O�0����{�You��Q�@y��
��o4�?����D����c�l�
�������������7>���E����ah���&��wm�#����?1������,�������1�e{����;OV�� ;����z��@V����6O��������)��qw<�F0�~q>����������8��`}����=�T���%��[mT�g����?p�^��C=#�;����'\���c���7�������D7������
��#�����w��pZ�A7%�����z��G�������f�u����W��6�e�����17�"�k���w���[�������<����!����=;�!����k����v����Y���g<�_���x��(��_c�l�
�������lm���/�'��x�P;���r������7^��l�D�d�{k�X�W����[�����7�~���&�����Z����D�e�3�������_g����>��P�����.�$lN����_���n��:V���(��\Q�V��
�m�!@/�������v�3��Rl�Bk'7`��f�F_������������b<]��9y�=X;�q��`����5��O���������+�K�p�4��t��k}�_��q�������c��j����������x~�Z��^�KYk����������Vn�����������x��?���zU�����~��?���
�?o�(�/���������?����j�dH7��=�p����Ck� o�����X5j��X��l��sz���������o������O�8����~��1�@���
y�U�V���������0���jn��?~,�j��C�?xEZ#��p}��A����#�?y����t�V�+��y����wJx�a�i�����g����wr��2��{<D��3k��aZ��8�/��V�Oq�Z���?�?%��(� o�j�O��������?�?����������������W��?�%��;I��I��<�bRy�Nq�ju����lX�6)D�6��CLD�)�3=k�~�"�}�iqbr~�4��Y���=�s������]�i!
��Nz��7*�m5Z������?n�h��T�_�1}KW�h���*�`��,�����q�.��{�C���:od�l���
.���t���a��e���_��X��l����]���7�,Wq�6OT�����z����Yl'������i������HT�M��H4cL����).�)��Rqk�g�&�bs���j�	mjnd�^��?�$s���(��UL�h���y�ro��I0n��%qk�T���!��b
��y^������+x��	W�K��?�/�?�U��#��sX|7��j��ULqc���/���f�jG�������|~�o�������U��`��5���ax�e�hU�S\��C_�����`��5�����U���ULq�����������-k7�np=������ZL���7��xCK��-�ndV����������v>����23<,M�3�D�!>}�E����&J�'R����������[�r����������;aQ��x��>�#Vk��(�Y��D��.^���Gc"�	�k��d����).�`������~(�/u��~��y���������|f'��_p�������nXO�h}����������Bpq>������m���}<�� \��D��������*�`�c�����������k����*�)naU�-��Q�'���yF���bB�$w��D�rg\]h����]cY�z����P�T�������*�`��5��<�����~�t�#���~bP�n[��T�S,�!��a��e�hU�S�*U�#���eSO�Up�K�!��a��e�hU�S�*U�#���eSO�Up�K�!��a��e�hU�S�*U�#���eSO�Up�K�!��a��e�hU�S�*U�#���edmX�7�Y����$<$�����c���� ��!L��=8���~V+���!l��h�zHGm�I��}��$�<7vye��R��<�w��U�a�M!�����n����[KG�*�6%�����E��cN��t�jqc*���Q��*<��4c�q�jqc*e��:������.�+W�����]��P&����F�z��H3���b�`�k��-���*i�<���,��%�cI;�K�U�(�X�q�jq��������i���"��P�S����V��[���_�?��w��C�����q���g_��@������n������~qN�s.N�Q����F���/�5"�d��/�+���$8�������O�/���M'���;�e��M���_������I�?�`�t�`�����������6�F��d;>��u
P���Y��yq������8���akZ<�q:�?%P���������+�?��i��
i��I���?��F7�!��`����l;am����+*���4�M������X6������Gt=G�C{��e81j�h�T���0�S��%��_�z�e8%L����i�f���q��&�?.�7�u�/q�����f�A�^�^�iXj�x�]�Et��z����5�6��g��]H���?�?gG�zJh��#x�/X�f�z�4���K���#�x>Zo���Y����o���m����So���>�j�M{�o�z|��)m_(O������������7N���?m�_��3���#���,�$��������.��a���p�8�*\O�RI����%�d���/J�}��NYc�F����E����G�O�Sn���.��a��_����{�]�O���FX�`.�g�j�������[�����������[���X:�jM�>��N����.J%�K���O��q<�,_������k�F�����������cl���|���1����W9���h���
h�"���4[�=�Cb��[/X��
���/45"Ax���"Z���U.$U^/. �n����r����+�$�����$�?�/1����������G������.�;��Ai�#��S$��)��d�����'I)��zq	=�&���Oz���9R�Ci��2��3�n��������u��������!.�Ym��3�����'6�Y�=��Q�Qc�d{�g?����D��/�[.�O�J��[.����Fk��}�CO��n��J�K�o�������������zr��^{��C�����?��Wi���-���~�I����~Nj��.W��#���)y����?����x�s�����UH�?��d�dc5C��c���e�[
-b#�9���4��G!�&�K��L��Q��!���,�OMF�
�����8�h�.C^�.H�T���
�r��g��>���R��b�xNY0
���������i������\����W��i�i���.��#�Q�]J3A�-�����i�?� �?���
�*�?���iE9	j8��+��K�/��e���D�.�T�P7�������J�/��������;{�m�l=�w����Q��>�U����M�^3N�N�
���s�,M���Q���c;�|����J*!T�?.<	M��l��$���-�?����<����5�V��sO������a��	�w[�P��|��'��Wq()�~������+.�z��8�?��������Q����5�PY��M��^7�05����`?��k?9��i�O��j���bj��hs�B�?�����N�k��`��ep�J��~��~[�yP���K��c���	������a�����"��6C
���&;�M�/0�A� ���+�G��T�7�YGeRN�pw���RJ��i������#: �J�9e�Q=�m��������������B��*N�)EII��/���� �.�N��[rQ7�t]#��LZ_~��������q��`jR��tUz�8�_�?i�t+��^��7E��)�?�9�����\���O��<,�_i��Zw��'�?�o�����n���v�`��1�AEM/�����O���[c>5/�my��~G�XUfZ��*I�&��%�����|s�9f�����s���67��O>�O�����o!�a���tt�M��}��\����=gt�<�9A��b� ��f^�`�+o��W=����,��c��������RI���Si����gr��~�����o��j��47���q����.��^Lk;l=�>p�4��^�"�J���j� �-��?������F�������&x�-���qu�~F�ey�r�@��0�jO��B���F$��t�������4����u$��d��M�O<����R����AV��#=��T��Y�����������lhz�J�_��+���V[mnz�0������fI������O���3=������������?��P�+���0;�T���������c��M����5��%x�p,���b��<�YC�$<n^�`�'��-��QVV��3��NjW�I��
�)Z\�IGe�@+ A<V��YZ�SU&Ue�`���?���Po�p�W��BUY=X�i�����Q���4�����
iPUY=X����&���Q���d����
iPUY=X����&���Q���d����
iPUY=X����&���Q���d����
iPUY=X����&���Q���Z�[�<�L\,6��r1�*���x(()pl��i��gE@4A��l��I�����u����'�,�
���p�������xp�>��W���'�����/9B�U�|�����I��z*������|l� ��<N�D<�Sy\����O
�C��Z>�Q\��i�z*uj�qB���|���i�/��T�$�i�����0?j�0���8]M#�Sy���_�i���'���K����
���YIR8�^UY�?��$���aq�;q>���<N�T<�Sy\��_�i�if��-�l��y�OZ�bY��r	rSy��~%���o���������tL%�C=��ei��������b�~D���Q����A���X�}�����f`�8�<1����������Zu�e�=R�����bK�m�y"]�gL��VL����P��_��V;�I�����Cy��I��e$T��e�����O�/��Z�Q��8]�5,��
a�e��o����&����,��67N���|ls�t�?��$���Ol+ZK�6'N�T/�9q:��d��I��%�Q.�mN�.�������d��I�'���V���mN�n�^ls�t�?�����Ov�u6�S��Kp�v�:��h��r��}yV~��
�l�����lA��	S�ae/c���vS����\�?�������XtX������!�o��f�
���0�)x��`�a�����D��$+�C��i%9)r
�L8���%��N�F�)�UN�I�W�����d)�d���I$��d4'���p�'���oZ�����AvB�A�o��>+������1�	�lU�d8��&���o��f
d'��0N�OZ�Z(HGI�oZ�AG��_{���S�%���+=��������
���_���gqH#��������f`�_�r"�l�|��d�r��r��q�:�Z<EG�����������B���1�
�������������<'SJ����z���q�2�_p���r9��o9���(�H~ql�2��_����3$������i���W��q���<*����3����/�_Y/�?q���^�*����g(�I���_�?������G��CpoT*����g(�I�'��d��)���8������T�)�3�P���O�?��$�S��q���Q��S.g���'��d��I��ld?�8��{�R��\�<C�O�??f����
�L1�%�	k��&e=	w\{-���-��)�,�Q
��V	n�9�I��?P���*(��|�<p��C���6^����$�Tm^(��(%J��(��xJ[\����Xx(��C�R�:�+&��'�i��	�AzJ�w�C�R�:�+&��'�K�GM�
��P"�SJ�*�Q^1���8�_�?jBm������P�T��������I���Qj��$�H����u�WL<�-N�����P�'�Dz�8�(U���b�)mq������ =	%�;��D�r�Oi���%��&��I(��)%J��(��xJ[��/�5�6HOB��Nq(Q�\Gy��S���I��	�AzJ�w�C�R�:�+&��'�K�GM�
��P"�SJ�*�Q^1���8�_�?jBm������P�T��������I�����n��5����p��,��
i�#x��cn&��5/�&����}�EB�t�k��3�lI�����D�P����/���<�}�b[��������{R�#R�/$��z���3�v��g���B��� �L.X�%��c���5�/�_�7J��'Im]�^.����+J�H�7�(�d����i�A?���\K�'�H����Q�8���(�K�'I�?n$<
8��N��� � ��J���8-�K�O�H�/�����$�k]��^.����+J�H�OPQ��i��$���K��'�I������� �\RQ�hsb[�Y���$��O�8Y��m
�v�:����
6�Un11�Vk@���#<R>�4�r���
2L�aOr�%��e.e_�������@IDAT���]��4�tE5�Xm�?Zf='�
B��1���U.�M��0�I���o�Y�2���>�����72}����8��MN���/��I�(/�H�'����I��2K��#NK^K���fWQw8�����?���O��0W�1q>Nkjn��-�N��I�E)&��u��O�W����4��u)�N�Q�H�'����6&���b=�mi�����_Q_�#AB��gsE����P[�M�/hWQvi���	��f�R�9����-�l�����_Q_�#ABi�gsE����P[����?�a��6���P�Y��./����Kt�2\�W�=Q�����r4��T��M*B6|�3�������������e!�
Wy��?�k<3����E�Z��q���[����J��I���}h�m����T�o��LL�&�X��L������]�����M55��
9�b��'�y
.���r2y���W�I����>P��-�S���4��t ���3�i��}�M��qN���������m��>'�O���?��d��{�"�_��^(7{��?PrZS,����S��+,J0��|���vK�����
s�+a��$�P��o�+����`Lk��L���Y[�LB������?��W=��im��NXg5����E������\,����^h��D�&�����BYuS�b���^�#++����:5���W;��6����`=��=]�{�7>��}����*ZQqe���`���"�RY~=z�S�������oK\UG�r���1Sw����x��p�{��w3AK^�r�������7�M���V������ND*�'[*��J��:��cV�D�g[*��'���`���h_���Uu+���xI����m���V������U��RY~=}�r\_���|[��:����?��t�J�Z*����O�S�������oK\UG�r��'��NT�VKeU���It�q=|���m���V������*�j��
��>�N9��/��W�-qU��q���_:Q�[-�U���'�)���E[���%��#X9N���K'�t���*�z�$:���h_���Uu+����D�n�TV�_O�D���m�+�����`��q���^
T�-�|���b�e1��z\5e�p��y4��b�E�+Gx��C�f-���p�Km�j:h-���}<�m����~%���>4�o'Lt'���M���~��7�4S�g�
��f������/��z�-7����_�B���_��w������v3L�h�C�?��{��w�)��s}6����������S���~����A��W��xX6[���t��]�����������>�r���?q��V��T����8�����?�ci�cNi����$�&��,$3�V�����5�����5�M�9�{�s�{��
XqFt�Zs%7t�����?�������/�c��mJ+��&��E�P����dc�)����V\�T.���Bu3$�9I6&����Li�EL��$� ��1C��Z��d�%7B�V\�T.�M�d!�1fH�W+�L���F�������I��,$3�I�jec�)���UZqS�@7�_��d��!�_�lL2����J+.b*�&����3$����I��Wr#Ti�EL���A�c����1��Jn�*����\���/�B2c����V6&��_��P�1�t��YHf������$S�+����"�r�n�� ��1C��Z��d�%7B�V\�T.��2��t������,�!a�7�A���@a2��f����o
R��Q�g0���8II��QZ'#Q��y{�!��`9��m�DdI���>�����]{���!�FN	m�6n���U_���r�Bw�z��i��\@~N�q��lC��]V[����c>s��vqN�������������F�t��������`-eO������"NkTj�� �?n�������'���}��w5�W�fw��An���G������&���"N
� ���2������V�^�U)�T���i���O�/R����nK�[�"N]RYA����I�9���sK�N�Q(��F5��4���K��5;Qe[dwW��F7��d��I��5;Qe[dwW��F7��d��I��5;Qe[dwW��F7��d��I��5;Qe[dw`C��o��!_��(�m8g�;���a*������
7S�F*p�����3��NF����fE����27�������-6{/�,���s�w��_�D�e���mrW<�����'��+-�z����ZlAO��X�����f����+6�ft��5o�{��uC���}>�k�[k�����W�������c��/��>���w�����/�f�azO���p�<�=��{n��ft;����r�~�L�<�j����g�f�����o6Z���#��{�]���q������� ��2�j5s�R�����?%�C��1�7�����5�9�}O6���e��-��4���m�9�Q��!�����.���7�h%����g���4�����|	���OQj��Ri�M�O{�iZ�E
����J�N�7���d)�d��M��3!��iZd9�&�����Xb�K����&�[�67���p�����eV�
�ey��%���OG�Oi�Z�R����h+�����>3d���LYP�$8KY&x�����i*_CT����5��[�m��cR������j�����2����s��Ol�n������G>��;���e�I�y�p�o���'��
�����K�m3���������ov�=������g'Z��=���m��3���46��>�j�1�������mh�>�Ny7J����l����Yx}�n���.��3�Vm�3�X�����zO���[�[L�l��3��f�f��c>-�2���?�`���f����;�,��o�v�}�����<
��O=�}���'�����G��h�G-����������zN?���k�0���e���-��>�j�{���}?���f�����
f�w������s�|�>��������e�ir[�����s��b����}�A;�f����[�����s���'���}����%���y��Oa|����P�Y\�.]2���myY����X����������k�W���3��0��g��>��{�#��]�ol����������^�&��\�������,�$�M�?��X7,d#]i��SKU�L�)����/���$�3]I�����#�E�31���NI������'�HVi���I�,��?%�x����bZ:%+�2���d#Y��g3N�f�4�$�x����bZ:%+�2���d#Y��g3N�f�4�$�x����bZ:%+�2���d#Y��g3N�f�4�$�x����bZ:%+�2���d#Y��g3N�f�4�$�x�������	k���m���ay���P#�em�Z��0/���rdn"<�X�Yg nc�������M��z��!s:�����2��^����k�����������<1z�����]��'��9�>O*lX7��O��7���vYm��Z+��{�Iw�-wy���!+��t^����_��h)*���Yp���v���>b�(7wbs#��C������>��mq�yp���F��w��V������/E�
yf�B���$/�������!�*p��`����.4��F)��)6JG=��;����x�^�(�
Zz1��?s��U)7��}�U�\S]}E���
h:�<lj�Np�I����3j����q�F5��
d�d�a���?Z8d��n����;u�*�����t�=������u�{�����-	��t��������G�y������CV.�$�Q�����t9���0������6F^���}�;�!YY�D��{�?r�l��[n^���2�g/�E����OO�Xo@�C������	g��q���U���7��n|H����?;u�����&3�3�K�w=��{�n���Q������[,������>�K����{������g�T_��xU�T�~\_��:�?G4�i���`���I�Z����d��/�_����FT��*��G�8��dMs�[U��������'�?�UkM���ai�I�OZb�Z��K�oZc���U�*]*���M�7��xn�G���@Z�������
V5�����?��:���f�)����|���8�47����%8��Y����y
9�_�1�#�[�{��de�mS��?�B���.��~�s�����u�-�N}������e�����u&w�����~�s�)i��f�F�'�YD�����_�7���F�����W�|7��3}�������p��$�s�w����������u�F����������%��������q��pY���%�~����D��h{����hm$��^���
���������x��+B��o����f�
6��
�`���5O�.���G���H�`�x`���sc���1x�o�fI���^=�a��]�&i���z�m��bn������*H�'~w?�
�n��z�3w������m���n�`�_���=�������n�5��u��~��t������A0���v=�
lXo[��%7���h�E����-'�d�������l�������2+��yw����p1���g�_��k��,�2��o�e����������>k���O���'��1]~lA���HA�b:qM�k2���W�"\��)�����~��tL/��<��mJ�Mcb�2=!<���LJ&Ksf��gR��d�&��Y������'��i��sx��\-�����E�������',���LI��������8�O��+=����������W�.p���Q�������'=Q�����$IERR�����W�a�mv�]�L��T&A�p��\������Q��Q�y�a��O��B@:����Eu�-�'�?G����#���6�����E�?��}��{f�:��W�r_����3������S,�'p�����w�
.�{z�s�y�ox�t�����7l������;����w��f�\����v�������]������W���N��~�����n8�|����cn�����6~{�����f�i���}�V���P�:)�g��J'���k����������������v��dl��fw��1���K|���+�;�6K��6K����}���&��s�.������������?������gx$�|��V�fa~��'�W����v��J�7��~�7N\bA�s���y���]r��~���]�tK��;����{���>�}��b��[yY��J�sw�7>��;i�=n�D��lr����F��]�����6��,���O���'pM����s/�������-�
��v�I�������w�d3�����Bh���(��'���wN��������n�Y{�5��l�:�����f�5�
���hfU�Y��L����w����i�X~_@~�n� �Oq������m1&�cC}����#{�c���o�����"�}�/*�MK���3��
��:�#�OrW$��^�������C������
��2���3���oQ��-"n�?��$�c���!����0���V��~V���:S/M9��'�?i�I�mCZ�����r�����_�Kz��u�^��J���#=�������Q8a]�����f�Hl�8�D5M�Li%�x�y����H�����<�\eD9]BMK����e�V�����2���-��?�`����G����o��Px>n��5_������zL���������nl�.O��w��b���������9\/o�]/�l��[����}��{�|�&�0���o7����3��p�E����q�\p��t�}�o.������<����tn�������qw���s�|�)�+|�����}�].���^�������C/������'�o��nn:�s�;����>��]�5?r�u��������.�����X�6����H��7����N�~Sf|�������S�c{��:��Ig����?n��Oss��K�sO��.�Z���V��w��h��;v������_~�O(O7�����s��)��qc�;n�����]���t��������
�y>�5C�m�}������L�����Sq(��	�m
����o@c�c�	���?�TS��knr7�������:L:�||�� 7'����/�\���b�{����WX��z�58�H�m���p��gH�����;�6bF�mkyZ�����a�(�Xn�tQ�m9������k��eC���K�O�iO��X�N���������i�����O��m�@��cu
�������G��;�3$�7�mi�M���#=��%��Hm:��i�M�oZk�7b[!;��?��Gz�������5���������!�p�`'��op{�.063I�&9+g4��4�~���_���	k1�)��0p5����T��
�bk��������������p����qj���D��F���y��\y�y����>�{��O�v�_�3�q+�bS��C���q�|�7���d�����zM8uz;6A�r�N�>����t�����������[������;7�ogJ�����J��g���2����?����G_�x����s6h�>k��v�rM��}��s�5�T/O�r|�Mw6|��E��F�������p��X��L���"�@��*����26[O��'��?���7��^}������o���t��}��O=�N�M5����i\����G7�����o�Hw��>z�Fn
�Bg�w>�r����-0/�
z����zS�i���[,��<h-O��W�pw=�
�����s����r~q0\�?���>�����7���}�M�<���k�
k�S�����t������1��'�����Zq(����K���N�So�O�^El���h���\c��
�F?�b^f�����)Y)�R���C?�^����.�K�MV�G��IU�4��[A>I���I�/���A;�K�75*�P$�C����bP���M����C�(����Taf��J��g�+H)�o,W���%�K�/�����D����b6�`Ysq)��������	H3L>���J�G��<J�'���Hz�5�R�,��(�+J��a~�z�t���7=����y��������j�=EA��@Xd825VA�(���`�f3�|�	8�!F�%{���!R���������S(�1u��2���p����o��-qj�NX?�����NX����-6������G�7s�������V��}6�?<��sSy���S���F���=p��.~3x62�>�7�l����4���u��Q������nn���r�<���������I�����$%N�C4������q����f+��{�o�6�s�,�sz���k�]���[���opr�<�q����y���&�,��dm_��O�����W@"���!],���27��������|"�A<�(��_�M�������XK�;.��������?n>��>
�����A�����&M��\��.������.��k��q�h!�����?�^�J��Z��ZnX���|�����:��R���~�a�&��[�Y9��_������eX$g7j�����]?�����b-���m�Y��T����&��z��2����I�����cI���*J�rE���W�J�?��]I��V#I'��d�bR:Q�$Eh��9EX��&I%���)��WZ���������6�������?��T�f���k
a� h<���+���7��i��mCZ��;�����u��>����3�.3�q�C�U���s��dV���@3��������iR\<P���L�����
z6"_��W�	ks	��yWc������+����y�q4�v�zw5��O����~��s��}�[�Tl��'���
e��s�u���>wX�&6��=�����/q��wwN#So�D���_�������F)O��
�/��m���ry������u����;n� ��"}����~�i��.�y�Y+��8m8�ev�zE_o������V���]���M7�O�%�h�E��8����Mu��]�\G������k.���f-���P'�qel���;���r��\m	�E]���Cq�sw_����<����V�#�n���O��n>h(\k7�G�	���r���\����4�;q���8Q|�I��;����[���]�sP�tb��~+SKB�T��*������[t����i�
�Eq��k���(PE��w�����~���[d�TB�?a����Z�������"~��'��lLz��?���$�S&S��[��a��m���_OF�����I����6�����dd����Tf���)g�S�<��h5~K���$J �_��4�b�`��������P�FZiY_Z����j����/�_����H��@�?���^�6�%���[�^�����4���K��%�R�O��d'���7�w��A�p����\fq^���jxqNX{l[�9.O��b�5����
�a������6��T*��&l���q��������wB�g��fl:v�wX�:79��n��"w����j��5y�z�3/�{�q>O^�����s�77��.��W;�Y.�W[�g�y�Uw��7�e���S�[��v����g_v��'��u�L=��x�������_�������l������	� ����	NB��knX7���Qp�FQx�3��~���N����-�J8�����c��p��V�������-��&�?NX?���>m�-�s��P���0}Zi��d'��->����j����?,9W@�q:�1|�V�Q�����w�~5�����n"�tf8��B�����}/���x����[|��nN����^k�<��������i�����8�r�O�A>H"����/��P������u��'���Q��YL��k�%8e��	��/p/{k���
�U����t������f������=�>���o�p�����9����C�X���PRb���rL���j�KzA�JI��,�?�_�6��H�G��2a�'���������l'�l,��dW�K�`�M��I#��$(9%����F��%����l���6#h��dW�K�`�M���db���yG�c���$�#��g�f���7�%���oZ��S�	Zck����I��d^��o��[o���cdn��<"����MCF�A���J�
h(�T<0��t=�9s*��j��#e����?_'������8a��?a�z1j�!����mXy�h�\�������}�w=�M�5�{w����
�o���h��|����8�*!�����
?`l�w��'��3]V7����+G�{_x���%��p��:NbO�80l&o��[o��}7��9nl�	���O�g�r^x��\�����|���}��0qb����������}���9l�������mb��_����xR'���zK.���b�L\�a�;��{<i����Aj��xA�8�<'��~�j\���!�OK"���x�Iw2������R1�Hs��K�_m`n��y������qR�;������/1Wo�v[���{�}����z��\�h���5C���>"�.���6��md��5�Gn��[wI��sCN�����gY���)��������;e��YF��*��3��������#��fw�����J�3<������/�I�I��^A����5���y����#�I��HN������d��I�'��`W������&�X#��W��zS��C.�?&� �X�I��#id�S�!��'h9/x9N������*�?�M6S4���3y=)Z�I�r^�r��O�?��$���Oy������7�!� K�e�����}�V���@PETL0Ql,L�[����~7���^�Z�`cw���F%$��=�Z{������|��9��N��5�f�5�'S?,�s�69��r�E�<`���H`�^��X�o��-M�V�=F�y%����+�5����P_���.����4<a���V�0;�������b��O��A,,��R�[�[����7��
oe���x�%:#@�"�:�'�y�7���S��Cn�7�7_uw�;JiN��~\=I��22�_w����n���C���Sj���ew�0����e��s���f�s#p��9?��$o���;h���A��Ls��9��<�e@W�?�����G7q����p��b��7XaY��]!������u�`����3�/#���c��^	��*�Y�.��Kx�{;,�������N��{��Q���������YkU9%���_p�~�:T��a�o�[-��G�=r�!��B�,���Ot���~�7<��������U���(2��3k��
k\	���W 1�bte^�n�;yG\E�\����W��f�.���8%��m7���������V_���c�<0}��@?�ph���-Z8���B�j���eKg���1N�������,_f���C�0:ei��)}FW�6�������l������;����,O�g|�������F1�����Y�F������\Y1n���C��/�_8���b|b|��,oE����seyDy)�5�b������'�������\Q^�0Q�F����\Y!�d��C��o��Q�������������7�_�����&k������������aM��W���n����A-��-i�\y�e2�hi�Id�w��|�
��cd��Y\F�?�[u_���aI�k��n\�M�4���z�qO�>]N~�*g5�\K�Z���U��{�)��"����>��{���������W��<��i���?t��4����l}Y�5���E�'?����+��j�
'P���QF3����{��/d�������Q_�U����c9���q�rO\���k�v(3�����^9�����)�������!kW���;�c�F�N�5�����BM���� ��yvn���Ww?���o�Z-��]7xO����Q���kAQ��;�o�MnB�HB��	���^
��N-wp�VZoH7q+.�V�o'~���o�i�g'os�	v�I���A�����naO8����(�xg�E�������)a�����
�m��<����ul/~���C#��o�/'�7Yy�4��^wC��B?M5Nc/-e���g�	[�^����g�������Q"�?��X�+�����H�Nx3�-x�{J��
�W����������w_oMwr��S�f��Y��y�f�����:X�^���<�?���%���3�������}�&N���
����,�P�~oe�k���V������k
�78�5��o���yG�*f^�"�����c"�5V���Q���Q�D�cz�l!J
?Q�D�����Q<���U���y��5�������"�QZ���������k*�78�}���(Q���QZ���S*W
���~Kk�����/�_��(�v����FH�������-rG��O�?�o�����B�������s-vE�+���k%8�j+L	5�
����%3:������	k��F��2h8I��7�� �	`%#������V�����'O=�%#}9�,�j8N�NH`����{��o�Q��[)fa1�o4�;�U�`{�aeq����?��w��a����7v7�	��$�����E8�{���������cy*�j�����������j7���n�������?u�����EF)� ����U�,[>�������zT���������	��r;�����I�7Q`�\-�����9`���aN���jw5��w���Cq'`�h&N��v��������	���B�/�\�6A�Y�3h�\H>u�Cn�4���^��-7<�p�
��I�]��k�w�u����C�t|5x4�k����w���C<!W3|B���)�9q���N�%?	-mw���k�y�W���v-q
��}vu�Q��c}z�_���_��KD�������]�G��q�}���c���p3�`���qc�����-EQ���m����)���)�M1��uO[V.M�6�<"���)G��p3;l��h\S\����-���?O�b��'�iS����-��<�������/��x�(�������@��G�����X6����p3;/}�h�/�_9�(�KE�fv��<�e<�_��(��QN��[��y�+G�(Q���F9^*
�0�#��)P,�Q����������T�-*H��A,a�?0����"����$���H^��V'�������P��Z�4�������n�`���Q�&G��?Nw�]u��Q�{N`�b�B��;������dK�L�+�o~��q��aw&��h�"��������l!������H�l������[
�au�Q���h{�}O��g^U^���~���\�%Z������?�	�;^{�A0U��>[��=���U��d���s�������_��h��K��7����{�!��5���6mVY��,^�0m�?����1��W�r��7�5�d(91_��]	��[��5��}2v<�@��o�Nr��#�����������bec��0&o���9��k��|�@k�}�O�6x�'��Ri,
�B��|����M<1�1>�I�������{{��|�<)?@a:�t�p\
���?���+�ix2������;y����l��I����t,����I�����#��?]C���\'��#����HE���Y�\k���o'�-xu�_v�����~���p^�������^�n��iM���6~��~-A?K����g�����6���(�C�J���z��dqVf�9��t��tZ~M�5��_��oI��4S(����v��!�C������Mc1Z&������3��5M�4�����m�_�"��L��B���2���q�����^B��di�<tk�,l6�H��Q�L���X�"���P�B����fs���/��I���]d�2�\���Y�lnQ���E�3i��b!��LV�B���2��-�_��(&m^^,�v���T(s�[Sfa��E�����������.2Y�
e.tk�,l6�(�����,�%�/|��d���L�K�g=�����aY�	����>%\�r���tL��H�?*M����0��L>O'������!4Y@����������<5���S�%���`��������N�������S�_�q�y5"��������efc�������S��~��mV_Y�?�������
�cHiZ�3��6�
VS��E����W��v��z�Vx�z����y�]���f�����\O���5����X���
�O>'����0?�f���T��s���u���X��n��n���>,oqY�c�~�%��6�O��t8�W�~_w�W��=l6�"~���LHO��=��,<���r���H����(5������d*��
�c1W�����Lh����8�����5!�,�l><��Q�F��o�B}���tJ_l�G�Q���E��"�'��&S!|m�!uG����/��P�^�L�����x��/�_��P.Bybxm2���Qw����/�`���1�'F	/������iRxY<���h��(Y�N���K�)~FI�aHR6����3Z�����f
�5���!6�
�B%��������3��'<G��j�y�i���5�6h�-�K,���c+a��-s�l7m�4��K,�n>b�k�T��������:��?_�9M���xF�Hr��$������9��;/�����6���?���D����Rq����Y6�5����'���L&LF����������'���c��}������o�c�k2a2��-����W�c�������WgLT+fuh���\�8rSp$�-�c"��hD1<0�"0��>-�$�I��� �'�ka	~f��I�B
J�,4L#Cp�p;CU�"+�S6O��	���9f]Z�>��d�`Jli�>����6=~�����������s|s�e�i�l���h*�?Z�Ep"y;��n����4}���|��n@�5�}d���w�/�sn�?�N����i���������E��*��rf��?a���E��>��"���
Q��T��Q�������P��z�<e���a�|��Z;��~���c}��F�,M-����/���FtE����O����PB,L!��T�?���8D�'��l_rW������O�Tw��5��)D�����T������0tE��O�?�]LfB	�0����O��uf�Yt���]��V(Y�VE�H�U<x����C)'}d����3�[�,������f�X)���Oc ������D�x,�rN`�Ez+G�[v�]R�\����KM��Z&�i-������>Cq��e:�K��
ox7
��z�����]����V���GG�������	����o����iw<�^����X�VKg��KO�b�==���&��+��>?�"�==�������j�J?������6,�M����q��WA����o�n��R&�0���O)crgv��(��C�������MY��o�����,{���(1b��t�~������7���%��0�?��Cy����K�3����+���e#+)�Y
��f��G���I������#����P����	0�=s��X!JO`�c2����)�GVZi�3�P�����]	�!��7��M��NJ!�N]�/���a�<Ye���Z�������$��S�����i����V8�����������vi	�u���O��nz��&����G�w^����.�%"��Uyc�����v_M�,����m���a�����I-f������	����_4��������]����E������/j��������sb�_��"y��O�#�?J��^��s�S��Ja=�)=}�(J���V�
���4�4�����/�R��?3m�a-$�_�b���9�������Cb����������8�����6<�,$�?��C������8�\����	k~�A��E��i��iU�TH���D��~:�y /Ut	l� �C�O��M��%���"���gCi��>��c�d�����1��<�4u�Kc�������`h�~�y�z��Wu�n.)-�?�f�����37e�LJ�rern��;��ms�Z,�&#��	?�Q�p3f2_�����
�hmi/9�
>(���[X�0�����{��O���}���cQ\����?�7:��������E���3�y�������omb�o-�*�+�?������U�g��{=d�
��������/�%���$GEq�CQ\��(Q���Q:JM9������x�8�(�\X��Q�F�K�(5�d&����x�8�(�\X��Q�F�K�(5�d&��yM�\	�4�J����uo

U��3���������-;��kX��F�t��N��L� ��?>IgY�_O��	
K�@�����������a,G�	���'�O�i���n���=?��h����v�Mk��Mc����H������r�	�H$~,3fS����k
��0}�m���y�t�E�"�F�=}48�����(�O����}:��"�E�#���������Q�����,����7�_��(�B}��������~����w���<�Oga\�b�����|�~/Ga|�s��>���qQ���E�3������x9���s�.��D�/�_�?���|�~/Ga|�s��>���qQ���E�3������x9���s�.��D7��_��uR1���r���2���)���?�M�|L�]�N�HD�������}Y�lf	~
��R�M)���Ix���8�l
�'��?�����/5�9k�7	�n_��r���R�	i�)T�
i�#�#�+��L����Bw9x��<�#�E���G)��	e.t��C(s�;�_��(Q�j���P���<\�uN���'�����	uEm�P������:'tG��O�?Q���;�q��	�y������O�?Q�D�������	�5�uN���'�����7�aO-�W��p�	�@�}�"���K���$-<\���o���eZ�����3�b�y1��,���$?���?����0��|�9H��/3�����3���������g�BZ^fyF�J���<����V��H�p����lO'��f0�i"��NP�x��,����"�Q��1>1����%3�4Q���O(Gx���[<�&�_���T"LN��r�e���6M��Q�O(Gx���[|������o�c������^Oz]jaC�&����5�P��<�������7�������jD��f{=�u��m������xB9��L>������8��p;-W�$������aa�$X��&�bI��]|���`���k���7�0�$�z]��@IDAT[�
�Kc�����S5���,>����G��C�MZ�JH�Z���i��-���v>>���g n�C�qV~7���������OCb����b�m��BX����|<�4��J��?�_���^0�����p/GYW>�~�<�D�������������
~������D����O�?y�`�#�C�a��T
~������D��O�?Q�����������R)����O���O�?Q�D����?B;�.J��'O?MO�?Q�D��O^/���PX�(���|<�4y<Q�,��'� �	cx&�)e�����q-\��iUZ�&a*X�+���'�r���
�����}N�=�J����Ki��k����V���Uj�����c��Oc~�	gn�3��l�68hx��1���1���3��lrB�1>�1�wf�s����l��[�����	��������c��Oc~�	gn�#�E�#'��c|g��1W>���&��������Pj�O|����>�\�4�7�p�V;�_�?rB�1>�1�wf�s����l��[�����	��������c��Oc~�	gn�#�E�#'��c|g��1W>���&��������Pj�O|����>�\�4�7�p�V;�_�?rB�1>�1�wf�s����l��[�����	��������c��Oc~�	gn�#�E�#'��c|g��1W>���&������u���u���,�������/H3F���\L��|��a�q�#Q�I�	,��S�t%�iV���G��
�3a��~�}��e���5���$Y�_�B�e%ua�a��&��g�����gd�����:�K&,���!��������9��%��.���%��RRF	Q�zei�on���Ppw�R�dtm��.���
Y���������*���*`^�2����'�[R���7�sBw�b�����P'�����..�����$�8���G\Q���D�6�3�?<�diaZ'�����2��+���D�N)�.e�d�5S7�M���cQ[�2��,S.�;�HE/]�V����(U����6e����q&��d�������3���J�X�_g~#�:���?��(�<���(Q�����?tgSF�����Q�������?b��OV������?�So�����,�(mq��?B	���ks�uL�����VH�(Yz�������"��4���q>��6����,�b�g<�)��K���2�C���m�����+�_�_�G<���e���,���|�Om�����+K����x
E��d������m�jm��y��-�O�S��"�
�.'��86�����+�m��d��4wq�����*\�f.�����.�_��ly�M�[b1��^�5���?I�8����-of����,�/0��e������K�# �'U�t�1��'�f���WZ�:��L����By�t���]��H9�����Sn�����+��ren/_Q���L�����Q�Z|��t�@�?rD�?��&���N���W�^���'�?�����������q�a����(��c������rH��E�k�5�_RB����>����O�����q�#���8���u���F]�~I%su-w�Z)%��G"�H�w�CB�0���O..�3����si$��[�+�\T�[6�����(}���+���M��]S�����4��������W_.������-o�7]��4��#����E�US\|9~�|���/�d[�N�N��)?��>dl�AP���4����Mq|PGQ���?��"��)��?Y>y���m����]����v�� ��rK.��������F�Q�c�|��?�����lEo���P����0�
���B��]����6�YX���k�3��]����6�ZX>�������1y���m����]����v���x���j�+�/�O�O�.oy���b�����G�7�(��������������[�o�b;��B�����6�YX���k�3��]����6�ZX>�������1y���m����]����v����������������b�����/���Do�W_��,��]��6x���.Jcay����`�)r���t�n�%h� ��7]�fh�`�2I�f�dr%�E$p�Q��p&Aa(��-�6W�L*�&���<�)|�MSx�Z���Q_��5��z�����#�?���a���ki���Fs���(������������U;.���j���\��R���0u�{��Qn��izOHks���B��F�E[�p��<�5��������W?L��q/h���Rc�nv���gA��
����WY�5k��5���=��H�����y��^��[�S�@~u�Nw���w^���+�G�r���w����P�/@���};�$Oa���NY.�����:�w������-��G���t���e7��&N���
��7!��mvV���6��{��O��gi��y�����n��M����W�y�!7F���^O�l�`�~�8s��M�>���,
m�HO'��R&�����,��|����F3�4����?��������l����<��o�%s��.����n���S��$I������6;�x}�6-��W����/�6_��k��������.���R5�����B����������W]pH�N��N��p�������gyXK��M������x���x:Y\���8s��L=>��-,
m��G�h-X��u���	k��k�F!If�Zh03����K��)� ��H�l�����.�������.��V���!�w�?sR[�	iT�]&������O����0e2J���,�����	n���RL������������n��_��s���`q���6s�����4�B[V��]}�����96�����_�Mkw�1���9|�]��1��~sd���l�Bea,e9{�������_0����k�L��>������s}����
����.�N�~3�U��E7�dK�=��+���j�l
���T�V���)/��>K���In�7iaj��vKc���i��?���4q�nVo��0��+�]q���:�Y�N����
��#�f�������F�������_,um�l�L���u���6��\
��s���.��_~����+t�.o-��{��6H�4�v\�^|�����~F����z��I�0������5u�n����L��G_���|?���l���l�����������ex���I�9M�J|��b�u�v7[s�������q�W[�[����q�G�W�_?��5�
��y�����?������,oi�������7[�u�7
H?�|�~���U�Z�=������+9�x���n�;�8�hm�W��v��_����l
����T�R�sz�k)���s���S�a�����x��aP�����m��ea��e��'�]�~~��O���������o��Gn���N6��z�_l0��k���$Jb����i<��?����v���l���tM�:�'�������,v�T����5v�,a�F��|�������ga������=�=��'����u'��������CD�
w���q�|������]+���8�h�XN++����l�t�b�������lw���\�f�x�B��\t�>�g7�����/�r�����6s&���s�bY1~�z��.�ox,?�Rc����p��S�a(�!F�].��[c���?�}�=���LB���*�_�/�o]�9���-7t������������s=�tJ�8�	�G~������Z���	/��i�l�J���"-�C'���T-�8����@}�oN�_^�#~R�q�w�������2�t>C_|�]���J���R�W�����#��Ma	vx����t��%�*�_iF�u�Z,��
?r_��hH�/���]Q<�7<V�C����YO7Z>n�3~�����H���?SgM�����t������(�����3�����F���N���,��vL�\��O���+^�]��WJ���/�>�|���[���?�m�o@�-��U�]~���	�5
a��qg��m�ZW�(����b>]yz��{X���[;���b+l�<���p!G$p�
���0
�|~��o���W������"['k����9��^_�W�����#������t�s�?��_������a���/��O�����'��t��<?���j�/�����D����G�������>�!���a^4�j�����"���+��*9�x4��m�H�4��0��V����
�.s��sz���B�0���Z&���K�_
��_���J���KC�F|?���k=�~�����m�__Om������s���������m�J�?�`m����
oR�����{!�[��H��7@�>�d��u������$�)�
wT
�f8��v-qww����o5N������X���jZ���z�����X�� Dc�x����c�|���2� v3a`�y���yW�~�����jc$��5Aq~@M�	�#p��J�iv^�{�[��M�Sg���H�/ V^��1���7[�0�����vn�5V��7��^�U��*����7|�k(~��82�������W���:�2�+�|�L�W\�������[�T��^x��2r�4t��[��8
���a�/[�������w��uj�����=�f��'�}+*��?�2�����U��������e)\9�7�uJ�tl��:h����P}	�(A�L��w�(,1��}�U�/�6Pu����������L����^�+���k�p�f����h��ui�&�y'��\��u+�X-��v����/�������}��a���wk9�����=�=;�7����?r��Q�>�S^��/��*��u�����o8�o������l�E5����7q���
���l��;��(��?�������L����4���gy���q�.��T�����o���I�>�^���\�~__�������"���^�����W�����1��3������m����W)�������#�����Q������\>��:���~��k�On@�v�r���f��<Q}���b�"[���?�Fb�q��]p������q������/���E�?/��*��4��+9����_]��+�aS���"��U�f������X�n�������p�wn,<a��![�G�=�3���q�x�g�&9��m|�oH}J�k+�+bs#���w�J����<h��j��!Y���6����������X��>N]���u����/]���:]����H�Y���!���
����rN��%�����id�=�_+�=w����g?�^�������7]�u�Uol���ZUJ��8���N���V7��Ib���]X����{o���U�.��nP�|�������������;,8o��/����kKL��=V�/��I���m�����}����l������n��-��E�?i����_J����rq���v�w�5��t�LY<8r��
�����c9L�?�C����vE7&���y�'Y�c��f�n]����H�hQ���U�H)C������������g���������9����km�\�w���;u�-��������U<#��s�	��h�y��s�����
�/����m���(��+���������������������=��Bs3�*����_�w��?7�����&��X-�}B�/�������l��
�������'C��F�"\Ea�8��9����WT�������9W�	C���T�"^+
+�sZ7�k�p��J����f����uG����/�����pk���+��	�d����c���mf�T�����~�wR8� \�T���)�l�)�����qo`������uQX������%��-���?~�w&�������m]�kX���_��s��m�#��*'E�^V�1�0�/�U��U�k��}��S�g��&��S���#0�y~j�?�N��~�	�s���Sn#%�O��<�2p�����ayXN������b������������ZS}<
�l�����T~������=]�����Z��S��Un�����i
�(e[�E�5V��w�Y����&SE�.
+���_���3'���t��
�����*g�����J�4�]��\��M�j��2�S�X;������{jL.d����j?�����"����t���G��*+����Q�.x�w�ko�/�s���}��&��.���&�2�*w����x3m�����/a�������:�9�:,Ogb,�/�9i0\����>u��1	7�kt����k'�I����uO~��� B9�b��_r��6���
r�	�+m�$,/C�'9
IH�g��&@��>x��w�U�?4�q��������jg����8��o�);�vX��j�d7^��11�r�[da�|��n�O�b�x+����R�%]��M�oq����lC+�/��6�����7TW���-�n	iO�
��!���4K���}��[�}\f'u�������d���pw��:��k|�k�����6�������@��qi6��-�����2�����p*��k���o���5~���
�����R��b�Nq��_���q��6�����c�����������h��)���
���eK��'z���J���4����+-��-�M,fH��7��b���'O�vE>����v�o'O�)��n�����yFI���]�\R�< U<�:�~�������>�S���r���)K�_�4�����n��v����	�����c �����1�)��6��������������$�up#���v�F�����v!����U���b�B�~3����|W����&J�G�]j������a�vm���a�r����X�f�k�R��v���C����	?Nw_��?�f���H_3���aw���g�<[��;�������h��S���B���B������^�����7V��pV*_�^"��������/�6?�
��������������UR����q����� ��o`k|7��D7�-��uX:�)�j�����ps�b�s��pnz���q���b���KG�X�z��o��-'p52^q�%�"���L�=A�9��
��[	�k��[9Y.-���~��FC_������W��^n0R�h.����"��SV@�N�Kc�y���qn�������z�D��1����p�L��OC�?�
���p�.�#���gc<�����0Qn� �����|7.�d��x���+.���p�~�c�Q6o���������	�g���Ww��o���
�?+7]�����2��G����?���]�q�����`+;
b��i����E�O�q+�O�^s��$yS{N�7�n��^����#�|����+�?�?7�������g�Y�����L�~�w+�5l|����MR���M��=���
���HC�]����{�+�����Z,����i��
���+������$���s��?eYK����|����^���?-������4<������q�8X4f��.�! |������|$�B�2����W�"����v��a��^
��4d���������O�������>�����7���:��}M�����wsc^bp��2�g��\����+��q'�r_�S�PA�Ks{���fI�?�\��?�T0�Y+1����b����m����f�j��G9�k�i���a��@���R����?���������e���U�������!��I��d,���?�W��W[.�~Z��k�*���C���	��/+�����7���v������������l�j�a8aC�V9����O����+:Ahx��,H�W�a���m���l�����
;w����u:wQ�5��p���X��z�nI$^�D�_�����������J�9]��#n^�x�k��������0Y O�`Uc�z,�4;LK�r.�~��x����k�p�V$�Gk|�=*������8�3�����q}8)p�k���yN`�G�9X$���p�^i���7�iB��x*{:[~
�3$TD��������~��A�N^��Wl9k.����;��v����7���j���$,�=�������	I	ChF	�>k�����������f&���W2�,|�x�u������-+e��2�K�tZ����f��
����6V�����x�}���f��������*������pe���U#^�'�Q!��/X���HYl��-u�����[���Q�n.�������nR��J���'b��-�c03��10�����C�t|5V
��&=�Q�7I����� 2���=�Z�%��L���od�b���J��S����!�����Hy<d�n`��$5�	������%��}1��p��U��{a3e��+��7��Yn��\
o�	Y-��c��8(��
c���_z�]������zq�oU���L����
V������~��,W������f)LVf5��n���N�as�
7^XY��?�����>��~L����Xkl��]��R���Yt�#N��\~Y�����������{G��q��'��A�"C�c����@\��X��)����h:NtU��zc�F�(_E6`I�����X �����[����&���f�+����Z-��;29U��C�`���{�?fk��7�_����_�yfR����g�_�I��n�U��}�~s����������)+!��S)���Q�U+����T~Q�]�{;b�����
|�DL�<���� �(���~_�_�������z��q}�4V�kl
n$���ap����{O8@��Z�6������g�?,�_�?�y�G�=�)vk+KJw6�y�Q-c;[YjO�if������5F�}i��9���u��3�����g���6������O�s��r��?�m����2Pk��eS�g������P�����Gk�/�5WC�M_������7��3�|���7v�GX�R����q7�chS{gl�=
��1��*C�T��g}4������$����y.W�P�2�.X�.9�+�'y1My�
���9x���������,������&�gX��2�����'�'�����4�|�-���O�c�.k����.�������o�g����c�[�l����]����������a[n���'����aA��g_u���
��c�`��k�Mp��-����������bz"��}��P�~O�q�G.�������5�[�����M1�F]��s�3��~&�^���N��H����x��5����5�;t��}h`�������L�S����2?��H����B�C]X��gX�9���8C�Z8�u��#����n��u?b��t|Ho�[������)��Q'�i��|���e^c&�4�:{����i��o��;�>k��
K��p3��o�>M7�����{�����
�+c^�5~�C�)����u�"qC��kc�[�*�C1�=��8�d���n����7�%X��)�!P"��9�sk�+�s�f����b�W���^�m}}�1�
j��?�:��i0����x�Ge��|��\�������,/r����|>�=��%��k����/�����>lN�����������,B�	i���-�D5Y���F#T�gQ�0=���$�X���v'cAbL���f�!����������3���g����p��+N�=d/������3�N����
xb����X��c���[�� ���	k���X<������sN�4s��|�,@r�x],����8�����?W�b.���K.X�=Y�f���6X��Ng#��x%&'���/(���)��s;�����}��s=~�aJ�0����C�No��)��>�N��v�Y������k�$0����6!�����nHN>N����w[�
���qky����e�������]���2
�c�s��J�Y������_S,��am����C�����I�����!lt�*��<Y[������,��,o�R���������;c��K��s������/F�n�AyM����e�^_�.!�Bl|w����'E�vC�sM��Y�����'�C�|������q)���� I-�-����/�����s���	�m��2
�,;��������7����<�|86�F���'�:��a.�	q�}O%�c|���M�'We����w��SM�\���_n>���[��Dc�q�������E���������C+�D�����o�����
iv����5�!m��.��3�j,�>u�����4���x�����a�~
�"��hG�o���b�KS�����'�C�S�a�L~C����6�'���k�$�o��g�5O����(�~C�~��^	��e6\,M5���c'�e��X/�Vn�����L����/!���<�����0�w����J�_C��A������j��hT�Sw�b'�����p��k����O:.��Y��K�G�#�csN���W�C������<�q���o�Y	��������"�#��T)�k��[���7��	�iB��x�����F;���=�Im�y�7K7�����5-'
ih���'��n������yv��KA��.�������ISq��6�r�����d�~W��0�-}3����������
�&�1�5����]y��I�i>��3���_3k�����:U�F�]����*�g'��b��������)��Zz��r�����.rngl����*����V��M�����3�KiMB���7�}�5T��M��Ml�:-����I�\{��/b��`l�1������z��������i�I@����F*�~��������tz���e�#�������������o���u��}[�����7Q:�O��w��;N������`nkb����{�C��2������L������x�e�c��2M8�IV�#�3_��������<!������kgw��]d���7��3fO<;����=����7�����������.�����A�4jV�&�in7��jog?$\����;'���%��M`�.�CK�zpqi�3�g6f���O<x���j�I��q�b���6����c����_��+�����l����
'����Y���u��7��5���!�/\��q����xi�ZG9����a�2��7T�47;�9��_���n���(bs�~��o���L��T�������g��Y<�|�8-�����$D�������5���^�#=�����75-�R�e��g_X�fQ�`,&2
`R�C���
w��eD~���W>���'�x�����O������X�����o������4�����|o���p���N�)���l�6[������Z�x���J��q'
�n\/��]���
'yn�k������i����������������h�R%W`Bj�%x���]����<�?F�(~*���H����.��}zx-^~��?R sh�I`�G�!Y&?!\5Nh,��������?�x��a�Zs����C���+����5�q�����0�:$����P�x�AW�������c�O����d�{_+��:�^
iC��<��{e��h�V�L9�e5:��1�)�b7��8mLT����`��C,*N�n��n/�i7ul���{;��|�)\����y��n��h�z
�kn�C'���	��G(�Xlc��'�v_oM��;9hY�������H����=�������T�_�����8Y���
�m��\u]�S�~�����+���+�H�_1*�2�����U��"����8���N�j�H�+���
�=?�N�>������;v�m�S�]�.�T�
�]&;�z�$�y��G�N����
8w4N�wn�8N�c�C����~�0�'Z�aN',Z��������P������=�H�����z�CR]��J�Z���vI�����C��\�J����In��pe��F���p!�4�^�A,!�
��p%����?qobW�g�U�kvO����]�������yX���Z6"��f���3uN�����@���f�xk�����A���I1�=��������\�.����_�nN��0�������W������O���
�c���8)�t$����R~�\�?�j�Q �n��3d����\�c>����k��!c��]�5����z|�%�
�C���������b������O@����,������#,��I����� ����_����?�RI���Z#�_�J��*�Yf�������p���^�\�o��{�����������@��[IhxE���Z�9lg���gx���{�_���q�M���Y
W�����A�-�a�S'QPV���2�'m!��&���\�[2�S]4��QxZx�s����l�����J��� -�9$�N���i���������31�fOT�7����n���Z����g�q ������<��'�X������R���l�Yc��/]Y�u�?!e��]8hW�I;���}�S/�����ws|��cc>�2���.8�����6��V�A�-/�-F�����|5���q�")7���5��P�l�=�5����g����CB�|S()��0��S���7f����n����3^�3�����^8n"���&c?�aJ+M���v�e������\�zc��M~��7���m���x�f��Yr�;��8��[�������<].<���c��u$=d�G��C�zm�����i%�E��y��d�=�R������������1����|8�N����:� ��y�����4��K����Oxk��x.��w<�O�G�������Mb6��������7�r�)M%��;��������U������jV��������_��g��5m_u1l��qz�];.V����[9�gZcne}���c��`k������������z��k�����-v2�~_��;�����"����������PM��m����`����J�&���|�t���[���VCKO�h��NrH�����d��Ag�%���?�����k��N�5��?7�_�^7����'59�O�}�i�O�Y��,-�:x�_C��m�S��	U�k�;������L������M��^�QJ��v�C��v�����C���m��cS����)������(��y�:��2�k��|�e����BAX:���N�$�ah����an��5�j'����iG����(�g���������\Pc��mf�����^��������4t���P�����9��������e��;���v3�������/JgWw���	���G�k��^����R,Xo
h%��X�� >�I�B .�0i6�
����Xr� z��?�WLc�l^��(.L���u������jdM���������bN�0O.:���V�������,M��n��n�v���Vz���VB�1^�U��ko�S9��t��7���x������t<���6��XLJ0-O\����"FNX�*�b���4�
*������}hX���7X��C��d�E�Nv�Z3E�����������cQ��oJ!\�+O�$O�����
�{����x�^���8h�����r�:���P�#����-�4w_��z>4Mh�@F&8������wk��k�q�L���\��iU���Z�dt4��|��5�`�'�Y^#�1�0���,|��y��_Vk��
���g���5�������F��4PK��z�[�.�D!6[��M'4V*����[b�������!NyE���_�J���>����-J�����������%����6��B��l�"�xw��Fh�}�~��]`�s��^8a�~+��������-��N�6������~�:��m{NO��������u[�����wOcQ[M�����;�O���� ���l�`	x;O|��7F�|�����C�,�.����$���M����-�_E�}<:�|�3������`��?������
e���z|����A�<]���|#��#~S�jB�#����+=��X�������n����U��������r���E���'�����2��h
�G�}�����m�co�����.ov������?�	����o&MN��TU2�w�,�!����[D~���3���$Yp��?'�tY���� �Y�a������[9�&:�o�I�����~N&���������g��t���YJK��*��v������JG�m��5���^{�F��=N����a��\��h�]�=���Q�
,��pS����\�;��'$\y�m��;������{�����4�������7�,����{#�o����a�
^-���J�X_�� i���J�?��6�c���?�����h?e�.�?����~{O���bSBM��
~,O�j|��Ga��U�h���7�D7	�}q�Od��o,^�Ei.����������t�>H�I���H���i�.K`�s�>�a�Q��9�{�I� ���������J��r�q��<��,
��b��~~/�����'� ��&�eW����2&����[>y�0Y>j[������E	�1�fg]�/[���J������6R�,�s�b����	x�����d;�tC�����?��-��b�B�Fl�$����S�����pz��~d��#d��yc5���?��������J��7w]�+C��;�`����s'�|�;O���Z��*Y :c������*��`������w���p����qZ�d��C0a��^j�++����_������q�����>V{��&Y&M�����9���.[cn�7�T�����}�����N�q���X��[�x;���an�����_NX'��F-�rj7@���^gp>��rh��O��_�_�;�lh����6��p�g�}�
?7/]��cr�7��^'������<�����p<��7r�?9s<��WG�H)~K�����i���h�;�Ks�m�>��O)�=��������1�Bz5�����������?���1�p�
�O�������\�������_A�72�qE��ih���b|�-�l���y;_J�����_E���r����'fC�d��������\��/�G�R�u����9c��t����*�����Pl�?H��1J�����=������oi��Bw6�<�����>3Y��P�>M��������N�+���|�Z!8����G��k�%\�%M�E��J�N2e�W���������N���B��X� �����x�����7��yR?|t{���ix%8�"�D$
-_�d	[�������A1�xGU�@H�~!��A{�5����f�L�pN�?�76?�,m������8N�|N�b^��v+�����=�����,��n��~�C�=�2�[?,��p�����m+���t��'��b��^+w������{V��E~U�=,���b��i�0��!��
�����}u1�)�������L��1�k,�?���������u��>���R���
X���.��oX?���,���������l,�����a��`ge���e�6��}W�kk��>i^�j������(>��8��P�8B>�k����<E&�%)~�l�2)�<&u9%���arMs>W�l���`�;_o�?���:�o��]{�8�N�Nt����
�8�G	�6������\�no��|����p� ���u=�'^�����������"��']�&4
a��3�r1~��nHB�u�o-�S���~�q�����i=����,�B�
����	F���|��7|���|��&{EN6/���'�I�?�����k�?������������� L�{>������~���ou�t��?��hv9>���&���f�t|6�q1�����>����,n��%kn���	���%?���Z%����{�Iv����6�+�o��C��r)*�����6l?lp����8u�I��������!'[@�4��+��;,[��.W��~�g�_��c����Z�^���7���[��FC�����Y��d�@���y��^�WZ��\�����?���%�?7�<��HIg��f�9�L����I�WG���n�o����f��~.�pTY������a=������~���:������obQS�v�	
N8�<�����w<�Q���� ��><K�J��F+bn��ih�w6�0��J����g_��'e�Y�;fc���$�5�k7f��@�;�uj3�g���1��'��kLFLE�;r3a���&�G#=�j����$xj���2E}t�8N� �@IDAT����}{��5�4��
�������� $Q����-�1���S!j�?B�a:�&����O���A���	�+����x�N[)2�u���rso;2H��L������[������R�l���P�&�@��%W�%A�\��0���`���������`|���7?�UB�+/T�v�6�������$u��n�#o�P�4^�OGU��7����#��M��������=V6��0������~�_q��y�!�����\�%�����L�_%����o���<~�����7x�![G��9e^������C���*�~=�z2��[q�:9pA���a����_����I8!<LC�Em���gC��i��k�|��y�4Y�������xZ�����q��<m'.�.7mU�}^�s����.�+OzV�?�|��35��QX����x����p-j�r��|��<f�U��<a~/nKm���!<�[���������_~�]��G���(%�
�=t�J��c���W�_q����0U��:����m��]���|~c���_Ee�O�q���w�Q���������������'���~��-�fY�[�6T����W�|^�����oq����M�~H���YBK��������b�=?��<|�#��a������N��+���p��50��b����,^����BGcy���v�����-8��5��|�4�r��t(>������=����|L�z�����v�������''��)M.8��5,Xc��l���y'<���q�-RV�e)`����Xch���w�������'����XL��y)|�\Ay�Q��j���J'S3��:p�z��"V�k}1��+��,'���S��yI	S%'�
��\/Y�
����G�m2���#I�CLj2��@�
=Z������G|����U�a�E�u�=�8L$���y��c`�UD=}�,���W�~����#�F��4��Xt��s��s�u��?����8
�oa�����2S��swec��p�@�Ie��L�)��2	-����<e������g]!��>^1�?l�O�<�}t)]��v�}$����/M��|m���+����~�q��%oe���5O<�kw�t��%�
v������
K7��Juv4�>��;q�'�OW�?��;��ox����v%��,�l�}�v���ES-������2���rx�B�3v��O���o�Q��)n���7R�xcDX��qbiw�b��������|�t��� B�B�_�����OYl9�=a�����y>HOH���=/75x8�������w�a�w������*���DXn�]��3�c'*����M�g���{w_���;O�y�[�������t5�����P,�_9���4,��_���Xr��Vff�����-��h�U�~jqL��`=	�wS���C���P����'z��	B��be���N�cVP�O�nS�cTi�5�0�IEN��~�?O���2�VW�kl�����	]�97{q��	�EgO�TW�	���D5����?c#�x�l�j�MuW����>#S��gb���[n����u��!�Wi��2�z�V	���Yj��J��pP_�h�|�����l��As����Y������J���O��-����*��m�����Y����[j����Zgus7�C8����-&J	���)4,��~�Mc� ��iz����G-��T��.k+S6������;n�\	^�����|�g���� �%����r��N����������������I_�k���O8H��g9�_2L���`/7����v�F���M��5���'R:c�p�|�%�>��
�����u��E�S:iz<��kM�,�wF�6c6����	���~�s9J���?~��n�F&=�2�����/�q���_�����#�P��
�����W�^w�����,���t�!w1���?�������u�`
�������h������7���q��"h�/���������KUX��f����>����p��7�i=���.g���{���M��7�b7�
��9��S�.3o<�O���o��O���\��g�}�L�AX�����"�����=sY��-c��r��?>�x�U�������2�n�}�����e^�,o����
7e�0O����5X�jXc�m1O���U���U��3�_4Zbq��?��7�)VYzI���=���4}X>�Q��?+���.�����0��g��s:��������2��}AS|��J`4aM�+����iT�vd�<~�� �o�j:����/_'�@���+n��'�Gce%���1�����U�l�j����Q8a�e��-���cLRb������#�;~���5���|�^B�XjJ����x�1�o�'��!����^�YB�tMj�4��� ����T?=��D����a>-|�c��D���n17z�7~�4�N��MNT�����c�U�g��u5��9��/���������)������xGO1�Rp��;�v;�Z)^	>W�{��/�a�c��p����B�]���6s}/�f���t�<������m0]��v���)N�=.�W�x��'����y��O-Y`�#����X~�h<��������|}5,���Y�v�����+v�{;
O���-�4�v�'OY����KNO�(�,�������������c����jw�#�������]2)���'��k}�\��+������8������a�9��I}���)�s����>�sg��i�n|g��Xp��7[|�"	�$�[����2���o;���ynM�����d���	k��zrf���f��Jp�7;3\�e~�Xp=Z�������bc�	�m�E�5��w�k��g1)��8�]!#zrX����-����W�����G�d�zH!Z>����$q���@�|���[r��p�����s�a��^��0�3R&}4�������M;4�B�������Z����ye���-�����?��}'��`RtQ�������;�Yv�S���snC��!��q���@@�m_N��1�?p�����?�!j��e����Px���u�?�j}���j�]���l������q���{?�w����(�/��^p�_��l��� 
xz��/DF�}��d�Zc�~�~WJ��G�b�;����&�4�������KI�h�-��e�`�9VB����v�@?�
 �S������6�@��g��
����a:Ks���J�C����o�y�;��q���s��2��[�&W#p*���s��8�-��B��t"��F'�������R���<�����'\����UZ���
���,kW
?O�s�u7e����re=��|�������T��x���x��8�G�Y=�#|�V���R(����J���i����o�p����I���G�j����Sn.1���w�_�-�E1�D�Ny�������
�?�+�
^���i`��F���*����7�P��-8��$�o�lFY|����;w��n<���oL�y�����p��7�]��)�bGe�{Yz����q����o4�c��Bz��T0�f�oJ�J~(����dDe+iJr��IC�0�$�)��7�MAU�S�n�<-�9�o�HL�������|�-�����p{��J��������_��~%����6�#5����q>����w�n`�����ty������+��������n��5�����317��j+8>r�Yz%�^�\���B-S]��
m�y}��\�V�!�|����G����j�W\��#�h����r�����FU�v��_��s%�'���M��������}�����1tN�������������]�y�Uo!b�j���.�l��o�5;wrCp*�?,�!0O���yx�W�������"�7�('���@�a]��v
��#����C�O:�������rMQ4����=��$��A&���&�����E�X�������iT����������y��5
�j`��L��x(
�W��A�n]���x��&��u���La��
��<��<��]���\|���C\���p��F������>����T�t;��3���.����`��.�^�XF^'�z��K���?�2���&�9�JY�&']9�;��`����iX�cg��x��q\�4�t���O3|��������Z�m�m�&������h�P��qJ�<M�~��xu��XD��z��Q�iMK���^��Qx�u4yC��*\{(�{�^5
����r�F��o�S|&oh�rZ���������2'���V����(��>��	����W�T�_~���k��$��Q�n5�f���x�n\rE����X���CL�+��b��f�1�,�������������	���d,��������i�?$��=]�x��W�w�|sa�#k7����`��0v��5���p�U�|��n�*�k��y[9�N���T���2rB/���2h����o`-��n����%�rA�\�h�<��&���`�����x���4zB]�
�y��j��e��R��u���]3xD�:K�B�F��>��I�p��\������
JL�|�����Y��e�zy�hyy����B�OG������m������������M�������O���?B���a
\�����_�_��
�+�Y�ko��hbO)���MK��)�|����yH��[�������j��������`���"9���������������/]�lb�7���5��*6�_��J��B���48�!����[�gte�"�����e����E���.��3�Q-�=���3~��N��a�������|�ve-pB}��KP�����jo�>���5�}[�S��H9�d�a�Wi����
N	P~����O?�t�q�������o��>+�o+��u�|���vJ������Ar���K�[�\F[������
+���u�?�������������I��
����L�-d�c�%�F�r�Y����l�b������O�:|ml���C|�h��Az�����C��~B���w��{���������Q��n��b8��q>o�C��%�w��0H2�
[������|J�s�c�d3�������,����� I�Sqjp�6� ���q���1kd1T��}>Y���Z9i��\���_u������'/��qw������6�����M�>�������_���������u+w�:���c�W|O��L�������?��8����?>=p7�_������}����MT3P��wE�jC	���,Rny<�<�����$���y	.���\	����0M���u��u$Ss6��:,�
�7��\9�My���0�B�
�����Wqj�������d���gq��ix�Ys�b��vn%��v=na����_3\����<r�!na\��M�<��e-��?3��-9��)�[R4������W�����V���?�?�>�p9������k0��\J]�?�^�~����_����77�������k���c���%,�mc��*����Y�����8~?��H]����<�3�1�'��s������C�����y�$���|�n��(��r��y��a���f��n��$��Vq��I��
���t���4��d�����6��jc�X�4g��
���FW��:9^7��X��<��{@� �l�
k,��,X�	k�V�?���������e��+�ym��K���M��Wf�k���q��<}��Y>}�z�������X�����E���@�8&�h�>OZ��jSj��)� ��ty��o��.���3x����7�CpZ�;�i���;���y|���j~t�����1�������w�{R��.ia�9H�$A�$" QQr6��`��y��w���P@�9��U@P�!
HTr�%�%�}��;U=�����{[�yo��������z~���*9����6�P����P�`���;_�a��.K���w���jLX34WH����"~w�'g�����O�����x������V���n�ZR����6M_yY)�v|LV3���X�����x�������|%=����^u��3q�������In`i���i�|�PsK%�?'������VX�+��%x�!��������I����!�s$���GK��I��'n)��8�C�lc�hF>����WIsUv������|M������dr�r�5�x��M�+�� N�#��T����e���M�3�����\��6�?S����_\VK�~�.��������X!�]6p'}�����@������|�t��wVX�N�C���$G
<�����3�R�I�S���e�Y&i���4)w������/�����������2_ �=������-�W� �.v�s��5>��Q���Sl���j;$�-`;�Ud;�
r�������'���xG����I���~�������L�g��Z��P���V^N��'�z������������R�o8���C���58�r���-k'��/�C:��[
�/������bf����-�m?^�������������������)d�E�5����m�����L�Yn���j�|Dt�_o��t�`�5���a�?�}`����7���VV��#	�9�}�����8��[��09w���!�0���	8�����Sy�J�s����������?l�m�-�S>���q'4*W|�q���n`)/`��l�.�g�V�Z�]���j�/���9R�v~>��K1z�S/��S���!����B����
�O!�'_�+�W}��|4�;g_�>� �n��������+��e1><�
�r�?��-��>>�<������y���o���N������_���=�W?���d��8���|���x���|����{{f�x�i����u�7�<��ykT��j0�������x������nv��#�/��6�������N���i��g���VX����������B��W���~eFyuA��
����a8��HK)�3�`�?Q��d�w��=������ySTA���WV�{+����S��tY��)��}i�
>���������HI�?�L3���W��c�>�n��x�t?";]�b�<@�I{���G<��8�G;�+?c�Fl5��~:��~2~�����v��k����<Tw����<Y�bi���7���$���o���#�0a�������M��_��C��C�|�kp�.`'C��7���%����I~?���}�^�RY���X���P������2g��Vk��";|�����p�_�Z�������3}0����4�=��@�C�.��!g�m]\�8�M��$��?~��
�(�R�	hs�������5������6j���]�*���}I���E���r�
��$/�rv�97�l	^��F�p������S��z6a��'T��gd���y��/m���d��U��
�}2���.������2��-_�]-�k��MX���3-�����'�K��Nz�5�J��)��������x��=��L��-&'%�6i�_��$7���U4?���z%��2������^r�	k'�����NJ����[��b���?K}���k�d��e=���mC��POh���5���SY���0�~���
������v�����8�S�����6>� ueU	&����w^���=O�K,"_�-��F�C�Mr�J��Q��>�A�4����5r��>���k�g�4����Q�������3��'x���?�A�/{�'
��	kn	�P\���m+��CB_>k�g���+�O'^�W��Zw�2/a�\w�<?���i�#�lH�ax��'<d������l�B�����9�5%�������q����<��yy��Y9�	=�L�t����#��>4��y�F)?L����rnT��0�q!����6��i�_�^I�d+�E�eu���54��-�u��I���+"�J�pj��a�����(���
rN9������@P�p�LX��raMSsv%/�x�_���e�g&���?�3")�YeK��d;�-�8
��/T��M���@�-�?��7����6�?s���o\�e��_@�&��6��������S���}Z�O�����"/�QOWX�,)�F|�0���T9�?�����9U�{�X����C.�S:W��=6�9�l�~c��;������O�7i�7�t��/�������
8|�8����p���~uZu_	���5r�m	��_k�Z��3���g5����u&E����A�����P5�b��=)=QM���'<������s��>
g^�e�q�;�����Z��8q�w���b��g8�����kZl�9��!�&�<��~�~%��6��<C����7��m��(����[U����M�'/����h��s�_��#w�.�*?�A�������{@����QK��o%]e�����ra�
Sa���������4^��!��C�Kp�"B{��h��	c������[��r?q. U��G�J�'�g�09���CK����S;�
���]v����&���|���3���#!�+/��w����������`��'�y�5,
�p����$��f�v��A��;��7���4W��+ �aR��x����������7���t�����cB+���#���4���cy��)���-�����;��
�1*�C�=�-���#��s��*��>*���p<�eF�e�K�}�d��^�W��V��7��;������n�C����'�68a���d���?��;����?������)>�D�.?G��}>�pL����������2��\�)7?�����T����5\��\rr���&;���*��}y��_���3�����qL��7��������K�5R���75�Y�-��wYa�,VX�����?���1�j��{��G�jc�{]�~��^�!.�I�?�����d?,���<^��+q|
w(k��s�,���1��,n����e]����16�L��7a-��3�i��:b)n��EB��5H���X5�Z�����i�\���,*Nn�\�/N��o����U[�+//6���Xl/+l0a���b8/i]�R��
��4]s��.9��b���WY1-:����2 ^t�����_�v�|��nr\��<��r��-����5�\,���m�7�	��d2����A�AA%�����������/�mk���~��t����l����������5�^0�+�����������A+!���n�sY�>���o�����{G�	9&��FsK�Z'����k����D��^�b[>;�5�d������
�7��1�x�����
(�\�U��7��O|�W�TQ)����?�&[�~���IJ���l�VV�>��+��x����K�����-mf��3*OX�)�C{��Vt��_�/���[�/"g��*[E��	�x��������>���p[e���K����MVZ.om��l���R��J}�
��j�u�q������5�7������V�����3�rY���6ZaY�?E@�'/n����wY}��L��.g��//d!��/��~��;�V�O�y��7[��-L�/9�<Y�XE����[�����D��Ln��!�
����cd���2����'�k��P���U���/�*|P�g8E��m���p��2�����M[�
�|\<��&���l�t���~K&@�����W[IeX�>O���j,����v��o���F����P���[�NO����u����"?�V������"�[�{�c����4�6%+�?:F��e��b��`c�l?���KlQjA}�)�u�#�������^�_z�+i������i^��dC^���������)-:����?m�Vl���DYa-G
h}����������+�y���,+������=�f�]C>��Q�+�{�|6]&6t�_n���|���������k�y@���b��?d+2�h�L3U��O��5I�G�����c3��A���/�!���a=:!��V�>)������Ci_���Y�z���o��\��G,?�b���P�<�[h��Q��d����H��?���*�/�����F����@��'e���?�1��Y&;�]4����#���g����9uaz��j��p������"r�}�\����Oo%����l�'\{S:��&����5�����I>F�Cl��������n�)���/�!W��
*��>s^�����w����g�x[��i�4����?��{��F�o��}Wr��*����p��s�����<�n+�����%����m����
�.z#���:������6M�����%����F�?N>z�������K��2Fv�zO�I^*�Y��.D�?_x�Bp$��G��|��KT�e��/�<]*�i}/���q������_��7?������!TazG@�-A�=�]|������$����-��A�>��&P{����v����=��"�n���e������}[�l��xUZ��a+���yT9�,�=}��_&����T�'�g�V��h U���������E�����;��vX��j��������K���'v[g���N�&�g�e�����>o��?������|���3������U;y�\��`8��%}�]�������������*�� �x��M��?l�|��r6�������G�X��~6�Xa��;4�!�������������3����_<U`��e��
�)6�c �~��.8�I�����W������&��o(���9&c����o�[Zw��C��,'����kP�l�Y$�����Y��DV����\�
>�S����U������or=-;I���+�?*���n����H[~\}�Q�aR���������O*
�m�{���I��5��h�P�?���Y��G�������Hcf�I��q������>v��;L�����SC��~yj��ZN��m �W���JF�[��#���Ue_�
s����?����p��l�}��N��c������������F:�e�'�~`��z<*��
�!@rz��m�_��2��,���#����!���f��lY���Va�^�\��N-��r���*u��Ydt��gP�<l��.���xb����v���}T���-�$���6^Do*��*��<8c��"���-?)g�������*J��r�]//t��/y�������>���4�T�=�U��Nl��l�vn��e{C&{7��$<c	?��`5�=�s���.�/��A��G�|�_ �G���M(���E���ah�k���r&��� M��0l���G��r�$��2�_�KP o���79�?:5(=�H�v�[�9�M��?��t�L`a���PM8Q&�m1�j���?�8�[..1����p��<|[�x��7��'j�
8�s�Eds]�4����� o��!)w������������:2)��S������$����:��NJ��uK�X��8�������`����9U�]
[��������7�/�����5������?�U>�~�ng�@^R������W`;C��2Ix�w���
�����x�������`������<���m'�_���9���V��{�l��-�����$o!�W�����������l����'��b�{�J9&���h��_GV�w���g��[�Gg����6��"����Gy���/���>�7��lS�g}~e�u�������}���;���O�����@\�
�xl��Kq��V����/hJ���?e�������?����?�������)����_*���������&��������}�?�u�c�m��I�����n�>,��s;�?���;^��V��/���z����x��w���Pl����a���z������j�1��QM�R���
vx���_������w�����p����Si/�����c������u�9��:����k�:���?���.)��LR����C����������Uf��o'������#7������_�]�#g�f	�����_�X��������d�0\U��
_aC����2�a�����Y�������wPO���.}A>����������&e�b��q|^~�cT
^�)�t���d��������F@��=�'����sJ)x���K������3������������eG��x'�9��~����n����_���	9|�
�{���+	��R����]�X������\�������7��M�������0����c��1o1�����H�*x��Iv����<a-���O=)�M��M�Au��@����}�o�_<����~���jk<��45�����d�B�7�_l��$������Pu����������`�?�����;WGU
��o���UGr����w	�'��������j=�<��Y-�W�=>a��w��}s_���n��	+N�?'��w����Q�]~�������J5��=��'����G��`�!9���H������jRM����x���TW��������;�8�25�o ���&���|��,J�\g��������Wx������o8�_�g�Em;����'�<-o-�h���P�������C��D�	x���<�>+��x�s&_�<P�[9S�{|����>2�7&�!�|�U�H���r�*�xpe�J.G]LWB��J�xU\��+?��"uO;�������Ov�-�������%���6O��������������y���9OVu�5��]�M�3gr_��K�����+��?���i���B�iCJ��G��<G�����>]�.�~��'�,�m��/sAyuO��
����^uN�6��7��������VT[�
!Q�E�Z�y�)��r�V���K���KP���;����M2��:�%��������-��	����F�.|N&��I���	��o�Y��;uK���"�|g3�h���*��-?h�+���	�[�j*��lWK�s���e4���+�'�?������������_�0!�h��N����?�����-6���|6:�Q����
�+��G���G ��~�j�����������+�������
l'J��s���y����u���#��K{��?&	���c�[x�<a��	�Kn�K���<�\�m��
i8�g�cB?F~*���:'��g��������	�	AO���r~�����o�]�E�;o�L���,'E�G����!+�*=�qKp>����X>��IS�N�IV��&/Y��WA�a�J�(YY���|��\7��K/�&�v��M����n�/��m�!*�c�f��>�gL����M���M�/z�1X�$&�m�����|;�	��]��38�<�i�������?�~��������/���1G���W�X$������QSCIcb����s��U~4�3���� �L.����������l�^�1����6��Fo�u&�G>�IphC�Yl��������?����,X%�<�/
���h���#�%����+������]��{��s�������v��{=��%T�f����_&c�/��5�n'���������h
���l�I���S����#Tn�g�+E���X���M��i��#�aC��;�r�=v�x`��:��5�����<��>��q)����_7}z�V���\�����I���y8}����}�r��_������J=�Q5
:�?�ol������O��
���e�m����s��������L�i+���a���������?<��,��U�]��}P�D����K)wq��<�I����2���
����o��A���z����C���J�E����������gM�e�>'r��
���xUv�8Gv�:Iv(xY�C���������2!�k|��K��bbt��%����2�-G�]z�TQi����u�Y�qL���.��"�&;��<u�.�C�?�m�)��[Zv9����~���S�?����\&G������\������:3)�%���gd��9E����{eB��������|��{�T�6��M`k��d�|�?�a
��������"y����j����}��dW2|lK~�1���x��$p�4����~����<�M��?�}�u��;�-#[���<~������ryg�w<.���
wLC_��������RcA�Y~%[b�2,�A��������krC}����v�N�{���C��o�c���!�c��t��x�����(G�����i��d^�#&���v���N�+�P{<��xf�y�����������~���E�'���������������#��6��^7���+���+��E�]���_>�By���0��������k_yw��G��U�������|%G�
���?����C���>/����~?�3�r�i���z0���v�d�{����e�_�$�.���]��� ����?��?(w������������vAA��g�]A�\��l%�"/��u��f���.tj������MD����Z!��>!<�qh-oX��~0n���EE�3�<}Z�,���S�i�����G�mm�������WX��v���m���������	��Y&�m�tJ�"!|P���O�0U���D�X�5�>r����v��_���9fOK���������/���U:������-J�_0O���iL��E��������;n<�o��|�y��D����|�����>*������J��%�upnV+�G��_�_���S�����O-�����G�1kz\��~PV���;����WSF���������0�~�����8�p1����K������f�>�9��(.u�Za5}�K\�A��?V&����\2Y��$���&m�@���c��<!�N���(����7^�x���%�Z��a5v�(������Z����_Lt`�����������?�oR�?|���M��-���uG`������To0�c���%�������z%�� ��R�o8�y���Y��������?T�����g���x�}�[���W\'M��5�O,�I���b�%�c��1�:��Q>�%/A���!������|����V�����E�I������m�������g���Z����>�����<�e�?���g���#�[;�����	a��}L���9��/����9e���oG�o���_��'u��]�}��G��5��N����C���_�} �����?�]���A�|�8C���fI��?�WYn:?p������~c��wR�?��T{������?�:>~���������g��2+����v2u]=����>*BP����r��I}�#���7��Cb6c~)�o�i�������
r*m�P���|[I�2����s�\+������N����U���Q�c��(����^��5W���?���}�Y���<n���xV��|�bS���l|5����`��W�Z�?�o�V�o��7���f������7��/������@�����9�XH�J����d����z��_-�-�v�#O��@(]�0����z[�R��'U����
�b�9���X'����j�^��p �<S����
sR!���^�� O�+Ey�����JMU�s���k�:}�z�����I�����bu���i"����QnYRf[�
���y"���_��TV�[5Y���hT^!��-��.��������,�S��X]�)gqRzJ�7V�QnU�����z�?��j��g����V����s��?�����Cr�E���8�-������?�����?��������g�e4sa*�5�o�����/�!��?$�]2fJ���O^m	����G�A�����(I����?�Nn��'���o�����*�I�?�p���z��_��O)���k�m�z�>�����?���H��������IT~����'WXce�E��Z��g���d�����CE,�9��.n��������1��.�7[3�����d���iI��F��f�d�l���V��tgT����D+����C�����C����F��w�������J?�v��/P��#�|�QsJE���?�F���	k��t��f;w���VAH��M8��Z���K�	���JC�(|%�j��r�rB�x����n&P]���nNZ�9��.��7���T��Wm%�_��k� �6���^\�S�*�_�}K���$_�In{�����7�@IDAT����j��;��������n�#���ra^���O�m/��!�//�^����Me5��}^�lC�T�Q����?��?�|:���32M�:��������������JH��k���i��hF���z
I��B����������]f��������Xc���l���W����B��v�t���#����S�������Z�Ooo�C��$�aZ����������m�y~5�$�p���f9~b$��Y�s�w�c��d_�Fw>�T������
���5\B��1:�!~���J�F�N�M��������+����@Z_=��r�����%��Jz�or����g��o����b�j�v��s��53�n?��a�����6�^����Mg�19o���7R����C�k6�;Vh;��GN�|�m2!p��}��o������������S[���&��}�x9F��S���s������ ����F�G��j���Z�?�������N�<��h��/�!��f��r�a�����;B�����C������NG��C��;2q���c��)�3���G��W+�u�x1	�W7�E�����'��*�z ���!7����q��+TeB;�Wm+k�ez�}!��`n�vK� ��@cA����+��u�Pn�-t���2�h+��
/�_�������4d��7uv�]�����WZl���r~�(���;[�-����q��yu6�JA��i|��!��:kxGM&�����}���xH��C�����;�s��|Alh��,��k��o<}*���z��k	��}D�\��?,W
������K*��R�c��q[Y,�/�?�U#l��Zo�.]�c2B
r
�7�������a#���"[I�b���#�Q�9�������,��N>N��f�_g�xk:t���me��me]��}���2�������� ������O���9R��"+S���ix��s��+���n���|��?����t��K����+���i��o�uWO���`�w�;urzZ��&FF����_e�E�����Z?��C����l0���4J�W��P.���;���U.���p��u�d��x�����!�]2�o+c���v�������m��W��gZ��g\��[������	A?�IRmc}l��7���&G���v��������'�,���_=�������^�MV�j�8+a�s*�l�����4L��Y�W��H�����:�uI�4��3-�@)Jj�����b4r=��(6yZ�������������R�g�pH�%�N/`Y]���g�/�i��u��\��cl:f���r&3�J<���������|����:���#/�&�r��,�b+W���\u���-6�����{
M���G�������)}d�%���[F;"�$������������N.�k|��S��������������b��������D�>��%��U}�%�K���8���603\�S|ce�YV0��a�-�|o��kzZG�nz����������L�wc�MF^6��r����z�hG���.��E��V��,�O�e0�(\�&G_�������}��)���^'�~�}�����w���V�Vb,$g/�)gp�����q9S{J�G�K���\T_�����7H����|\�T:��s���J3���ZS��79�l�{Q_����P&7���7��������#~7����J������h�����n����W4�;P
&��%�x���M�����\�o�	�^#[�������� � ;3������h���d�^��p���/�������~y~{�%y6���U���{��;$�G^&~�z�?6�x|��/�i����^J�����������ASS�G"���d��kT��N<7����\�����������N+.�`�A�o��s*�_������8�.?�5��E�U�OX���\���<|��E#%HZ
uV�*1#�5�rG���!�-��A��C���-�N��L���Aq�����}m���y�������'��b���<�������cfikdze����w��^|���r��_c���"s����-��mBz�����O?�^�����������g�^U`�fJ�\U��|��
��5���4X��?h���M���`��E>�_����^�hk����6���}[������*�/~l��se?��|q�����^(����dH#Lm���|���<s�����!�>���$����Om����Oo�}�Zs���\�����n���;�e��#G��yg���,o��=���s��W��>m�)�g�Niu�����vwz�e��6Z����z�?���T����������B������'�����,/�f6�.��o���/��?�<}z��++o�>�����nH��2������Hx�>�������?,2�i��-�f�x�;��W���?�{{���B��s>���?�Ol}�cO���^�^�>�q�i/s����������{��t/�A��}:���u9j���L��~wz��w��)�}z��7������\������>=<�_�a]9�<�3]:(]a���]�~��s��G`�� 9p�Y�e
�����������AL�Wj�������8��JX�1�H\mm�
�!��7����',El���4�-u�j��|��L���,���/������/����U�Xa�I-#C��{��x�x�x�	�8��i)���������v)��KZ�0*���3��f��g������Lk����_��|o������0�hu��z�C\��xZ��#��������G��3����?�O%�gJ���}����?�����������������������������M��U"mr��(+���x�P����mz}�.Qw�Sa*�6�Qf�egq�_��D����I�?�\F��R�� y~�&*�z2��H������>:�5H�(������F��d|�$��j@0��q��0������9U �O�3
�������_%T+B-��C��d�?>F�Gx-�F�Y�<�kN!��0�B��X����7��G���������>���p��2�,G��������^P|�����T-�f9�M>�a���4������ <;��K�y�&��?�����i��{�Axv*-�f9�M>�����	����>�����TZ.�r��|����	�����?|������\��m	.�<a]U���VXH����U�Lh��i�
Y"�f�
��5V��In�*����ys��y������#�	kgZc�A�7�J��[	S�:�3��'������J�j�a�1���8����&����P�[	S�:�3�����Az��J�w����f��i�C�B��	��zb%�;�V�T������������@=��c+a�Y�y��cZ����?hBo��X	����0���<c�1�q�_�4�7PO��z��J�j�a�1���8�/����'VB�cl%L5�0�xLk��M�
�+��1���u�g<�5���&����P�[	S�:�3�����Az��J�w����f��i�C�B��	��zb%�;�V�T��������2��WX��	kL3c�wT5�L���4�%d��q��T�.��N�$n���t��S����hv�.�[��������N�k�
w���b�Z�����u��i�L����?W
�&����H�m�_�R�J�W�
X���"X�
�Y*�L*9Q����OS�B�(�b����6���S��De��?os>M���$���n���������*dB��8���9>M��CI�������?�L
_�7���I-)���}�O�����$��:����k��&�o�K!�ZR.���\���	�KI��u�S%���2)|M��,�B&��\bd��b����wL\hc�2'��R�p�[�n����L�+Z�l>�DU�5�r���}=��Wr��4���g����?CQ���4�tK5N��H����~%�a W��S�h�����!��?�Ei/a�t����8�����m��ic��b�����U��=�����J+B�ic>��e���A<����H�{���������4}���t�9�����_��
��PG#�/%eq)��5��e�G��n<RF����?� ��6��>M|��[af]�J}������J+B��Y�o�Ym�6�����]��������<a]7_&�U��@�	����e�qU�4�2�?^$�Dq���$s&De���A����y���W�v�O���F�I@���+]�������K��O� 0��S^��k���K������b�>i��xR
Z��|*��� ��J����(������
�����4������?�ea���hr�r���)���hD�_���W�
j��K��oM6�����7��<�?���(S{LK|*�/~���U;��������4�d�*�����S��?��a����h+(5������?��MN&�n����1������o��Yu�h^i+�Ry����7L6_E>�%�[/uB�
��������<�
F�\h���K��8�@�� 
�e����yTe�Y�ZY_)�f�t�p��
���l�'����������Q��&��������G3��'m�3?���a�8����N��Vem�]�D:�������`��:�5���O�h���������t�q>i����muk��?��:��[����w��4�.|�&>���������?u�M��+k���'�i�]��M|���!����D�n�W����O�����I���&n�CX3�����6����
�K�H�w��6��L�V��f�C��m��_Y~�>�N3��'m�3?���a�8���S'�t���6�.}"�f��O��g~0q[��q���N��Vem�]�D:�������`��:�5���_&���^���b����E���������dn��uB���b��8Wvx�O�P�Q+_�
k���uYQK�k"���ZO�*T�f+H�E��<����,�I�0��;4��>k�������������k�"�y�C����jS�c���W_�4��9��7YPf�B���Q��W�
P������?�e�!��W6*��J��4��9��g���#����F%S^)7@�f\b2gtC�L�b���^��d�+�(��KL��n����2C���+�Ly��e�q����
�3YPf�B�ze��)���L3.1�3��&�1B�_�lT2��r�i�%&sF7��dA�!F����J��Rn�2���d�����,(3����Q��W�
P������?�e�!��W6*��J��4��9��Y4VX�s�TG@t����[qDa�jE@#�BZ&�{�*�\�$�iW [���{#!��8���rG������U�b�����O����T����\�J��jG"�CcT_;D���l�5���q�[�!���_�_�s����~����8=$��?�����i���l�[�wk���P
��'�O���!��(}�c�Z��KN
����	��g ?��[�w��D7�O���?��m��~�q�@t����	��g ?��[�w��Dwx�Oc�L�3�"��9����qU5�c5�l	^���,2�\i�fH=�\�H���B	K���-���(@lI�n�\��r� @��_���,�v�������\�����9��W�L��B�_����'����>u�����L^H�_���m��mO�h9&-�4��)�fy�$�'�-���=��	�31�b�
�k��T�?�B�?1�L�?������	6��/C�Y�G���G[a�mO���L��������4��r������5�K����.'��(X|�t��g���O(��L�G��f�%���bi��O�K�����f�t����W^�i#��B�jNY1(����W���2��xi����F�Y/5H��%���VF��
�DX�yOA�x���3g�k�1��������T������`��l��?%���7G����h+C��F�4��Am!�O�������@3�9�+T�*3)���Q)���M97�����5�����
���E�2
�S�M)AzZFY���<�W��^�*3)��)e\�"��l(��?�8�����Q��Tg<�LS��ce)ra�
e��G}�\���mHu�C�4u�:V�"�G�PVajq�7���Q��Tg<�LS��ce)ra�
e��G}�\���mHu�C�4u�:V�"�G�PV��������+y��OR;=�I�n_3�,�G;~2�����K��.�����@]DH5�Qi��N��j�4��j�Yhi*�=�9SWYgC]�6`���[�������!U�
VS"�X����F����[�2�����_7��h�o�k�E���fi��-���vW:���+�)����Z����!�Xj����6��D?�������?(S�����Q��(���K�j������
�F����C��9��R?4����c*<����z��^��������n�����@�����F���6X�-��b�����Vi�����H��m���R	��7�����>��B���S���*jL���h�d�	��M��b�����
�/}��K��?*s����c�5����"2�u�GW��8����3�-x���3L:g����2e��t�J%�e\����A���p�:�.���?30�����Yc������N{��f��/�x]:���JE�[�?�A�SEZ�O
P�`|�T��7R��rg�������\��U�_�b�+e����T�*�z��_
����_j��*��O�_�5���kJ�J�R������q������]�Vh?%<���a�Q����C�P*�coO1�@_b���7�_��+�?Jx��1�r����5%�_J�R��{{��7��x�����	k��yB����`�����K��o�I~D}�����9����G������^z����o�;}*�����V\QpG����#��r�����A��9aKp��-U��t@`�W����p����q<ec��2���<���kq��gO�|i�4�����L�yRz����Y��/!C��4�^��?$������j%]������F���Ok����+����J�����	��v��V�
���P�#�O�o/j#1�sd�<����z�JC���ok���?^_TG����d#��+�������V<������!����P�G��;+��C]i�1�c���wZ��:a]9��B��M��z�u_:t�me+��qt:��k�E����V�_WE�2zI"w�'>��Zu��h�c�H=����
����~��r��"P�xE]�|RZh�9��s�����������;�����&���-�hz�{I/���_|,�-�m}�9fOK/4OZr�y��s������3��{���^��1��J&��_h�4�L3*H`��2�?�%��]m����Dx��W�#�����>2�����'Vy_��	���hYi]�����������NoZMx`�H �O�����L�C�������3�����'��>����z��|q����1������������b����1����7�o��1����;�x_Ao�c���7�_����������#�?��c�?���N&Zk����9�$�Ao��J?�����~�����OM/�6!���C5���
�w�
LXo���������k@�L�m�Q�k�������@+���=�-+�G���+
i���;.OZs����K.&gk+��GP|�����������;6}~���fXY	���x��t��7������N��s���2�
}�K/�m?��:�����M|ud$�V+ul���a���_y5���+,�P:v�2��	o���WVY��Z��=�������h����2�h9s�k���L�)i�Y\��^��E�8���B��_��x!���f��U� �ea��*�3�Rh��������#�'����^��3������x���?5����$�����~���<��g��L F��rPy�~)4�����1��y=���x�5�(<k
f1B�������j���I�?1����Z���#K
f1B�?*����B�����^WZ�����Z9F�������{[m,[��7�����h�����b5�m]�3��uw�(B4�����`���Ya��_a�3�%TQ��j�V-�xu���"��/�.�eC��9�/O��*elU��sR�}��O<��>V�9_�=�Ce�~��Y�vh��j�0~����N8'm��*i����i���?/+�7�����:�lc�o��W�I���te��F;�8��j�:��?W���\s���W��~u��M��$��j����{S�)
���� %����
���R��2���)J���ey�_C�����"	J%�?��#��G������x;�i�)@���l(������'��������b�{��V�����|�?*J����e����^7����
����cbzR�����6�i��
��u#�o����������h��Vs�@������J��Y�o^a]�rNT�jKp�X�e�1fL:�����d���qW�q��-�!.��%-���r>����\A`pE}r�j��O��>+=��s��2-P���hEF�.�Z�\��*K/0�L\�Mk.�D��Z���}���/���y_=zt�x�e�\��I��J�S��[��>a�O�E��3������� ���{ek�������[��i��V�z�'�H�~��Nk��>��Gr���������K���v�W�Zf����2�?��<���W^K_>��t�S�V}4\�����yR��w�3i��OXBo��d��o������vm/�.��	4���qe!H�K�B�T����jP:�_���C���l����!��t����?H �/�/�O�����x���XB��������i�.������H�$���������	������l����i�������o#a�@>����e�������+�z�mQ�<�J�����-�`:��["'�}�SG��^z}B��+J��ZP���8�Z&�y�u��:#d4*�����k����v�}�
L
Li��^z�tH��\�K��o�����t�-����q9�;���p���t��k�]�Y=��d����#��O+�\K�����O?����f}��K���<�.��>i�,3��^|9m����O���y��~�Z��oM����\o�y�Jga����n�3���Wd|�*��\_��2K��}v�\�-�7����O�`�-��P�`�������"��X���i�m��
�*\)���_��Z��D��J���]�����T�,k�����&�&����?����?�
������	���M?�#n���	��
e�^:���_j!��m����|<��G<��G�O����yS�(+`?��J�d�u2A����o��Su�]��������'���%�v�h��1����@�����_}-}����4�GU�M���L������:�z�c��+��z���}y����}u[�SA-�s���[�	i��o�o�}q��}�8�����k���L,�qu�u��jbe�����?��4m���y��Y2}��?���q���
Kg��uZ^1�������������;}i���O/���mW���d���}I����r��#��y���.<h�\��'��_��m`���e�<�������x��!���W���f��f�W}3�
��G)��Q�������$���f��f��W��������$�F��izP�7�m3�^������C��#52��]�('�6��7����L���b���	�K?B������x�6��7��?�����7�/�M�_�QJ$�os�<���f��f�O�?1�����S����a-���&Y�4)e;��Z�u]]q|�lo������&����R\	�s�I�Q��uu���r��38����Xa�3(h�R�jp�����Pi���*��Oo�����_�0���x��f�q�t�7�K3���h�G���x�%IU�����LL������o~������s�WL��f�\��+�K�^����M�O�Z����^.���J�o'��~�{��o��>)�\����D���5���������K��z�o����p��	�M�_��x�������[)S��!���tQ��������('��R�!��?��J�6YL�D�aa��Ku�zB�����?�L;�*uDu�_�W�i:�O���?M�����`/%N�����L�:�)�
PM��
���i7�����	������RG�5e�^�������6��vB����8����v0U����+@5�7�o�����NhW��gZ������~�Y&y������_������n����o���it�U��U}6BI�@gXo������{b��YLX�B��O�SY�etFUC2����p�5������n�����0�����o�[����_�[����Rm����p:z��n{����qg�9�<����W>�o=��x��������3�\�/�z������;.]��}��YfN���p��i����3+'��~e�4���
��^��t�_��Q�]Z���c-������n�_3O���9kI�7���Lv!��A�e��2��C�B�l�S-1�	���6��1��4�.��y�1���k��������J�v��,�k��1iv�aaa�f;�v�Xo�Y��QmO��������y�`������ip�gy�1�t���������X0���+�2x3����j{*�/�/�/��{��gL�k=�������6�O���vP:���/� ��f��MVZ.O�^�C���^JQC\�*�+��"�Z�\&��in	�r|����!g�-p���L���F����L&���0�\���H���k���K;����������0�������9�XE~��O�O8[PF����mZs���[o��8��t�^;��w>�TZQ�u���;���w�:���K����VW����'g�r���L��	��~��k��7������N�P��0����M�h��a��u�g�=n�?M�,���16*L��XK���h��	cL�����@�l�d�'�����vZ�^�E�
Ncr���G���e�%�68a�M�L������.Zmp�����<�?$�.�.Y��	clrg������u�j���\-n��!�v�t��
Nc�;S�<�����V�0��jq;��	���K�mp����j����e]����1&W��yH�]6]�l�����T;-m/���'�1�Z��#�C����e�0�&w��yhi{Y�68a����v�h�M�,���16�3��CK���h��	cL�����@�l�d�'�����vZ�^�E�
Ncr���G���e�%�68a�M�L������.Zmp�����<�?$�.�.Y��	clrg������u�j���\-n��!�v�t��
Nc�;S�<�����V�0��jq;��	���K�mp����j����e]����1&W��y����y�4�I�������v��jR���||���0�B��	k��d��W�����a�	k	{��9+������Io���l+kj�x���%!t�^��|�(Ya�	��
k�7����U��{�d�����g��Y)+�h��/eu5���������~q�����Z%�LG�n{������~��	��� [�o���!��+-�@No���_x�P\��'�p�wL3�v��9�������k��:�X.���p�}�<}Zk���
y�!Qj��P���9���%nI
e�������m�����Ok������������-�6�m���f�[R���������-�6�m���f�[R���������-�6�m���f�[R���������-�6�m���f�[R���������-�6�m���f�[R���������-�6�m���f�[R���������-�6�m�H�v�z@�f�e�(�9���b#�'_x9a;o�{���w&�	)�$�Z��O���ZU&���B��jKp�@�W�Qg���K���ta�[���Y"OcB���-��fY��Z%��G3)L����W�qye6��4�L�~�u�g�ZU������l����|D�F�*����_�C&�+�
��w���]&��}m�4�L3���{�����N���<3T�9����e�q��}z���g$��"���*�9i������U���o:D�d��K\���<��K��'��i��C���a�=�e;�{|������aaa������=>aFMS]������?X�oO�v���0���.x�_�_�����'@�l�p�O�Q�T<�/�/��a���]�C��'��i��������	�.�!��f�4�����uX��h����	3j�������
ln��(�HLUNbH/U0�-���y�k@��-�?u�I��7���L����$��i����[r��Y�[����r�3�n�g��+��w���_N���N�V5<��[$P~����4z��J+���u�[2�!����u�]2���Kw>�$P����=�x��X�AA�p�n��U�XTP����s�������s��^m����%7U�������\|%j�����>;�Y0����\|U�����C>�eZg�I�$�p�M��?^_�T�� -������W������W��7��y��uX�b������v-����E��]q�\g��?��>�fQ�P��eB5c�w�M|���	��'���X������
��m�6��Y�7�5�o��1�������Q�X��x����x��M�?G����������#�?��#�?�1b���k5���x�������h"�"�ce��t��3�L��/���8�T���t�=�:
�z�?�����I_����2M	�CD&��=��t�x��v�)��I�Lr.jH5�%~-�E� [mg���W�������L�os��R�����s��|f�����58��v��S������7.M���(A�K{��f���Q��x�I���^L;��J��l�N��N���Hop�
�6^;�����5*=��������6�S��\��H	2�Q��_Y���MV�!F��C�*�R*�r+ee8H������-������G�S�J�"�j�z%�� �����m�[a��GOS�BMr^n%�� �'�O��.�o!�)F�z���j��r+q
��?����w��x!L1�����>�P���[�k8H��	��G�m�[a������)�����J\�A*�O���?�]h3�BS��?�4�O!�$��V�R�.�S���	���Y�D����]�M�/4_��w�?�a���"���=�
mG���]#O��������h�Z!]������;������i#22(TH��V�j�5J�JMU������>��,X�������I����`��)��*���k9�z�uWO���MJ� ��[��������7������{���L�~�4��������]�>E�G��g����ni�g�-�_J;��I��	��3�C���KZb��3�i7�����59��&������4kpK�m!.����U]����7���=��)��*��?����?�ZI���b�Q���,G�c����������_�gQ?�o�?��E�?1���C���ec���7�_>S���A8�7�?��Ke�_��E+��/�����j7lDA*����k�>�	kUkQ�zXnhc�4&�������m?��j~������>5�#�ys�rm�l�QM"W4G�+�`�
���
�|3�\��J�5C��3_SR�t�3]�u��� �v�5��i��I���5=�����g�M�MxC0��/ek-�xZn���5�<�x���uV_r������d������;�K�2�����?-5G��d[���:Y&�_�/���kzqs��#�mu	���4����y�W�9�C!j��
!�j�����Ts���>�t(�����)+���?�6&+B������W�n��b��o�����jcH<��G<y{h�J<�(��M�!����j%v�1W5'���O1��7���=4mE}��	���d������1��W�������Za��v18��2����9�	�#v�V���/c��wW�?����Z9��j����8���"���S��� ��L��������-��I��Ec��D�veuQ�a�m���el$����u�����������K��p�:��R]���
��V���9Z��uJ]2	������<���l�w�-k�W�c*������?oL�gGme��G�a�B���?�`	���cc���|[Y,�/�O�XGo���x�n�1�`r#b�z�_�_�����������#��?H!�O���?��fh�1�1n�A��������-���s��������e�Jo�1H ����t���	�J���w��_MV�#���������A:a�$ZR�wNX;I�z$���Q5���\|�������|r����bpR�R_��%��k���?����9g��V�������=e����N��Z��'��%��.�F�t�l&����!E�_�6	{x��J��c���M�Z��h������A�������<�S5rl��`���r��Dn�X��B�!h��
����/��vV��V'�_�_�_�=��7���H���?�����4�����r��O�?1���C�����7?��}�S1��c�/����ex{3��������
)��z��eaaa���>|�������bp��r_�7���2a]	6��n��KF8t���
�,([����S����k
h������jPA���5��
�uQ��[�Z[ry'��F�m���Wsq�f��)�N��D5!�}�m1���t��5VI��l�����oM�����������W
�K�������zQJ�;W����>�$�u��C�B��������.X�_s�,�����>�7�o�������f��9>���y�s|:�O���?���(�}�O�W�����'�O���|G����n����9>�'�O���?�W��>�����}�O��	�3t�S�a])�_�\o	���+�M��cl:|�m��s�����
���.��%#Y]e-<���8������tWi��b�$,�"u�2���S���I��)2��������W�����[l�#c��d��k�?��������3���B����ls/=R,�k�&b��o�O%b2���8���4����L��1B�_�uB5�t�	g9�&��������dIq#����Q'T#Lg�p�����	��7�������O�/%�8�b����:�a:���<��c���7�_������O�/%�8�b����:�a:���<��c���7�_������Of_�����D�Z�F��R������< ����mlZ}���]O<�{���nv@ZA`$������*�&�%�V�����:��w��R�*�n�������~�5�[I��	g�}�2v�p�7����R�I��5g������j_��'k+xM���J�?�/�O=��	B�?��_}��'\i�^���#������r��|��R�������#��Uv��?�/����?|���fGe�Y�<B� ��M�������Y�Z.�r��|B�������i��{�Axv*-�f9�M>�����	����>�����TZ.�r��|����	�����?|������\���#4�������m	.7 OXW7&��IX�oS�>���.���:
�S�T��TE��U�\�C�	l�o����4Yx���q�����V^���� �To ����1���u�g<�5.�O29&�����0���<c�1�q���M�
�+��1���u�g<�5���&����P�[	S�:�3�����Az��J�w����f��i�C�B��	��zb%�;�V�T������������@=��c+a�Y�y��cZ����?hBo��X	����0���<c�1�q�_�4�7PO��z��J�j�a�1���8�/����'VB�cl%L5�0�xLk��M�
�+��1���u�g<�5���&����P�[	S�:�3�����Az��J�w����f��i�C�d^���%��f�����3�k�(���'��L�[�K�W��Z�k��7�*]�bJ���T5�\��D�_����,�� �oOH�l�����VE��*���H*��=H�P�4����F�	��0
YWr)`5�K�����t����9�a2���(}]�_�K�s)���D�_P)��������T�j��6��,�B&��\��>-�!IDAT9���	��?�>Z����-��G��?Z[j�	������'��b��O���PO.�����T�x���#�_T)
�pjS'�������N�Jb��?��u�%���r���K��<�Z�M������hXN���n40x9$��s`�vh�:u����t�hQo�%��Y�[�
���_�Ah!����Z���-$J������_�9jH�_�Dr��|���������V��]J��h�<��'��Q�9�4�1���f0���+�O�/�c����{�b�iJ�����,����^���6F)uC�L�L5e��>M|�C���;~�}X���^h#�(�����K�)��f���n��g�U�.���I(��,���������u->�dV���9��e``�d�[���A�L��zN2g7QY�J�"+���FJ��N.�������)@�%.�J�����<+�����6T�%����P������U��!�R(���l!���G��,L��=���\�+���M���L�)�O��+(3�b��+�����~����ey���&����=��Q_����_�,�����O��|����}�wey<��rdQ
i^c����|����[jP�_������J�?�S>1����O��#�x�g}��_n���%���d��]+�U�$
|@2�;Zp �E�uqi�U4�HY�Z3l����Uq���T���LoL���ON^NX3a�����������Q��&��������G3��'m�3?���a�8����N��Vem�]�D:�������`��:�5���O�h���������t�q>i����muk��?��:��[����w��4�.|�&>���������?u�M��+k���'�i�]��M|���!����D�n�W����O�����I���&n�CX3�����6����
�K�H�w��6��L�V��f�C��m��_Y~�>�N3��'m�3?���a�8���S'�t���6�.}"�f��O��g~0q[��q���N��Vem�]�D:�������`��:�5���_&���^��	�$0�h��-e!����4�~��RU�&�jyKpTx��i�*�C�6��n�mE�\$	�Si:�5���5��6����hn@�J����6�5b�(�W�J#�p�kiR�0��F*!�eLSf�B��'��J���2����]H9�i���|�_�n@.��u�i�M\���?�e�!��W6*��J��4��9��g���#����F%S^)7@�f\b2gtC�L�b���^��d�+�(��KL��n����2C���+�Ly��e�q����
�3YPf�B�ze��)���L3.1�3��&�1B�_�lT2��r�i�%&sF7��dA�!F����J��Rn�2���d�����,(3����Q��W�
P������?�e�!��W6*��J��4��9����Xa�b
�C��DWX;�Rn���Y���F����l�A�pr��@�]�lU������:�L��eX�z��
��P�-Vj�����$�?HuQ+��&+Z�SW�Hh���Aep)[�c�Y��G
e!���_��@~B�K�B���
g ������	�3��h�-�;��p��'�O���?��6�B���
g ������	�3��h�-�;��p��'�O���?��6�B���
g ������	�3��h�-�;��p�;<��1a
�xUn�f��l�h��������Z�;kZph2���uq!��jEK�4��.D���u��bK��*Q ������5�o�/��*U���w���:�t�w��)<�������ge��-/�n���?�/�/�O-�����,��y�X��x�j�/�ZW�<�H(��h!�����c��{1i��c��!�c���=���{�6�������!��������A}f�_*N�?6�������������4f��	k-��(��U�� o���Hi`i
�p�������|��\�TnWP�2�Jc��4�����4��6��r��p�����+J�����J>��.�V6m����+�
VX:�p�M��G������%��;y�����_����`�x�{1���[���fx����?�1B����N�������U_4=��K��{�
���h�������AYv�4��3�g^y5����g�h��*��%�$/%���Bm��(�� �vF�`�[�C3m�c�C;�)tZ��i�6�D�-*��6�-�[g@;KIGE��� � 	y=g�=w�~=�K^y�dw&���={����csw��6w����k��M�y�1�169�|�1���R1
�C��(�]��������dL����y�z��{�{���m��ei���|S���Rc���H�8����g"��1�a������?�o��e]yh�a�
����X��c�����gb+6����b�/k��C����l3�D�y�);�+���gy�Lde��C�M$'eS�,3����<����P� UR��\u6�������������e�@��^DF	��9&n�����V�����m<���kXU�U�h
���D@>@R�
���[l
�<������H�t��A^��|hB������=�ka�5C`�������`tiv}�K�[~������#n��.c��x��=����/���/�2�g��?�q�Y�8$����c��������j���Uy��Fi�/v���E�A���^���]���#G@��I0(?��?���
��jG���O��s�}~>m>#	�8��x���&���
b���Ix��E�J��x���^E���%��H���O&��:��'���+��vtu_�y?lJ��_��:?m�<fx
PoO��(-���L�������t�/m�e2a�?v�����a����?k��9����/Z�o�����Q�\+�N�����?6���c��0K����SG�|mX]�.y�������_�����%����[��tM����7�����T��N����zE�l���G��GxE���L�N
�9:WE�������������b�g
6���p���@7�(����OT��W�Uc4�&]&���jMX	A�����B0��y�����G�&���	��
�*�q�<�Z����/=��������
���/��#�`y�M�r�,UW��4?M��2KHa�/�C����N8��M.v�X|��i�%8}�|��s��k��g��Qy�p���Tj��}�?:8y���~�����'�
9m$��+�C�w��O���Ou���?[�������"��a�`���(r�i�e��(����U�M;i8TM'�(���5�����r�s��{t�v���G������w���`���`��WC��������^�������76����,���j�1zG�~����R�z#����c�������T�l��_;�i�QP0^��Q�Y�.3a}�/�$�e��*;��L����?�D�Q)�X%����L�%C�����P9y�����a
���mS1�
���e�gB�z+�xeG����@Iqm�0k�/�%[�g��w������k-}�D�QS�?��OqL���+q��v�������m�����M9&q��"�������SIv�����8�y�s�f���?6����*�6���,XS���<�Wl*�G�����G�D-���E��eb�LN��'��_�*<��r����6T�'l�b�L�(�������^r�m$����*8��c�����'���P�c���O��<�]�T����s;�>���y�����]�%�D<E���k7�Zq�3���'����n�/�����r�����H=fx	.����
[�p������`(.p+��j�&SW�h�j;����`��Q�j��PX@�%!m�P�p��~��?�N^Z3(�W�BQ������z��r�x])�%z��}y��,\���S�%����m|Z5���7�|<�H��tZ�q[WW5���l���o�:���6���v����8��?0w&���'p�����),�jXe�����.��'�:/XG�BP��������[v����O�f�����?�����jfMG�������&��|y�U�����V������7���|�����&	2�����Fm8���]�]�_�~}C��0
���~�"4�q�i����?��bh���S?[�������	R�������H�����q����z%������_�^���a�����.�9��f��������N��� ns��������F��{t�R6���}�Bi��;a��*����{�a��Mx�Ze�>a��x6�-}+���e
���,���d��e���o�o�O��g���<K�������L�ed��xV�Gt(kQ6g��������_�=�	�����YIF�I���5u(*Or��_w��5<Y�Y�V'�E��H���NT*N��$+���)���[��T7U��t��q1y�-e��d�����[|'��Z�P�^�������>�x��z�yvaTa�>����S>�d�	�s�>-���u@��GZa��}p��2�\�T�-�>���PHA�Yr\������U3�
^������7�^8��W�u�T&�KL��[������dw��	��r:������lk����D�7�����O]�SG_k��C�>�[���t���v��n�[U�p�O�����6|{W�AAK���LVzD`�|:�O���=������J�U?��s�>�e��\�k�/��#�����������9�OX��Ux���;��
.tB���/�/3hf;����7��	�Q�R����Fu�Zx�{4���s�SG��������oS�	��+��#\��-���;����3��:���U���(�������[����G�i�q���z7*���-��*j� (�)��-}?������9���$u�a�_��$��7]����7C��JE��}z.�a�)�G�N���U�gJ�Dr������y`�3l��x������5�����G�'����AY�����O]������-X���_�n����\w���X�S��|�v����uA}7uE�,��?��M<���?�V���Y�c�F���2���E�t�)�`���������c�d�@IDAT�]�E���(9HTD#����0aD0�9g�;����3�����g�9��`D%*A����jj�g��eaW�[y�������g�������R�s���_rUU���X���P�~�@� U�gk-���V\���J�#����&K�����z�)�s��n��VF���������'���	�/Z���w��O���q�`�!)|
n	�����b��W�����pK��Z��y���/����=��8���t{o��w����	��'����%5������KX]rO�?����{n�����rm������7o�HP�;��{���u��7s�n��k��������W��~��1=wm���i�,�����_-8����k�l#����n��Z�����8�}��DW*���i3����������������3~��uj����kP������}�=��7]�fM\�+���tJ��F��5���3�����\�&������'�M|�Y�N��r���wo|1>)�rk/����W�=��8w��wK��W:]��R���5�?,��[���F6ev]��/���{���^}e���m�����B�g�M�o|�������s+�o��M��_~����c��q�>��&��-������������_qW<�\����<n�?����P����2/������q&�ACl�l\:���r���9p'��r�O��]~�������_��k��=������sF��gQ\��oQ���X�3d�$����������(TM����k�����>K�	����x��������tu�f�vob�:v�^n�
����� r�Tj&�K#��R��|�k&�$+-�c��+��9o�	���M�5�
��:��I���J�R���%3��<-~�G�KV�#�#�m/����o��(Q��Y6�����������7���UD����}�R�O
��W�~���Y^� �B�V�E�F�g�������NH_�tn���m��}9�{7q�i�����aY7���m����r�`k���~���'x�<��Y�B`�J���a��n�����-��nS7���&���-�q�����Gc���'
���D_�9`'�g��������c<2�tDl�#(q�(����6v+�k�f��-������~����������8m�4����k���"����%���o�<�#�&����vvk����0�G���/�{_��-m&�N0�v��V��Z4���S���;�������lL�4p�v_�u������r�T���I�_}1B>��X��������[���ot|����7�p�~���`$�2c����ah\rw�t�{_��sw�
w�)�������N�����U�� ���m��]|`�[I���x�������9� ���f�n��G\�g������B��;�7u������9~�~R7��7���?�����O�Y�?)ZT�����C�vktnLU��o&�3F�����}���w��vYwu�FCz�s�t3g�q�v���������7m���G9����}��1�:�n?�`G�|2|���%�6�p�:b����_�mk�s��=w�{?Y���(����h8%%\,-��;/��v���'��J�~���5�� $��k4���{��Y�g��m�zwQ�}����+�G���H���Rg�K�+��>�`����^c�����?���>?"Y�}k�R�6�u�e������'����|��������o���r��(�uE��:���k�#�C�K]o�(i�|�;�j]����m���g�&���^������{���n��`���[�-���|���{���0�vj�B�5���d��_��!m������0���6�g����d������/�`},�@3�������\>~R���];e�L�`�T�/kY
�l���������+�6���-��`-(��k��>��:lo�f��v�����_yK��o��'V�������H��:�u����r/�j��������S��?�o�����s���! `K��?��'��w����~O!�������/���oi�����{:`O��S�����W�q>3�������G<�����W|~�^h=�D���������d�2@�:�Q�R��������|6)~����g2�������YMh��1�"],���E�d��V���4��Bg<��8�4JZ�+�+����W���g?"}{B��?��P7E�_i��:#�d>�����r���X��������'�?�n��O�����:���a*[�����&����������^��pr���x�Cz������|��s�5�&0��tV���8���{��ka�5g�v������q�h�V����i�2��sa<�����
��*�)m	�Q��y���1��r�����)�d��
e���N��6[e%MZ�z��c���s�2-��[+����������1������#�l�:����2���?�����XZ��\���k]3%n;�@��n�i�7��x����8�p��]�zvZ\���}�c�y���k����O�d]f�������D�'u�=���qv����������6���m�b�Kc����&J�W��n���\c{��
��F2�
:��>n���s��n�N�zN���b[���,i(����%����.�l��,Q�a�4�KNs��)�OC��Y�0�
�������������=���i!G�`�|=e�p�7X��t=�����'�`
�\p5�z���i��S�����������-����s������J�J?b]�}��n�t�^���1>�����b�)�3�~x�O>=q��rb���>p����]�`=:-��$���N�y��2F[���2���������)����Q�ns��$��=�Bf��?�~����G�-����#�l�yl�PU#*���	S��[n*��fc��r�5����;�A:��������hm�/���<�{n������t������O�kx��ej�����,�������?i���w��1n�������5��O�Vx�7���T��O��	�m�vZU!���36z��g_q#�y���g�g���!��;j0�$OX����VO�u�$k��W,@ �tx+���+�J
�^1�z�����v������S��$xZ��S�z��/��o�����:h�%Q$�	�����}/
��1�[��C)�?�?�j�� ���OQ{�R-W�����d�S�;���xe0�Y���e�nz�5|��'h�����s��p�������#�zu��������g���u� ���)3~�u��� ?�O�9Z�$.��	��^Vv�>=
�/yF��7�};�Vw���Q/��������_M��cu2���!���=��a�\����o$}$F?Ou��m�I��]�I�%|�p�|�P>F����������_|�8���E���$���x~��G����g:�A?�4�s�}���qW:P�6��G����k��6���m�D�8�N>�x�u�Id��_����t�����U��
������C����8���Z���X������w���2��2SN�`��}?
��
��u~l�m"�J<��'T��e���(�@%����������E�G�W��(����������tLuu�����A�S�<U^�����
�"���(Q���������JC%��yy�N��:m]	�O)�	��0:o8�F�?�����bhp`��^�/��m5�j�/��z��z,9a��������5���l0�-���5_�X|��������.�`��]v��A��B�����|Y�l���C���%�!W�Bd�%����q6�p��;[��;�?�� 
mr������N�{Rjul+� !~�^���k���m8u��$��-/����x��h�!��a��{��o�aW�X�L'����?�LS���+tm(m��t�|�5����Z�S7���R��X��}��?5D+Q|��dw�7!�4n=�@��3��%��i��>��G�����=p����Nie�����9�<��� ~�������g��R�MS�����|��A�h
Q���s��~C��[����h4#
�U��-
�������G)��0�?x���e�8O��	9��l�s�&.���v���n}�M��@i�>!�&c�k���z�@���H�0������O��1�n��Kd��?�JY#O��8����w���~T���������kp�~�;I�p�|_9A���	X�7���k���Y�aK�/���w��T��JE�'�}1i��W��J����v��k�$�xe����83�>)eR��Mc��(u��ReI��_��O�w�)�[��X�Ti�a��	k����mq���9^������D������3p�����%C�_O���`���G��/��J�����rz���x�J�Q��t����i�y����x������Pk����Jk%\;@c,O&[�*��}�c��������q���� SM���v�{��o`o��:��3������(����O��?mWr<�z�>���_����O���]1~~x�">����CO
=��oH�\���K���f�JNN�&W�<#.���*�-��<}�y���k=&��z�-���:��/��������N���D��Lg3�N���u��=N�WZ����z����y,���7ZE�u���=���W�L����j�������}~e����������P�����xF
��s�}��0<��$>�����f��c�����ny�eI��{Q�?�7�����N?<�C�#{e��S�a�>v�������g�w���7j�4[�p�2����
�CM������7
6'�����!�W���5[��d�H�\`�����������LWD�����K��]��~MQ����o��*
^&����������'�����)�[T{xmb)�%��6�_���I��&+�	����������	�7�PN[�R�����a�|�������#wU��E��<�x�u���@�z�y9D��7��g^���p�s�V-q��Znw�#&m����c��+�%O���+/��e����p:.O	�S8'm������*X>������/�n=�@q.�0x.��A�!�HR
{�%w��/*x���&k��8v�-��z�{�������:��;-�Rt�y�����r<�����A��������ZO������{2\."���[�^t7r��%O���������FG��7[N����b�������z�M��;r���y�=w���(�^���n�nt�]r���2�J���C����}��e��qz�
-���G9��L3(W�8?y|=�~����.p	�<��Z8��&��|�����^���w�}�����7=�������V��I���
l��=2z�y��r�1L�����|�=��_���b"Tu�$��h���;0O����~��v2����E�C[��\�OcR��G���U���x�������~00w���W�oZB��p�?���j�S���0�@Y��i���^]��	���'�7^i���c�7�$��[��!b�:r�M1+!�J\�/��Oz.��Q�����aW�".�Ix���q�����L���"�=;wt��@�	��~�����v�+ ���������������s�Ae�Oz&]�~[���z�\��,���~����;bk�����N�O����e����P��Mk`����'�����~�4��}��Is�T�����~�����~�k����d���`�;��{I&t�,T��8a-�sp�l	���[w������������z�AI(~��}��N�L��$���?�����n{�Z^�k��it������V=����;m%Wh����o�G�1G��{��[l�S�����o�f���Z'�?s�y-
��F\���q����k���7�I�8�.�O�?<=!���������4�}����
�~��r�E�����zR.��`�w�O��7(}�x��K�0�������I0 ����Z7V�+��������_���l�0��7���e5m��?J�������z?�O���.��Z�rX��/���k]>_�����u%|~������:��&&����W����v=����q�������QcG�,Q�}����e����1hw4�x��<�����SF�f�K��	��S�!���d��p�P~�Y)����/����������W�|� 0%�4���(�Os	O�*T,gx|��&����V��#�EYy.�}�j"�+���#�Q�����\D����W�������o^���Yh���'���t����7�_�m��c��q���(����V�����������y���$9x�
���EURw��o�QV]j�����_�(���|�D��M�����K.�{�����n�D�%Yr��������
M�������b�}����_�������4PrB�w�^0h7y�����r�]	�^��KO����N�s���
(�%T��G�����7���N�`��d�+{��`SeC���x�J����i���S����np��oW����y'/O��
��2P��7O����?��(��j�D�����T$N�#S{����x	g*�n��2U`n8z0��<������a �����_G��
47��;h��Q���s&:��>U������Lw��	������+�r����f���v<���^��\��FE����Q��~�_44]r�x�J��{���g�i��[��aH��s��o'�IE��o�q��T����;�'�y:��P}08�jO��w�����������nd(�=�V�>OFv��s���%����`�'��wX�8������C�������K�����o��a8�EW�F��:d�9�oe����oa���!���������^��y�o�z(�W���~%Y�(�,r�w�:�'�oO��a����);G�R�Z�������P�����n��]d�w���������9s��g�������06j���I:�[W,#_x3��y	h�����p]�u�1���<��ew���9��eK����R��ol�y�;���_�o/}d)]�>��G	M�������.��O�{����~���v6��5�Uq(�}7Y/�X���z�C��<��u��_�8���9
��[s�w��N���u�|�D�}���,.jI�$x(��6f��������ye�������������>By.�5T�A���bC)"�rB�9�Jn<;��(�������-� ������~�@$fo��Y�tONXCw��8��-t����o�6b�v>����d�4o����da�����Kj��>�	*�{�u!�=�bQ����\,
����J��`����;�����u���E�]��M�����s�������{�����"����{m�g����Q�	��8� ����W_Y�{����������W2vB>::�
<��,U�L1����W��?	3���>�+��������?�}��J���7�������_���I:gP���k�j}�?���H\�������[��?�K��G��A�T.L����������d$��q��������_��:{��'�(b�7[/����_��������m�\��VN`��w��
wI_��<�H��qo��/��BU^��
�����n�%L7�����>%4���N��j+����	c-Oo��8
��3f�I���(����u���b���_�����
'H9.���<�B���������NN���&�U�+�%w����)tf�O
�R�����d�2�Oy/��v*Ca��%w������[S��=�z��([�j���W�Je�Ocp��!�z�'9_�������������Ip����;�\Mu��t���������������{o���a��?���r���}�����?�������Vp�~�V���a|�%�Ha�u���5���_O���{�u� �h	�Q���h���/7��J�Q������IA�v�i���NO�o���[4��h�[LX�my��w	>�������������:��}��2@�O���R�(coBO
��z�X��@R|'�~���
�p����������`����4~��qf���]��������9p��Z���
����>GR)�~��|���G�?����/O�w�>u�nuW�tn������Sm�f�����^;���;
��}��#���m�>[��������x��:c�������������Yue���/�U�_�����5u������������#��O>�b��������I�o������"�/�W���p�nV^�����@��B'����������
�V8u�M��sCpW4���UO�=>�����E�`����
W��8k�~p �g(���,����^��i��(���o3��p�_9����%��������G�5u;~O����y����8���;�w_��x�D��D{�	y�����K������V���uW UO������5;�y�4X�D3��)#�v��C������~�����u���u�<���X?K����������S@\<B�{��h\>����c���Q�`������e�@����~~�i�L���_CEr������G������J�?�\�\+?}y>��s-��JGu�q�����i����+)�	��r�x��a��� *�q����W�~���+��������c-N���_\q������g|!}���y��8�[��y���k5X�1(�aB�����`MW�t�*A�m�Up������9l�#�������tr}�e�n���~�04�!9T��nc�
������I4.��/����H�����p��W0`�T�������V


(d�`��mM�
��i}��ym���n���Rm�s�S��W�L!5�p���|^�2w�������OX{�5�]�����-��%4�2��+�U��-��?��<[1�nY��+����IM�GI%�=��7�s�����7���k�e��a�,�{C��aM�.�������n�m�����R�{1:vh�/�t&Y�@��a.�����
D�STne+<�����0^���[���	zB1��~w�}8��qR"U��t�����Ia��-��'��F���5]���K����;�/���cm��t]�\��������>]��zL�lw�P�O=Wr:V�?����.�'���Z�a=���9�kq��"
�����BOXW%'g97<��M�{s8*Jn&>f���+]������7���!C����vM�/��~�3�	e�������������.
��X��_3
0���.��T�cT�<o����9�[Tne�	k=!�'�?.�?�����|`���:�(�B��o���K�Y(��N��~b���������H�s�[�����M�	]�CM�.NXo�cEqQ�Mp�����}�A���a0j�6C
~L���"<���a������{`?YY�[��
~������y�4q���^��-�B��t-���q'|��#]�H��������u�5�;~X�=\�����iG����a'9��������zB;���&�Si��t������Z��XK�{>���K����CFJ:���M��qU.7X�rI��pl�.���e�bx����k���T1
����F��EANX�`M!��������RTne�������U�UTne+���_��]?�b�.�����@*KC)Y��z���T�r3�������.���`muu��i�����?�x���)~��ky
��������.mZ��?���xf�������0.���u�3��tQ��Y�oSi�
���y������r+��`}\���r��7�xYTne{�[�����U�UTneU�����b�T�eQ��Y��n�bZ[\W	WQ��YlT}\L#�'�yS��E�Vf�����ihmq]%\E�Vf�Q�q1�H�(�M%^�[�����*����u�p�[��F���4"}r��7�xYTne{�[�����U�UTneU�����b�T�eQ��Y��n�bZ[\W	WQ��YlT}\L#�'�yS��E�Vf�����ihmq]%\E�Vf�Q�q1�H�(���ep��\��	"���o�!��'�x�{_��;��2C�{����������2�F:�~�s�v��v�ueEk�.�K��������0���-��t�M�u�a����+&��t�S��w,��D)�8L	������V8�)NX)8amLI��}{��N��������%���5�
+�w�QY�_��:C�|�'.�������%q�����w��r��
���.�K�>�v�}O��q��0����?{}�j�������N|��dq�K���9�`�_�,��9����w�������+|�{.�O������V{�J�����H��I�}��zk��0�i�������\m��4wh�L��cyLC;�C�]��]8�,��G�aH�K^�OR�Kptb����uIN��^q�?n�m��B�/e�����i���l�;�"���� �Z�?L�'�5h� ���lP�i�1�[l�a\L��
�5yq��1p�Oc^��<��c\���1���3>v�������������-���#�$@0�������)���Tfy�|m������i��������//8a�S8�0���k��xl���������Jt��_�
�%��o�����J~��(��g^��'W%��Qx��=�G_{+R�O����4���<
Z��c�������.��]����(RwQ���
wp�v1������5���������)�!p�O�t��@C��r���om�>�&���������q
����?.I�������z�^J�5]��i�$iO2%��?.������:h?��������<L�Y�'�+����X����hh:4��i�i���zL�_R���WGQ���������a4�B$����������IHD����w��4X#��z���>�k}�}��
��Gii+����l�����&[���l5������"�����=������NX�K��!1����}�yp�1�=[��o��
:���aZa��y�	� ��i��H���*`bRW.���*E�k������i�u�������&��I�rGyb�o�c�)�i(sa�V��7�?�_\q����wL��c�1D�c\�9���uY8w���iK.������m�X�.� a����LQ���
���,�&"��-�:+��Y�!�0�m���x~��?�����X��vb����4��s���19}
��AX�y3w�1��!����#�-'('�hL>��Q����B�1�}�������.aO����{ ��{���������3^��������3N�r����}����zIB��a������M��|P���*]��{7A��D��m�{���e��n{�H��.����{q N��_
�2%:�6�?�W:��C>��U��X�#����������%��r'��3J���u�t����������Qw�k�H~�
z��ou����j��r��w=���W���-p�0yr����.m[I��p?�L�����q�[q���	����C���_���i|���I�BW�{����!YMW�t��}�2���/���v�b�s���}�p9���`���p�91���m������t����W��&k��������+������F���C���J����t7�g��o�s�~����)�??��A��]���Z���2kkq��b�b���H�W���[r��7w��|���,���p/%u��0.r�\����h�t��=\+s~��
�j'��X�V��b�'Q�5N!s�;��!�y>p��j7~�����r�?����z�I)�a������>�����GJ��~���������-{�{����t����5?ejs�G?����t�����q75N?�ZN?�!����*+�sp��h~P4L�r�k�W������� ��xU\��6�<}�(>L�;
w��=�c���;���\�A]?���ZA��'���5I{R����k�U7�P�{
'�{>aK�Oi[9!�#����[Y�
��AcG����x�S��Q��J)�{�7b�^���[��Gh�1?~��a����8XB������<UX+���c������g����|*%wz�m�m8������%�����m��.������?Xks]>����4x)��}����v^���wcs��=����k����G|����c���s�/^?t3��Y�_y
�������9JYy9�S�4a�iA���W��#��wQ� Y���bk*�+���������O�?\5>����ZS!��`=KE�����V�p=i>�q�%D��kCy��<t����������'��>a9��_r��_y�e���-
q���k��;a����4������;�v�������I��a�=/�7���%w�k����^��?���W�.��?NY��|y4��X�������+����`He��b�%�����Matd��������?�����{��w�b��]v��r�T�������cN:H@�g�?�|T\g�d;���z���AOX�KaS��	�A�����������?m�&wO�'�x�"]�_����?�(��O��A��M��s�}�����%~�����������$9���m�>_p�� 
R�c���xa>�D�����p~��e��_;�����u���f�{ww����������S�;V�3�8��4g8�1'�:����S�����0���/<��}o��|��p�K������5��^|���@_.�}��u�,���`M�\�/������7������7���r�����mp���p��_����a��������|��1>�8�����;LY����p_�-N�ON�����nO!�z�.��B�vA����x(�j��\�vJ��cG����Kp�@Cv,#���_�_�{������o�W����/
�%��x��O�{��U"��`���5l�������W��.�6������z~����[^k���z�u}��t+��;������9'1X���u�KpvA��C�1��7��NA8:�l]�������?Z��p�a��5;���/��Wh�R�/|����MwzdR��j���� �_�=��U9���5
y�'��>|�����A�.��O���5���*������S������0xs�������Noo�6X��ml>(��'�a��[���k]W~�a{���!�%�����=������g�z�}�������g�����"��F����cq	����r�PD?�vQ������_[��������
�R�x����o����U8v�Y�����;N:���G��Zy�\]���|��7���9c4����F������]�w��j�����>.|x���t�,y�0�8�O�R��H������jc/sa*�_�����#��p����:���/�������G�?Q�������\�!��q�����_��|^};t	�"��A�/��K>W��y�i7u����K���t��f �
0B�5h�
�r4�I���{u��cx���m6s�l�v����on����{����pJ�s��rO�_�|�=����\��E6u���P�o��W���"�>��s�'^�1}N��������b'��[UN��E��X�G����`H` ��x����2���%�UKQ�\s�UT���"�?���;�uL�Cc
����G�$��+l�4���x_�|����O�u��u�Y^�uK7�k����8Y�
%w�����	����s�[��!�W�$�7k��F�Vp�����;��Gpz�]����6���0�O>�Q���ROe����D����U�b�/w<�y�c�BR%9�;��Q�`��
�owH��m�:KP������k��^Kp	��
?b_�,����%0X��uy�&���H��~�{�1��c���i�����������k��N��r;�C/U�Oc����)�������+X)��s�^f�F��5o�t���S[?��w�s������������F)�ka�R�cx���e�
5>��W������95X�^v�uad�~k_�&�kC�.�?�F�?��Vp}O�~�;�q>����X'����>6+��f���0R�(����i2�?��p?�����v��������d��������x'���������K��,��~��\��.�m���6���Z)!x�p3��zNXI��&��3�k`Dk������/��\O���p���8d�
D��O���������&0]����#c|���q��7����|�Y�pYc#�>���q<�<f���}�<!�Pr�6p�����n�-p|��
�~�Fk���e�;�l���~i��W��j�6���WL�	�6n,N��K�<�����=Wq���T}9�{G��21�F��V�KB�ea=SJI�?���-�K��m���������e7��)I�m��1Y��a���dS����!��g�`��~m�~��o�PR(v	n}���������&���I����''��;��.���&��
��x��g�1�����W�p����������.�?����m������T�J������fZk��T*�7�&.�,�]���Gf�CAq����2�i��o8�W������dS�>��p����<g�q�x�}�p���������(q��.��?�+C=JE�[��W�!
!��<5�q���O����� �?y]�Q��4m�J	�!l��5���'����l��+���CZ����zL��Kp��C�<��d3_�|�S)
p?g;����2���p���=���f���I����:p��z����������&
�]�_����d.j�NQ_h.�a�P����&����O��i�\k�;�`�]����;�i���b�$��	O�qK)���/���X�	�}�]����0�{�R���E�������8AF����34�!�p	����XBH����\y�qw�0�b�����q_�=�I
�O}06�3A��U����g6~��O�3���3���p��4��xP��p���7?�1��]�V�;p���������)?�6�|���w{o�Nr���Q�!�"�B�� ���8Y�A�������a����<�r�5n���qBn_�s��>���0�
����������o��X.�A��/J����2���7��|?�������Y���)�kp�������8}K�>p�
�D
O����j���7y��r�'�����Y�;�������k�"��������Y&?{���������n��)��^�2�+N��8�8��������'�#�9nu���v��FIW�a���1�s����~��~�����*���Y��W������_~�M�6t��'(3����f�r;����;����$�?�1?v%����\us��
����>�~�����G�a�wr�K�al}5H����0���
��X��/����H��,���/�!:���^��������H2bX����V�t'
�����?������E����	�1#e�8~����PrOBG��,=4i����5�j�������������))��a9|�@�����}6Y�5��42��a�U�1�m�����{��]��h�`���WZ������p�NU�����l��~���_���q��iSGo�"{�2�1Xm�]~�\��1-+���cmi�I�S����Icw����������w�7�-[���#u��X ���!x�"��7�}+�36~����k\��W�*�>m���9kV2���S�} �4�s�Fb��K�����IYv��wj��9lo���++Jn���t3g�������XO-��1(��p��%���>c>�<p��X�8Y���o} .�C8����~�')SRgX�O�^��j��-V�*{2c�5��w��Y�.��A����|���/I�/���	�������`�UVk��K����1�"����x~��!�����G�j�*|XD������\���=Dw��I?6{�����4Q��H�am�����x�����X6������8�H���zz�n�H1�����3��,��W8-/�?���@�����?q��Q�����8�_J��!�?����ra0���a�q���o������M���W�;�0Q�������"�?q������Kp����L*AL����'����/�;�5���#J�^��Ii��t�$z�;�I��]��w�/��(X���b($No��_a0�
��lh(��i��tK�m����lo�H�b�m���/@IDAT?��;R�|26��8mz��k$.US��}����JN"�n��p������)�^'����$3X���K8q����T�f��/�������*U����M�{�Q(��4
��+��Rm����'6��ZD�o��rg5��8j��D����[����-z��Q��4�=��?4����O�>�����c�;]o8f�������O�z����%p,����_��x���(lm�8~�<>I�g��e���w�n�����O����i������~�������

�#aP�
��0X������.�i�a�=��i>N8�d�uOg�p����p:Q�������g�)D�c��;����^���^��o'�X�
>R�z�D���?��j=�~S|t���[`N�$�����0|���{���O�5OX����������������O�S�����]���t�XrP)�F>p���t5��m�����_���������}��O����Et�Q�4�����0k��v#��p"���>���t�pr{\8���G��u��u
�j4)�����q��7�GJ���1���%cd�D��O/�{���p2�����<\-AY��;��Qp�����Bj }�b��C��*����[����������?)��}�]�����=OS[=e!,���m����������r��6��?���7\�I���,<�<t��)��q�.=�T7~��X�����%66M�oHI�?��}c_6X����|�%%���+��4O~j3�P������u�	W������G��J����$c2E�/�pRi�<m���P�R��������(�GW�|�byf�
���i3�n^��\#��l/'�{����=x�������P�����;h��4+�q�������v�!{	,W�Jz��4}z:6�t�c���C�Z�9��*�{����y����,X��2�#�0�gy�9L.E�{Y1�������(�������/�����uH�����?���_+���n�a�$����7|�b:>��/j����?)�����e�u���Ww����o����5:wW�=:��;����%_0��S�����<����3EU%/��o��
����&CE���b��ye��Xj�y�~��$��0B�w<5�{��4i
����l7'�xw)O_Z-�KH��t�}F�m�F�:�0$0��_����x����G��/�fH���<��{�p�o�����������<E�p��1r:��q��~pk���=�!��
������������%9]�S�t{��>h��a�����'�^�+uUR
�����_�_;�/O&N���F�����mm�{�>UT��z����=��|`���������{o���zS��^_��������\�[�d�=t���0(o|�����N������
{
��5k#/�����������������/4���5?�H��y���48n�������L�P�������{~��B��I��p���E���6����}4\��K>h��~��~�c��r2;!��/�A��"<�2�����D�8�&��
�����U;������<�G�1��8�u�
�y����T��$kw�����{i�n[B������
����xP$���R�s�J���u��~:|8�������O���������{��*��d�ATi��_r���F"���ur�����9�Ak�������i�	���om��q�2n >9n��C�^.�Y��4?_G�X~0����)A�j84������)t�;O��D^���//����F��{�)C����-e�5Nf{�hx���������5�+�8]|
O�#<��1�W�!�u,�h~���]��v��};��
��t���G�<�}����&9���>k�|��������?��W�������o��+c�E��H�������s��e���0�)�W���'���y�~D��]������r<����:PTW�l��?�)���������OO�uj*�Y�������_]�^K@����<����x|u�5����S���������n��a��I�o����+�u�H�7�Y�������(�!�����n���'$�2��7���=�g�����r���}�}x�x�T��j�3�������mZqJ��xf���e��a��}�h�!����z��I��}�����rKUj���_�|Z���*�E��r�c�T�6q��<6�U�7�a�\���h�?���x�_��J<��?����T��������_���d�&rc0�U�����'��p]X�h�Y���Eu����O�?Q�pu��Jk���'u	�/��{�wY�Ea���K������v
J��n�����,��md����R�l�(��v�i��M����`���Y*�4|�xV:�l�����S����3�d��a��L1zf���`�h�A��[5��dLxrS�4@��������<����9��[���w+���uE_����*��]T�����pb�;���q�#c�x�n];�l���:U�{�V��������t���W=}���'���{q��wW7��}q�(�n����O�������t'z�|���6��|i�i�"��\����p�����n]�����p�=���K8x2��Po������������������y_��n�y����3�A�������z2:�SWcq�����?I����!?�P6�������2~�(���jhSt?�������J���?j~��/����1����?|\���\���?wZ�����Z���G������X�>2�x<�J�'���o��o��Y���<�a��y���B�����K�;X�������C�Q����GG;���p�kw�za���u�h�Z�qO�W*|!��B>�1����C~�����s��������!��8��0����hxz�����=��q��aZ��6L�vV�m���_������[���}��I�OX�m|Y����65Y�C�[�4���~a}���r����������N���d�M��o�~������_��G�'�����/�^������.?��C�&���:K����i�i��8���1]�����x�V��M�����n��?[fiz\�]c_�+�<B�D�/��?������E�����OZ�y����0]����z�&���������4C�o|Y�?�K��Q�?�g�/�<�oga]�?Q�D�c+Cc�>��_Ga}���r�������v��'����o��5��1�������1����b_/)N��H�xM��|��OBz�� ��"����?�TYB_�����rX��t�AY�t��a<���Ar
�
\<B�l��B��~��A��_��"�_���d�<�8��d`Y�a��U����1��q����49�]4����w��lz�����&�������������K�~�w�\���.}������������%��}6Y������G��n���|X8����������}p�q;*]�?����a��_������9������<����U���j�������_�Z��P����[���]����j�����_�(��s7�3�)�������j��)��_����y(������9C^�o���y���W�R�����:'Lg���p���(Q���������>��0]]�P��������'���tG�.�9a:�C����j�c{���0C���`���=p*�����_7�Wf����Yt�H5�_�L%!�b�C��((�:kK�j��Qx�Oj���?��`+0�ae�H�!�F� ���a�,��S����j
Nu��J�[{�k�i9������f�B
��,>����g��,f����J��a�������D���.�'����#���'l11f�[��������3�7��~��q:|���L�������k�S�Sx������@�Xn
��������N���MH'?�>�K�~���1�S�������0w���$��?^�������-�O����_[�
p�@���U����p�5k*hO�����/���%1�������ee6�7���W��}�	_��+����*Rb4���6Z�}�/i�o�mw1N�Z8v�m�������U��R�G���J��u��z�/���s���^���#��7�oj������rp�V�	���1��6%����}����������8~�gy�_Y�q����K?��O��'-[,��K��'�/�'��(q�E���j����s �����{��r��?�V,����p+�0��|��/��7
�l*�����
��5��v�Z�+��Pr��	����i����xx�pY&dZ E<��d5�
8Mi��������2��%����Q�8z�M��[l����d�l��|���pr�3#�d����d����^K������E������1+"}���Es���z���������}+�BX����|=��L�=���.9`���q�����f�~��r�������1��*�c�?�����pg�o�A�oq�vV�p�_���Fb�����m|�8_�o����5���.�����[���������������=�l*_�<�I���d�_t�=�~��#��?���/�q����|(���=�?���
�����+�#`�~�K�G���_������/�����xw�p�[?�������i�_]��%-�K�����g5?���^��o��;m�>@Y�F������'$�4��=e�����]r 
������[?IQ��K���g�Ry�X��_��l��[��7����=|��(�?��?��(�������YS��(�����W\�q����_�?��k������l*_�<�����D�������0����eS�z��tX�/�_^.L~�8�+�*���3�����������N;@�*}V[�����"	�v��
�W?������j�`RB�ys�:]��hk�(�_�(t
��WX��6SW��&M�|�&���i��-]r��]��~�m��%dU��?���s���]������7[n�,oqyYf���~�6Z��uk��Y�������8�W��|l|�%������k�������L��|�����}��%y������o<�W�}��}�#815�%��GW��j�������h8�|�������rC�+��q@Bi�������X*���u3����tt]^����G�=(�K~6�?�x�2[����s���Uw+��`�H
�����|�����W����b��.��M�#!�<os�dQ�:������3�ocy�C-�K������v�U���F�1�����{�J���f��������[������q���rZ�+���]�O�kc�2�[�rKkl�a-|lp��H��&��Hl\u3~����Z���n���o+�����_~��1����>]�������[�s{��'��)3��%
a-,��\�6���@�������0�Z��-f��5��W��|l|�%Q�k���r�����*q�����Pl�����������k���/��k����G��/%�<���������W�F���#�:����K�`]�5��8h����j���y�F�{M��A�����=�=����-/
�������E��,Eh�������Cs�m:�3ZJX~�eZ����.��ag��)\���
WZ�ul������)3g��'�E�d7c�l��6���/�~y��O�"H��������,��2�G��i&�?e�O(������k��G������9���>v?�h�����)�J"��N06����o��Ir���_�����v��Z�me�2�Gb�-���A���h9~kJI�������|���F��0�M�=�=��G�?uN�����.�wZ{
������(�T���M���Kk
^���~��zRl�g&��P(�g�sL
Qf3��������6
��[�B�O�2	�O{�I/��o�n�mE��W�!�S�����W�����x�������?��5�������>?���@�����7����.������%�"}}P��.��������/��R�������-������������?��G|�J���D|����|�"��%�L�B��3�G`o���������u�;9�l����e'e$����DSK�=�8,��
�|��Y����9Bi���io�`����.�CI���1�Z�����x
�����6��F�5����(��j��zu_�m��|�J[���y�z2(/]��}�:�K������YLe�	���X���X�x�z��o
�� 2������������m��|������=w��#��.����y��s���-��J������xQZ�!�&���u����������_�"��K���2����k�/����z����/�^l�xE���"�ey����|k�m���tey�?������
�T~���0m�o�����_V^LF<�����"��<���u���6�?/]Y����d�s(�?��,�_ca���`��/�u� 5'������7r4h��H,H��b�����I*4e�OPVx�3���/7.N�	�PK"�00k��W�����J3��LJ�pA�_�YF_`�?�R���!=_��GA�O�(?��`���*A��XG�+���(���^�������U����s�������+"�_j��`k��^�X������M�����Q�Z��iQ�D�C���'����Q����U��%�?�~�yc�K�TN�~U�����W�$�?~�dSq���O����G���{�H�M�4�?��m��K~�N�������a��qy����W-����M�'���K�-��h�t�:�5�v���������(eK��\I�&�`A��K���Ki$u����=�G�M�l��
�j@?������&���|��V�����"�Jm�F>�o�
��5���XY>�����L�VuuE�������J����-_�������H?���D�lUWW_I�O>�o�
��5���XY>�����L�VuuE�������J����-_�������H?���D�lUWW_I�O>�o�
��5���XY>�����L�VuuE�������J����-_�������H?���D�lUWW_I�O>�o�
��5���XY>�����L�VuuE�������J����-_�������H?���D�lUWW_I�O>�o�
��5���XY>�����L�VuuE�������J����-_���������>�[`Tz�8cuN���d��'��!h�s��4�&@&4[[��8��yBQX�4[�/�����?���X�DijV����!�lR�xQ��,��FZf�RA�F��`A���W[j���gu�4�Y��(��x#}��c]?��:����u��8i9O3����x��!���7���������8i9�7������1C��r�(g���7�Z��,��<�(��3�Q��y�����Xji�����x��y^�3D�+��r&�k|c��-�BZ�����ya<c����7���������8i9�7������1C��r�(g���7�Z��,��<�(��3�Q��y�����Xji�����x��y^�3D�+��r&�k|c��-�BZ�����ya<c����7���������8i9�7������1C��r�(g���7�Z��,��<�(��3��;��;aM�h��Y��DV"K���TJ�*`��V����V	�������p	LSqN���<�P�$z�3qHW��v�]����W��O�6��T@�G��?�)c
Y���X�M�0�h������(q�*��dV����Xfa�A&UQ�D��O�?�E�����E0��O�?Q�D�� =Q�[L�X\� �Q�D��O�?�E�����E0��O�?Q�D�� =Q�[L�X\� �Q�D��O�?�E�����E0�[7�'g�&Q���fhN��&lP�j����5
[2�!m�c���	NFV���C��i%FpM�"�IZ�$2�i%KKeU����L����W�'�3x�FY��H_����%��H�����E�����-eJ^_�
���QvD���D.�����4�������'�/�]y���q+�O-��7�_�����H~�D�C�+#/:�����Q�,�<E��+��������q��<�������/+�f��Ea����s-��J���[yy�U�O��Q�zM������o�`m�
s���Z�
�l��4���	��I�/S�sLI��Z����	��H�Y��,�4|-S���	}�X���Ygii�?i��3kX(I�:�-%���ZZ>��m��l�pF���,r����zTX����|�A��d�Z���%[�{��"�UVL�Lr,J��,,����Q���Y������
[+Q��Z1}c+���
R��%����x��e.����x�O%��Ms*)y�Q��K}�xj<�5���g�1^E�S����kD�����i��f��l�����l-sQ�o�WQ���3y�\\��p
���%�����X������7����t���i.�?�G��Tf��l�d�d,[�\\��U\��L�4���#\C*3aI6m2e2��e.�?���*�?]q&o�[��_���.q*���m\���
���E��w�`FZ�E��99&.��.������U���������A�px���=Z�����[{����"����h�e�����`L�X��S���-J#}o�.�{�.��D #���q�h���+�hM$�&���8�Z��UQ�$�o��" Ek���X�������S������p}h:����������(�k���WR�$�?q���O�[�+������'��"][TV$K�������7\[�������
e�H���R�,�����
�Vv}����	k;EM�w��/r�.E�1PC���_�Kp`����#��iY�T%���km���Q�*`�~�E�6�c���ce��P�N(�Vk:��@����g�����H_���;V���E�t���\k�^����~p�~4����
@8�q��K�����oz�b�SB��O�
�������S�/��Z�C~F���������(��w-��7�����`�3��F�kR>e9�����q��P���������'�?��o^��2����#>�
�'
{��r��R��8\O��#>������?~����`��MOE'�8��Vg�Z��?A����>I�)[+S�I��._^�	k�};a�k�l>�I|2���Lp�}a�@I�b��Q�}?�J����u^0�����f��rm��D�$Ur���=��X��t�M5r��z�['���}/��}1y
R�Y$�	�K��vm\�������Z ?{�c��w�*r �vm]�U�������(�����}��]s������`���B��C�~�B��l�?AG�0�U����5������_�O����OD��L��rji�P������Q�+�|X�?>������?d�����p�������UB���V�������5�5H(/*#���iV��r0����P�4������7�_������7�/(�<��Cm���	��:s�b������D5�2
P�����y&�M��8��k@'p��[}�Z��������!�0�!����:��1��C8������^������3����B��!���n!�PX��<��=tX�&q��<]S���7s��|��U��&Nv�.��Bg�i�S����6�?f����_8�vV����=�i��?h�i� �-��o7���������'q1����]��6�����=�2-i��w�A�mk\���7a�4���sk��	v}������k*J�x��������x#����h�C��_W������Z���_W��Xi�q���X��Qy:�������7�?�n�~���,�?q��d�<�rT���o�������&��m��q���o�M�$�Hy:>���%��������������l�C�#��>���Z�%���ePV��u�e3!D9�*Fs��6Y�E'��P����K������p��|��>�%���Z��f�����-7t�&��w9�|���a����������z�[���[�1�OO�a��n����-�����y1X����������=�:LNs�_3����7H)�lL����>���cM�kOS��&�W)/�����
��^2�:�aO���x��������������~��sUn��/��h���%���G�X9y7n>8�B��o�Ig"��������PRS��	��]Z���@�?Q�����pN�����/�'�;2�r�|�������e�1������"}���#�?����P.t��������R�?��s�5-�c����/_Zj������?&G!��d*#Y)�%��k|��C�LG������1�S���r����Q�Tr2�4��P����/��������L��z"�?�c���zp��H�(f)�	a���V�
�u���IYblv0�I`�aI�9�cCRd5�=}+�F���O!Q*}��LyXb�:-���f��L�g�$�q2k�Zz����V�w�����e�4�_ha,���$���U"�����c�v�p?=��
����+���i����~���q��\��-�g0�^���n���2(?&f^���8����������������4{B�|0��s�K����aO����	m����1��������
���r'����1VZL_�)��e��r�����_;��
y��(������X(+Q���)�����V��������Q�(�+���q�\7������N�d���2�\�?���J�?�������O�6��������Y�3�R��:�e��J�5�w��������k#�?q�����~w	�����m���`��q-]�WNX�C�D�K������:ry�cJl�
��/5(M�"mBiZ
��-i�6��\������e�|I��n�cr���Z��b�|�:HVJ�gq���5����a�f���������*�����:A����gO?���Q]]��_w�`��}��V���#�T��[���y���_�M+7�� %�_���9�$�d��s��.�~i��%xo�;j?�r���`�.���2S3�E4L��������D��x���W\�uR��(�@%��<������������a�N6"�?r��5�O%Q	�N�����GT���W�#������U�;�W�I.U���r�:��N�W��Q���Qz*���V'c��i�J���E���W�����N�TWW=o����'������V�����w\�������K��� �8�N��h�X�����>�f@U�:��m�&�����	�f�-7=����I�[,�������9{������\��\���O{��S���6���4��Q����������@���n�������MV��A�C@?�mhw��=:����x��i�8���;����*�m5Xw�^���7�d��h1m�q��`���|�]1��/��~�k��&�F�����/��{���p��j������5���k���?�{7F�O�������`���^z�H��������HQQT���E��Qcb��E��3Q�R�����b��`CEQ������ss�{��F�O��&�����������<��tY������,����w�`�����h�A�U�z�c6�{����9j�r�9���[4k�shLuk���/r����:���K�7lF��-�Z��iUP�f��v�)}�<�����J��^=��]���3�p.��������I�E�d��lN<�:�;�!�]���b��F}�[k�����%7O����G��Jk�.�w*�|$8�a=��W\9�?��2�(u��u^:'@���?��D�#�(a���_�O�����H��D|��I�)�����N����K1]S*k�n���6���������}���ln�����?��_g2jb?���_�]�O�}���������@?�[U�*���c���?��d�����=�7���

���G��eb���
d�r6����_[�O��;��<�s���m6�����h�������}{����T�&���?B/X����x
���������p?q<D�l�%�uGB��A��J�e���i.hx�n;����^M���HZ�Am8-9T��P���5tj���������hP�����.%�_�?��o��$]w��Ut���i�r�_�V-:e�]�����J��	�{`T�V���W���/�N�V��� �e�V�]����-�0�<�UZ�s�I&���Z�8y
}���8�zz%M�$h����v3�����'B�N1����u�w[��(����K��>����B�����J��n]:�g��C������X^k��������I+V��r���;t�k�Cw W�J�o�������kKPAm�����������G���~tq�^��~�	�
E���0#���_��w>D};mGg���`�������������nmz���T?���'�c!:����9�	���o�K|�4�>x�����[Rc���-[�����k�������>���;�e��Cs��������l��0O7��hc�������s���o�_��8`�y�C~����r��}�B]�
Z!7/W�G�xR����e����)�����h�HJ�h�'�0��ZP�'��z�����O���+�?������~D%��$�(���l]������X��+�������U?��v{R�Sh���ln�����_[�_����_]ml��uT%��$^IO�������������sY�;���� p���Ft�!�\�C��!3���NkD�8V�?�wF_����s�w����������n[n�p�C�����,(������`�2�"kW�G�����
����0�?�����v}��������1���p�k��o�G}	�����V�������C�o����>q�	I��<����=��g���O2��R0:�%���/L�r���G������9�7���g�II���9]���W���	����M���3�N1��q\���D�u��u�����0;���:p��[�\���a	�l&<7m���6r����
�x�n�����-�z��N�:�������������L���emS�������^R<����
�R!�������&|*�P�gvp��t;���b�W������`��#$;�_E1M��)���l����� ��"e}�)���h�@����^FR�>���#�?da��:Q�E�������B��r�e�����)����a������Zc�?�?�Z�u$�)�T�|�����?Y�Q;Q����8���z��R�#��8�^*e�����f�F�D�
����5���CK��@k��z������5�����+�K�c�����-�:�����R�)����$� ����M�1�v��mZ%qY6w�~�GAO�6���q�[�����q� �s���ci55�t����){��;���D?�9�����q+�o3j���������I��q�6��������0���u��=�w���&3������l�asj����[_x��c��
Q����m��a,���x'���~�v%#z���S�����UV'z��.{dU�������|�����I��d^�����7����	"�%��T]�;�������p�8�yp�]�+�X@�>8����_�]���1��Zl��.a�������JG�z��G�;�������	~F�.vGS��i:x����^�d*�w��i]����<����:�j����e�+���=��c��s�z�+�2/p����l����:�A:�>�����s��t)m����]�7j���(����wP�jU��F-8h��Zq�	y��K�q����w��z��g�X�.y�>5@�W�p��x]��G����e�����h�^��K>��;$��u+>������#�����r��%�����(���m�����c�Ko�M�J�[��m:��.`�?8,?�l]�TsO5����_i��(_��(7�E�+������u����^�4���e��:�u���������+���j~�����������r�,������j~��������/��wx?�a��p�����yH7�l�����X�O�v��J�<<[���{��%�?�?�?���;x����������+��!�����?�`->y�)�+���l]�j�����������,`-
�J�D�����i����?��8����v!�*������d�b���������t��[�z5�� �y'_\����~���	�;q;�����c~����\�`\)G���r�nL�X��pw�@�tn�`�����&���������+@O5���&���#�/<�'F�G���3yl�=��$����������G���m>�k�;�K��C��]�(n��������*c�p�7���g����R\a�C�'t�Y��y�k���^v������n+������?����[4�hpt�������1���R��^t��n4�]8�Iz���/y�A]��)��������2�����5_��=��������G���G�#���_��3|��'����7{(a'6z~�A��7�������m�������+�0~�s/�:������w����w<Ho��T6����9
V�vT�����0g>v}���O��p��������/����p���?69��rGBp�������W����C[��v]��2�z��;������}��p�!����V\a�g9�?�4_?�e���u=�1��<l�r>����h������J��o�o����m#��_�\�y����G����	���H���
���/+�|V~[�,��
�<���H����mV�Kyp�in���@��	V~[�,��
�<��H��?$`�7�/�������
���/+�|���"Y���y�{��H��o���_�w�z�f��d�������(������=&���������D:o����Eg�5�����8�qJ�&��{>�NE`:����?�����{��s��1��Xq9������\�+W��-��S����z���#@�s����F=�k�>q�ak��O���I ����������~��<���4��;�1I%����h���sP��z\q#��{����"<Uq����\p���A�j	XW�@*��)�w����@�c�y�L:y������=��F������W�ve'W��/9t���
CK4��I��'_�����)�����:*�)��/,��_��r��_�{$��s9��{������}�����8@������m'������9t���$��_���;�qg3�
�c�KI�
��������D�����Qp��� �����R��o8�O����c����������7�A�z�������5n��h����o���O��e����u�y/����P��/�Pl�	�O�������A�?M�"�?�A�%�e)��b]�>�>1��/���F�X�&hK�K��bY�%�h���\�a�4���M�B[
m'��������h���\�a�4�3�3�{	mA,&������B��d��Qh��2
e��O�[N������?|��!m���43�B�i��Ns��y,�P�����qC*jc�G[���
��f�3,K�7�b�E�&�%T'|kL�N�:��pcj&�������ziowb��hM��9�����	�"�XV���������5+	SU��p��y�'���Q�/���.�^qQD��w��>�(�Q���XI���p���3������u��L��c�@��<�����������]��q��%�(�O���.������D����sx�3�_������4���~k�a��������=X#�<�Hw�6������
�I�9��*����7?�c�=�X'�����U��k�dH=����C��� X������c�(������9��%|������s���U�>|��L>
>��B��~������nO)�[����;�U��	�x���$������k��Z���h���Q������w��(�"n���wo����t������w�\v�~����'�,�/Y�t�.�]���/]AC�(��x�2^SB*������,�:�D��������J��np�SJr��[�=��2Z���~����I��|�A
7�}�}J�r��	�G����7=��H�<���;��f��0G(x���K����K�J3�WX�n���/�_�@IDAT!�ByZ$;���
���T7���M�`>��h��(<�W��&�"�����������-����
���T7�3�3��u���E���_a�����fff��B{��v�+�S�R��������ShO����C|�yjR*��������:|
�	�"�Qx��0OMJEp�?�?�?X�O�=���tu8P�b�s8�Hp-\������(M���p�4p+��>��A|�oUi�������oA������xw�������-!������m���,�a=��O�%��������������s7F*��N�G�����#��C;���������zRt|����	�A������I��!���Hc�|�������5f��r�a���du�B/��cw�g�����#�+�$�5���Ei�oN�j����Qt�i����/���-��0"��6�n��t������t���1g����Zd�.��*	X�N�����d|�_��A����m}�h���&?9(�? �����
�#����|�3�B�#�����?��q�����-����������c�?���:�X�����x76��A�
�_�.��@������.���R������-�)I�Hj�q�����=��>�u��}�������������<���L�?��5����������������-�_����c�%�?�?�?��V��mHV3�)N6���<�/u�?�?�?�?�b���?���I�-����<���_�������j�$�k������k�j��QY�)���[��������H!�9&�:	H#X�#�Q�b��h�p��e��j�����M��@�A�
��6��.=|��]A'Nz�.�~�J��������`4!`�^���	�����#mu}���O�����O2<;����^��6[�>Xc�,�n:���Hl���_����C����w�.��3gqYG+�@��/�����c��z-Z�<���W|��&��Wh
H���}KXr;��k�_<�iz��6���o���q��h��z^y����g$���O�W�}�i����\3�t2;��d���w)}'���i�x�8����=����8�y����!S����N��b�:&��?��n[lJ9r����q@�q��&�0��N��N���a��?j����_�JU�p�II��h�knu��}_/�}�iGHd?����8����'�2U���U����K�vh���vl��
9<9��3c
^B���M�=����/@�������)�/����������w����'�z��/���J��a������-�i���T*f�W�+^F(������1�+�@|F�!B?
�zZ[B)�T<,�[,+����_������/0����������x
���_���g�����X��Lh!
	�����}�B��B���%��3�k�W���Lh!
�?�ib��P/�Pn1��A������n���]G�#`����~?���s�^���Jp����+��][W����E8Z�i��t���:Y����i��|!F����w��9!Gg���x����PaW����hQUO%��6X�>=p��8����eO��'}���0��[��;�p�wX#��:��a]A���]��B�q���W�u�����k�G��98^{mIg�3�d������zP���P>�n���Szu*�y�w�C:�w����E�n���v�A�i3����ys��� sJ�������o�cV�����}���r�I����O����i
�����u+�K�Z�����Cz�]�x���9]0�qG<�?���A}w�=~,��)��R��2�p��e3n+���Q���)_���~��!��&}o-}��O�����S���3��n���o����c\B�J�
�u���ySU�F�����+\"������1S������}��6�wX����G5���7}I�Z�������B
��@�$~:���U=��M�^J*��
�h�$N���[�5�l�?�����8������0�+���[�&t���U[��?�������������[TKT/����5���1�S�3�����K'��g��G�b���������P/a���������������H"�����������R���Z�*4`��tt���U��a7����pu�!�{�v��!/���9��?;o�u�r3��*��i�Z�F��-��`���?1N~�G���&���<����Q���j�/L��^��+��3������|BU�rq��u}Qr�3vL�w�c���/SZ��D�k���|��~����%�4�&����=8 ���r�������qY�������}8x�q��4���oN�n�8/��W!J+���8`����������=G��,aXU�Z�r@{`��&�����7sp�o�tv�n�d��u�������SZh���!=��l���8�w������EB?
x&k�f&�!nJ4iVz��JX_yc�"}C�=�����'�9��f�]�E�Q��@?�KG:n��n�o�/�>��������zc���AnV.,��\��|������~2�v�f8_�&��6��ow:��aG��W<�,=���\�Z�������v��������U���������?0����Ww�����Q����!�]>@�G���#��~�;���b��������p�������u��:H�_���?V�<%)��E�L����D���������:�k��<���������������o���l�����%S{��P��&�gq����c��O���D����0[m�}��������}��?���<������]m��(��_hG���?���r�`����Gu�;�9�k
��%�W���p��*m�GI7���<�6�is�����J���T�VM���>�r��Ri��r�]��6j�����x�����J�`�)vJ"ms��(���@�P�s�o�|L
38��a�%vXK����7�8u�8Z��O����Kh��uh�����{����(*Xn�q���W�
FU�>;nK������l�J���w��i������%�9\;������?��1��8��������;�Y�Zq��g��v�G�7�_��2�/9�|��^���W�\�!�C���(^��>������vh�w;��\��������F�hl���1������y[B�;��a9�i��E4��I�yto��jn�������a�%���awZ�b�����h����>��[�N��!����gSynT���/�H��^��d���GR�:e2�����wFK*1�i	�b��W<��i����>
�8��x�t����0���;;�>����0��>���,�I,�*t7�oX���������|K��q�=�����������7���l����8Z��/�!;���������������<�(���"�����g�W���{��t-�<�?�?��N�Gez�������`������Td3����8�`erS�"u�?�?���.�\����K?�An�)��1�c���My>Fa�g����V3�3�c��Q��l�����1*����8�E�fff�]h�2;�k[�~�������#��&��>���>:9���9���i����_E~	�;���/f��]�h�%�,�uj��S���������9��sp�4��0�vVt$�L�m2m�B% )�aZ�p���������a�6P�|�<z�w|�S�?<��n���;Z�](��A9��4�����������Y�\���U��	��XP'Z�r%����	�LK�m����e�O��G�s�����7��%�Y���?<�$�W5�U���M����w�/}:�.�������w$��;�}
y�e�(�AA�/Z������\F+6F����Wj�=1	;����]��������:�X�D�1�.z�)��w=k�*������?�D�x���������#N����.�6�|;j�m�)���6�n�u�?h\2N�����/N��^L?��c7=������9����.�?�o���C��#��'|l)N�]�R�t���R�p�O��6�o�7�S�����^�y��}���}?m��������1���Ar����#a{X�x����a�������ZFho&�����O��{|�<���a�������Z���>�����=,�T<�����������O-#�7{�v��'\�<>J��S��������O-Croa��Q��C*��i{�f�g�g��������x;���s%���)F����/'`�v�wX�������
1����u�tcj��j7����%�h��������3�}w?2B��9���Rt;Y7���8x���N���v��I
�3���i����<�Kvd'� �>�;i�4k"����o�w�������;;1����'}��O_��=�����u9��L-i�����;�������6#��wZ����;p�3�T��Qr$�=��������>�9�%���������K����1C��m6nN]���]�M��\g���C��Q�w�n��|��O�\xW����c�������������^!7���)���w�����*U8��u5e�P�f�:���y��*Gk���i�������b���\����s���X�����o�vf�>�	��{�z��O���[cn}�������^����3�8�q*�@%-;�Z��p������,���-b��e|��d�c�:�o\ZJ��wF��>����m�����l�r��0��>���Wx��ub�Ba1��?�8�����������w�OF$���@�f��
���R���A��:�bn�5�z�H �m�r�����|(������e�����)�C��fff�"��B��+��\X6�3�3�3���wd�B���xa=�9a�����?�B_��r�s�re�B������1�c��2��m}NX�������e�?�~��'��������r�D����9X����?��yt�z5B�ZCb�@�4$�������GN~pO>�yw4�)#����-?0@��A9��C.����A���u1�S�g�-]�oM�H���p�K��^=��i#���p1����wS/��c	9�����Z���
���������xlI��yv��R�� G*�� ����a=`�=�{�w�'�*�u��-���J|�t��q#��A-���?c7���r�v�	��������� ���z������[��&���A�x����i�HVR��k�}��O;��P�)D���Of~��b�g��������.��cK��~����a�~� Z�����E[p��k&�����+?��������k_����F�LU'UV?���;S�J��&����?�K�;�S�����O�x����s�?�?�?]��N4�v�mIa�������	��3Y��Ck����1�#�v���oK
S�H����N�Fx��������?����k��xD���{?�}��9������N�Fx������_[A��C�:o���"'��?��������7��t7P'k��@1!��C������7��'I��������N����M{�9��!-$|�5|:�|����
�N���ZU�x'���8�0��2���*����y������r����W(�H������G��h�|�������1BI:�0G��_�	zY�mGI�KM ��������T����%:��v��^�\�D�
������������f�	e��������6�Sm��?�����=���2U������#i�	������E��"-�P��g�l;�H&��������e����0������l;�HY>�����e�B�'�C�Q�S��G�u�,�?�?�?��~A�G���C����<���#e���1�c���O�/����(�9��G�u�,�?��������#���~1��v�Lwl�����<I_�~c�cG�b���������(M�JuxGk��ZS�j�hE��XS�&���|T3v����sh0�pv�tg���K�e��3C������{�.�Z����nn�)}���
�����t<�����n��y�T���D���&H�>Z�hZ��������y8�c�gq���������/\��h��U�����Iih�-K�C����s!mA�K�1�?���^��N��V��F����g�9���{���d�x���/]�^��7�����k�&��|�������������Z���J�ekI�D���m��/��m�g�r��������k����a���W���Oh���t���KFKY�i]s�iYr�?�?hByR=�-�w��-e�h]s�iYr�?�?hByR=�-�w��-e�h]s�iYr�_��?/���m���8b?�Q����-Ai�Rt�#���@���('\^
���N�����hq��/_����|�1C*8���0�)z��i�����L��r�2���qN���1]:�y �����R�C|9����1���S�IkHFx%|��suH����O�C�W������]��8����}�5a��1O�sMQb<*����X���<���B������f�9�X���p'���rr��
��u~��1�R�N��(�e�������W�M�BG����?M�C��N�����_��b��WS�"[7�wr�d�J*(��}^X6�'^21�k�������O[�0����_'�H&^T�d�o���e]ul�QI���v��������'�H&*�07�����Vg�G%a�'�)��Ie���N.�LRI����
��u~��7��������Avo��w��^imCp��`3:���kt���1�����K��$b�w�v����R�FXoO�I�<�M������zc������
�0.*���$�^v#�����t��'�r�R�7��AW=:��������a�����
�t8R������%d�����&�{���),�]�\���[���v�t�d(:� D����t�?�Nz(��aY�%����R����!��������z4��cD�xf��#�[��/]F��z���O�_,���C��mI����Mv�����C�9��m������P��r���h���_�D������?�������6a���H��Eu�c���}���2�*/�U���^��8&���O�>c�1���C������?�����u�c�����������4���O������H��Em���J���j��c���q���R����[W,;[�UG�����i)kca=,+��*[�?�]�N�+X��KT�zu���5��U��dnI��g����<��v�J3\0���s ���e��[���_�:-X����}��f��e+V���������u�^>������P�P$���+�W��O�|�I:���6��
8���.�/��uG�/[�"��f�e����u����}!Z��;<�+f����O���pw��/���e��#������������H�������	���B��`���/�{<��>J_�$9��������=�p<��u�+����~���uj%P�~D�M�I�����W��YO�R�G-��A)mO������������������������HQ����?(HW�+�VyC>��=�hQ�J��LuE�@���^�.�P������Oe�l����+�VyC>�����_!��DA�2�U�4���}������Q�j�W����5T>�������j"�}��#��R���w}����������������?���|������_#��}���J$�7����;|�~_���}A+��3^[�>��������(��Z���:lCl[��Hw=�;`��y����m��7�n��;M����67.����)vR�����KS���ag���b����C�RnSH[1����0�
si��z���w�k_4e����P�^A�����?��v�Y6����),������V���_DO�d�"|���Z_�����?�!��6�4$}e�N5�Vy&�{y�������\���X�4G���%VY[W�y}���Ga�?�+k��r^�es�SXHC���)N6����l��
��Y[[~Q��������k}]��>
�������D�nU���_�OJ'��+m�����y}�������D�nU���_�OJ'��+m�����y}�������D�nU���_�OJ'��+m�����y}�������D�nU���_�OJ'��+m�����y}�������D�nU���_�OJ'��+m�����y}�������D�nU���_�OJ'��+m�����y}�������D�nU���_�OJ'��+m�����y}�������D�nU���_�OJ'��+m�����y}��<X����9B� YvvuKO�,z��S$x2�,=t����x`�C�t$���r:��������T�~�.y�2���:�Wbi?����i!�����U~0 �Q�)���iY�-(}���E��2�{=�L��6-k(]P�tM�^*3�H�����O��Z�<����k��e�2C�d�W.�L�T��e�cL�y��^*3�H�����O��Z�<����k��e�2C�d�W.�L�T��e�cL�y��^*3�H�����O��Z�<����k��e�2C�d�W.�L�T��e�cL�y��^*3�H�����O��Z�<����k��e�2C�d�W.�L�T��e�cL�y��^*3�H�����O��Z�<����k��e�2C�d�W.�L�T��e�cL�y���E���$q1�kRH���aeu������lv}�	hpXZ��&y�m��59"zXR4�LW?�����qH�'C�����5�b��Ws����@�n\��V���P�q�F��o�7�3�[����-�w4��Y]�?�����Y����-�w4��Y]�?�����Y����-�w4��Y]�?�����Y����-�w4��Y]�?�����Y����-�w4��Y]�?�����Y����-�w4��Y����d��������sQ;�E��c��:i�LJ�2��p�'���H@��\z�M���I���������x#��$�r/w
�������������s�C��\�o�E������1����b{2�����byyl�^^(�������K�6h*�'��s�����c��
%�r1�c���Ol�����9B���-��Z���e��JDr���?����x�(�'����}��2���%�����?���b��zX�����c��UiI���o&`��N��R/��Z^�(1���;�n�Ih8�M��Ud�tVX��JB4��0.�������	-�'�(�|������e�����p��oS\�_Pd4�|�Hs��l���E�d��L���+�bqjWf�*T��	!qYuJu,nE��Oe��2��S}���*���DgBH\V�R�[Q3�S�������T��f���mHt&��e�)���5�?�����O,N�Mjf*���DgBH\V�R�[Q3�S�������T��f���mHt&��e�)���5�?�����O,N�Mjf*���DgBH\V�R�[Q3�S�������T��f���mHt&��e�)���5�?�����O,N�Mjf*���DgB��+:�����
����*<u��E-�h���!���bPK1G�LkRE��b��+�LNF�@5Esy(�P	��[t�?
�g����CBee�"�_��U4W���e��$��7������g.f�B���y�<]�a�����
m+����5��H������R3�k���oh[�}���l���'����&�gK1��[l�	m+����5��H������R3�k���oh[�}���l����?�k�$9��P$viI�V���#��N���?���N�r��Q�9����#y&��l��������S����?{���*/���OG��* �����`�1�?�/�/������@�?K ����_��O_Z�o�Y�:��m�����v�V��b���?������pB}����|��I=���U�1�������������������
����~�p�������/�PS��*���<�'�������������p]��n���a��-%��|%k]��e�*����]08���Zv=��i�5���I��(Z��Pk�*�$w����O�\P�	�W�>ZF���H��u��)c��3��O���C�a��k�����_5�)I�C�L�B;+*C�fe�7�G���e��kP,��"��f�������?�-�����'���'���2�h�������������R|�����B�I�l�
u��9��k�������G ���}��t"[,?��+r��~D;��W���W�_�W���,!�k�������S�K[���)��$.-~,N99�.�������G�+����I�	-PXg��c���������2�&�?��u��?����ku���_�R�����������}og��m�����?��������\�"p[m�����_[C?	��������CR(����?����c�O��
}����G[l���W������e	X��rJ�*��&����;����N�KB��$<8�-*�u�6�S�R��,�B-��"��)�����[����y��Q�x*x�:2O%!���V~�U)���ZP.Y�~dB9���	&�
���6��B�:������{�L������Q�j�������=��%�J���'(�/v�2��Jb��L������}�����W���!�~QC2�9�O��{�0��o��=����)X��",�?��JF��5�?�?����P?*^����C���������������@E�TN��|T�B9��:iV�������=����_�d���C�(��?�f,+���Ds"/e��_����T��~���������J���;/���gx����f����q#�J�]��,]��U�T��~y�������JKh'\s�	(l�}Bh�����no���A)��F�m�/�QH �-mrOU�T(r�.����G����Z���=��k�F
��z����si����>3���2
�:������M�*�\���-^������������b����'�����:uh��6�N�mL;q��A}7���6��_��!�S���Cg�g�K~N�)�Be�xn��������-b��������m	�\7�����Kh���J&�AEg�K

y�k��R�4���:��@T��Z����������/�Q����������_��P�a9n7�3��T+�������?�m�{��U�*�;���\~���w�G��v[E6*�P���d�o���?�m������7��������1�c�G��}���s^�k�3�0U�x9�G�Gy��Q����3ul�!m��U��c�%����V�^C5^����O'�~?�k�����+��V�7Q+&�����B+���%�W�+���_���>����3A�EP����S��5����)h"X]pX����3���������%
����YC:�/(��gs���qO����S|��pJt�n���[����Pw#Iw��K����	���zR���}W7�d� ��)'?r��������HI����H$x��\|h/��������p9���`�����x2��y	������y��i�M�^��)�Y���w�}C���Ki�\�o�����+��7��_�b�����3=�)���W�-�_��Y��7N^nBw��Ut������z:����?��..`��eR5�!��s����i��/g�������x���P�zu��"i��et������{R����d�������f��,$���-�K,���K�i�"�����s�6t��{��q�H�D�o����d�!������C~[o��N�]��.�M$P�<,���������������������\����^y�������w���g�6�c�1����N_p���]�x*	/���������3��\�?�.�������x���R���M(��!���i��HGD�Dv�^*�e�f�	������	��AC���6V�lD{L�����W����-�����c�oeklem��BE�����+�qem&��n���g�LG�� ��|Lem"=������%v��O�}t>~e��6�?H���;�u�9�i�����������-;\����*��w��tD�tB�N)��@+td��t}��wi/�3�G��G��D�;lM�����0����w�����Q�kn���d��`�����y�'��D��[4l�+����$�s�1��wU&���E�<�����GS���������'����0�v��>��BY��F�e�x�EI���&D
�����$
����n����������+W:NJ�����3z�F����D
B�d,sx���>C���kr�n;Z�,�?��7h�s�L0��*�G�O��n����������0���������B������|��P��������_y#m�a��1���\���{����&u��
=���	�������	Uh�|B���z����e]���[A'���w!�������;]����]������_��+A.���?�<q��NJt��h��r�������~<^���	GP�$c2��aw����0P��v�C���e��G=��vo���7��$�������%���P�:��������wi������0��$L�����M����
�tU�u�������7���xU���]).�
����[��M����2Qo����c�OVOd�QM������0[l���G�����?�+ �&an������a�Y?!_�)��~UqU�/��������&�h�����@��;e1]��~�w9~>k5�W�v�t#�v�fC� 4�]�������q[jZ�um����%��5H�.��l�~J5v��^��<�~6/�����I�3�i�z��wI��&z��o�`�>��;����|���%r�3�^C��Lux�m��
�Q�:����^���~����z�=�x�]��j��w�V��D�5�5���oDA������+�M�+}����d7~������9T�Y��7t�y�������~�D�������U~��������������M�;����������K���M.=�;�7�I%N}��g���u������K�Nu�j��
i�vmd�<�5�u����1
�9�w��������VM:�����O���G[��K��W���f@������O�mx�4��O���C*��f2����g������Fr/��C@s�q}8���p���{�i
��1�B���h�_nJ�Wu4�����;��t��?���?�n6�_������	�����?�9�&N�B��8�$��a��o�Kb��I�P�mW���lm�6���+���}:����\����k�-��p��^�����������|A��Q���O{n���d��:��G��L�I{������:l������0�������{�{����ak�}_��as'�e+V���s�S���U�HMYyg����e����zl��S���%�Xp��)P$$O�S`���l�����e�e�3.�Q��HF�*%�#r${�"��S���l]����������������O<��Q[D^O��D���l]����[l�����[l���V$j���x%��7�z��k���t�\Ci��U�T#�����x
����M�L��=^������R����D^ObO�rRh���ln�����?�k�R�RR�.�k�:��r�e�.�4�\������������pp	���O:����.��j���g�-4����q�i��8:�
���G�^<�z�w�"����������G�0������u��N����J�z��841�S������C�'��<���q������ss��:�0��`��Is���w�;���i3��Q������8��#���clJ��3����[@}��������.���{��Z$`-;��h�%IK:V�gs��������r�����?H��������vl��N�m}�A������X����H8���?C���m�������?m�:�~��;i���Yc1��K4��It��/pY��!��-;�	�����:u�����j]�n9�p��eSU�g�~O���8���O%�����]
����	�y�Zc�'��*�s:������:���#����~�z'��L�zI9�u�H�W>��b=�)����]�����-m�?ph�?6���q�>�G%)]�b���Q�'���29� ��Y������R��������'|�)]���D�s�t����K�G�O��+
`�����2bMr?TP(�Cg
��,��&M&���`����PR9!��
�K��v����q����q����.Z��C���?:-�cT\���&����R�n�N��`A1�����Z�u��]-�^�.e�?�?�?Y�Q;Q����8���z��R�#��8�^*e�����f�F�D�
����5���CK��@k��z������5�����+�K�c�����-�:�����R6�k����9`����������9����O�u4�]*;��������U�:����"�4���x�}i�krq1��=���&.���v���/>c9�z�S/r	�<�^��;���l�=�m�@:v���|��{>��F��`�U���q������y��|�����/��9w�6�$�D/B��Vq�:q\1�
���
N���~�9���nH�'A[B���9`���M��V>����U+x��:��rgqpI�K�/\L��? �+m�Q������c$��~��]9|����i���/�M���Dg����	��`��y7y�K!�&�����������O�S|�����	�<�HW��{|�t�v������]�.s�p��``F��h$�q�;�����1�G����x1�<>z����w��k�����%t$;���SW������a|Z$���Y4������^w������?|��2�1�����W�}��[����#zG��9P{�N�K�V��i,�]���)����c���?�=xgr{��.`���<����
N�?��/������|�s�O%��;����G�A�4�����?�����B�Q���8p"��E�+��?5�����?o��R��B��l�)�j�����Z�
���_uk��AT��&N��f�}�����C�j�E���?(���4��V���M����DB�]nW���������j~��o��i���q^wM����K�-��1�c�G|�����~��0`y���u��\i�fff�������`yx��}5�T�Kffff�w������K?_W<�C�ye�?����Z|��SnW��������S�/�����,`-^y�8
|�
7`'\�{_�D#^�c��aJ����=��%����������
�]����n���8u�f\;l'�#�����xWV>`��w�~�kT���9�w���8���>�r i5���V��]�	�][oBW�;����[t�����3�.�Z�oy%R���������w����!nL�p���G���\����>�����I-i8���N�O��Mo����AwX3�����jT���=�EP������%]z�~|��j�y�M��EF�W���k�����G�����}'�s|7����]��Kt�i�P���cX�.{�9z��l���8�w �?�>�����DJ�
�d��aMt��������cH�Xvl�[
�k���#���U�T���#��;0���)�+;��){�J�t�H�yg�^W����P\�v-�)|��q���=�G�w���T�������.x��|��<��k��!Xz��8��l�3+
_�>g>� ����J��n�5�!�����?�����R\a�����a���e����w?r�<�?hC�� ������U%���_R�-7s2�G�>���vX;����_�
;��`�"�	����C'�0�*����j/GI��}�q�G
��9`q��!8�mE���
�<��Z>�_,�"Y�����5|��a%����M>���P���y�&�|�����+Ls���������?�?��F>���<�(L������|����M�.�����_V�2���"Y���y�{�;6����?���H����^f@IDAT
���/+�|���"Y���y�{��H��o�_��Y�-�����_V�6&X�mE���+L�,�"7�����r���`�D&�������n9�$>
y:vb�fUF*:!�m��y�z�w,kt><\��A�d�:u����#��{��v&�x�
a���2��G�d��������a�=;�9�z�}n�����#�;�1,7�d�����Uk7�������=
��N�{��W�r;T�	�]����T*��W�������7vX��^�����O��;�`���!���8��H���n��>��]A���(H������Fx��4u��9�)�����-�9�e�!��&'���`z$8��x�����;`����C����4��7]`;�������tf���|�����R��w�w�=�(�#����7���a����;�E��a����&?vx�������������F�c|y�f���mk��x	��9���`]8Q>d�m�\����#����^�G�o����^���g����u�_g�0�;2��b�� ��|����v[c,B��k�����_�{���l�G�o����	�W�I��6:H��?	��5����������`L:)#�+0}
v����?%���[h1�ZW������n����s�)q����F�z55�n����|O|w�<v��N��'�#�1�hv��3�[�_�wU�d��F
����v����G�L�'WUfhAR�i.�����~X�>1n9��c�(��l��L�D�����	����y,�P�����qC*�C�h���uG��r	�X�������qC*&�������>�5&O�B��y�15��}�����?�J{�+�1��ZSlh�~-��4��*��>��}5Wx��4C��=�d�!������������4D��������
�h�3�3��V�6���b�l*�����S3���_��5�k�����Vt<���T�tN����Q'�s'}{��#9h���5B���18|Y$�"p���"`� 	�9���;�����V[6X��n�)��������q��f���������m����:3L����?������,t�]�dL���C��Ui�7��q�@�=�w��
��GAc��*�i���~�Y�Ft��9@8��B�	�wX����ez��3��+�.h=��/�_���
\��p�<s�kG�O�<S@�7����_a�a�%]�G�����=�n���Fp�~u�C4��w���<.]N������T�4��G;|���a����#������?	~Mn�����������	�wX�\=~c������z��{�e�(�[Z���%�<=��~�����H��������W?�<C=���!Gkt�<���~B����x���7Nx��i�������xy������F�4'q���D���C������c��%G�������EcW���f|�7��hY��O1������
��=��$k��~������S{�FG����C���Y���u��I�&G���j�(�����]��P�?���:o���?�_{���~?���*�S/���P�W�^�k�
D���o���d�\��o�'V�5&�g@�tG�!��<5)�M�L�L�`>��h��(<�W��&�"�����������-����
���T7�3�3��u���E���_a�����fff��B{��v�+�S�R��������ShO����C|�yjR*��������:|
�	P��k�G��������Hp���1�Gp0&���<����%W[��\�x����@��]E�h�'��dT�/�����hJ�#ig�r �9�/���&/�������Y�0����>|��9|�n��}�%��{)��xw�N�6t���1��~�y�C�bZ����a��G>�����z$�HN���2���#V�~'zJ�i���8�\�%OwX����:�w�� � EPw��h�
���;�;qp���t��8����Lw�����1�j���=�X�����z8}���s�����O>�;%�DE�KS<p�wX��������T�m6jA7
��Mng/v���S�������F��ca,�J�]����`���.P�(����,����;�Q������r�1j�/���=:���vt��>�N>�������|'3R����s]9�����_������0�
w�A?�=�����5��gyG6F�c��s���	�����Q�=������d����^�������q���|�5���;�/�S������R��/;|_�������7�x�[Ri!_���]+��}�U����q��
��r��LM�����Hu�8��.��������o�g�'�[�:2�OQ�AO�������o��������l�U�P���^�g��n���?������r%^!�!����k���D�:Z��N������_[���X��9�t�Z�����+U^%���e+��Z����K��)4m�B��5��3&�j���w�V�����XB�l$\F@���0����P������O���k�����w��k��8������xp^��<�l���u��Si���S��w�������]�g���+;&K�M$�����w�}�G�#0��a��G������r�8"|4�A�����)�}�t�r���)�)��8(��W��t�!{;Y�X}/-��}>J���O�q��h�fM	wr#�cy��m��0��o��?L@�n�=��Ge�����4�D���
wX�;�=�nm7�C;nCO�	=��dGK��e�5�?����?�\�|����������5��������?���j�7���}�������P����
���`�	�F���'�9�A���_��^��t��pL��W����9���������S���J��s���(����-���z~�����Y��C\�{��`��9�������w��Hp��zo����������t�}��kX����~:`P>����:~�H:S�>]����T������{����WN�v8�x�����M��	&��6Z��������Sz��r3����-��������>#��	��_]ib��P/�Pn1��A�����?�]�fBQ�`��QO��z��r�q=J�������6Z�����z���(�K.�[��qP2�c����x���B&����>E�^r��b\��������D;������m�jrpQ��G>H�����x	��������J��_n������N��3���	����}���Cp�n������vh(e�a]�f�_@G���u��Vq�*kV�Js0}�u�M98���������n�Gz���
{�]���� ��#|G�p���`N:3ntB����;����N����y��b%�a:$��	>s�B:�����*U�����=���.H�������G�,t�����b)<�?<�-��=�J`��e�#�E,����L���eM��|�y'%3�pG4��c�Q��'�w���x����;jy�n?�u��o�Acq��#�_����g�G���|_3v��GBX�N4��%��;�y�u������[�Z5��wN���(@��4A�()e�-�;�G�(0�=`�]���AC������/�N�vMc���#�QN��)�� ����v��X~��0EwX���_~�;���R�����qa~8�_��kL��U��/�&o�6nAC���xrwj#�z���O`X�;�o`���[!ww3�����r'<�G���wX��u���<�AsP������x��f�VA�/�����E������@U9������i��e������U�L�`*��>����������y����#������N��������X��H���������3�'^�T���z�c�����������_[�;��*��a�����T���!�Ed������k�_�HA�D���?�{�?\�Z"��3`
����J���h�y�#�����.]�".��v-CqR���!������y��9�w�"`���rh�6�[� �2w46�l�]��a���q`�/�v�
�W��/q l%��Uk���}���5����9����9m����������|�,vF&)��ujQ������^~��Mx�g�ND��\�$�;���)�� �8n�u�z���E��l��p2�������/=l_w7�^���_��d���rM�$*��7����������~�z�����Y�z������������?�����{�J�%GR�0�w��~�������}�JEp�u��*����C[�����y��=�o����wX���q��;������&����;������k����=�)V�K�~I���p���8��A�����������O����%�W5�i��4����pW�����TZ�0���#��kyS2������
�y�Uv�9y���
��Z����9���@G�g��g����F�z5��;��{�~�aL���
���.s����q�86?��!~\��	E�����^nI2�������������VCr�:���C�M�&��f�Y_��!u���?��J��?������_����h�7�SC�����E����?�������o�[D_��������}�}���k��=dmE�]m=�Bl���W��?������/Xwc�@����8�#v�������y7+��M���)�	���y��[_~��N�vX�Nm�=>�a�Z���u����}�8��B���&n����;�����G��p�v8���:�{��]Jt��#x��R�R��<�8Smw������c���)	��qc0���K���F2^p�/"�AJwXO����-(��=X���9o!�qw��6)��n������~||��%K��Z9=��g^[9��aMA��S)�s��{Q�my��7��	��;���rw��R�Zx�|O�S/����=�m8h<��9�v;�_pe��1�X��co�����������OY,�!=��1�w�Y����K��n�jN�nb���Y��[�^�|:��`o�:<�gx�=�K�N�����������h���RQ�
:��a���{���\p����
��y�w�C���%����i��������?m6���u����#���6�����?���'3����D�K���@0�k�z���].U8������C���������E�l���0`����_����b>
v���w�t��\c^y�����Z��N^���S�?~�!5_�[���c���<,���/�����?������������@��T$�?�?�?Y�b���1jG�g����V3�3�3��u��"���������`fff���Td3f��tC5(��f�����_XGy*���?7����W�����<�n�����]��-���@���;0r�n�w@��ZO� �{���y7���z�����nc	X�O�:
���[�o�S��7�q�s�
�A%`�;�g��#o�����z$�O��5���!����m7�+�����]��<>�����w��x��l���_����������(8�'���;�j���w�s��,`*8:F���8��>�G��6�K���l��?}	X/!N2�����6�����\��wX���x�Y�a��+��A9L������!�V���������_��|��E���n|�9zN�3���c�5�
�m6h�?���G��G�?!�,	X����X����O8��D���
Xcl��{�)�)�m�4k�b���'h������K�������*�����h���9����S�:�������K����M����P������a_����'�G�p���������r�w������sP�����w��U��MB
�Rz�&R�;����Q�"�>{/���/�P�&y RU�D�^�JQZB$��v�3;�{fv����)��~�3�3�3�sff��{��m7���q���������a������6�	z������r,��U� ��a��~���[����Ha������7��
�����K'���������z��|O�0�����WQ�G����\����~�����7�������X����o�����e�Y7��|��E�A��(����n�{�����.�j7�-�������A�d����@�4���ze�}�b�V;Z�����������@�����t[�R��@�4��~��ClQ�����,���2���������������y���b4�j�l>��j���J4�?�<� 2j����������x���y�y�y�!2l�)N�E�H���?k�����
t��?y������A����<b��n�(^��ni��
k��H���������k\�ntW�����O��Y��������������3���~���w�
�����'?y��{��i� }�����M����;lM��&�iS�/�Z���x*�F��A�R�S���o���������+��e��������zw������V{m�nx����~7�����O�;&<�7�j��Ja��W{�f���KG��i���{��vO�$\c�����_A����7����3����+�yC��;/N�B2��`�v7;�7��zS�%-���sHf���GE��a������K���KQ{l�nXe��a����<y���'�	��� �0��I}	m^O�?D(��p��[���I�����	���H�2sf�C����n�~���J���G;��F�?fXa��4�?f �������R�{o�~X���ANX��u7�~�Zs�����P�'�?�?��)3f���{0�����w]����N5�6����o~���=��*��V������������>������j�U�����r>������2�v>��]���g��g����^�v*M��<��<���/A����q��<��K���=�b��������?��O����]�6V��]��X�H17�|�����?��D�UM[W�f�������?�����Me������"��R�m����u�?���n�;���E�?(���E�G�����4�,�_�f��>c�>���\����8}�C��WY1,���j��/�x(|��hgQ�gYK����_X�S��_m�b��v���Y[����,�4�s�����i��A��y�����u��>g��������T�1g���Y��u�?�?�?���s��I��9[����������;r��9������9��������?6W�T�9��;��9��=�x������S��i6�H=nX�i�Um��j����=�6���o.�~-�(Up�<��;h���T$��
2~x�K��\��H�����k�Y_#�5�g�X�^
��������?���$@�E�GM����������#���V��d��/�J�?'����O4]j �uUg���;|���Wa��d�p��+<0��K:}<�N�����x����v2}�'N"��[:3>a�'�yY�c�8J�!
���t����p�g��Q��������:D���K���yk���FF�v�
����L'O�U�]t�~:���~13�5�����r�Z^	�����������^e�,��W�L��66���K��'����48J>�;����n
���������{���?\N���[�6��M�L�����k�?Fq��9��;��o�
�n_�������p���6_}4�t\�"|:3>��0 >�����(�@����I���Z~�O'����'��)\T���#�
c�:�� ��������C>7'n�=��0z�!��W�oX���"#~m�I�;��"�QL^d��i��/�K�m�����/� �a�v�/��A��g���7��f������)���n����o�3�v�U�x�y���?�	�	���p�a�����������Aw�s�s�����8�8�g)����������x��L�����_���}����<	�yRs)p�a���__���39t_}�������|����
;������D'2�{��a}:��D���������S�����g_~5�6_cz��n�?�������%��~��g{��K��e��e�j��7��%i��N���N��H'A���k+�Y��M&�[�1���������W��[�"nf'��f�
7�w��q1�2�;�������.�K�����G�q�>�>��&t�s����l�3=��+os����Q�e�{����������]b�8�����!�Q������O=��M��.�������>
�'��6�V��m�_�>3�H������|H�������vf����
�<������'���������W��)�6�������������;�\���G��e�KN$�.�h��~�gq�tya��p���	��"/8�2|h���;�
G��'��,4~>�'�����mb!�z0���M�%x.@f�'�2%|�Nf��_� :�QR�B�A"������W��6\iz�*�m�f�Q��W�������	1�8s�|���x�����o��9�����r>-�,�������`����^���������G����F�������
��},}W~9��
"�7��74u���w��
'��W�gz���I���?��v4`@�*�m�s�z��X����&q/�f��
}������������g����xv�2�o^���_,�����
�g!S�x���r:�������?������~���ZN�6���A�����������D���<�����_X�-d��7�������%�?���/�?Z�^�(��tns��0����/�������NU��tns����y�y������m�>&��%�s�K������?o��c^	N	�lh��5��@&���������=wNx�����/�f��mr�l#������SL��<c�M�W�}+��(n����W#��xuLI���hr��n���f�}����s�����r�Y���T
jy��u����_�N������3g��S����u������E���\�_���_1����q��7�'�w���+�e����g�R���
(8�R�[>�����i~��|+��aN��$m@��k�m@�E]����p�?S�|vb�J�8�u�H{��?0��������tze7�
(����C�����_�>����iszZ<�.�`��7��u��0h2u�v��%|�����Z�m@�C]�����
a'����JA-��6 ��.����gOh��R�w�JA-��6 ��.�����=�Y�'J��*�������@�?�?��f��(~���>h2�������~���RP���
�|�t�s�cOh��R�w�JA-��6 ��.�����=�Y�'J��*�������@�?�?��f��(~���>h2�������~���RP���
�|�t�s�cOh��R�w�JA-��6 ��.��O7�iS������	&%6!$r��*��z<�Y##������F�R���Q�(���U�O�r��[DW����G����U=�?���J!�3�+�)��Cxf�?��ks�{]��5�����_	����� ��~���:��������K��	S�%����T�\�o^U���6I����h��&��L��_�R[�>���y�q�������$������p��S?�����&��,V��������M*�K���(��������x��_m�$�TvIp5���>g}Vw��%����TU���&I�y�E�$6�-e*�l��ud�����_8U��om�$�x��vIlR[�T<���k��:�a	��&pb5��V��Z�FA&�����_,1�cUK��xD6�}D��P2H�P�#�kb�&�_cU�����ys @'0u�+�����R~�(tZai�_N�~����%%��r@.��}�vN�~�����������w�����O���o�
��t���1<���53��S���n�$W�.*�k~r�W[h�s����O��������4_ F�B���s�<ha����u=���Q����zj���r���m=���R�i�R�?� �r�m[�@�?���/��f�?i�@�Py�M�(�R������a[�?���v���G�BA��1f��~�����z��_�/����_E�Jm��s���m=���R���Q-x��
��l�8�a-mrX��-�k������?<Q��^�x��y���%pa���B�|�zJ�����JE�	7��e�\K�S�i����)]DV��d���Fy���I������;)���`���A�C�Qz������1������^>������
x�/����]�e�+^������9�����?|wq���g�/��w�����<�<������I(y�Y����������=�{������w_����#�Ma������_����gh���W#k���z�4�?l%���_�[��?�?�C"{H^���$V`%� �k~������5�#���T[������>L%Z��6<��|3YT��*6�l���*&���|���.�(�E���
h�r�t��ka'����R�r����2P�DOK}��!�.������:r����G�7����^�������wEs�2B�q��a�-w���As�h�^of.<V6z�C������X��f�l���r?���;����R�r�}����D+�������C6���
,�.����?|��[�h%�6����C6���
,�.����>Q��N��?AN��!�h����C����(�V'Z���� '�m��
~�{K}����w��O�|�����O���6~�?����>�������'J���V�o�'��a?d����R�r�����%��D+����������vo`�p9t������ou�����	rr����G�7������������J^f������f��%��7�����2�J��E$��,���o�So�)���,���?F$sp�� @�P"C��T]b=������� +��qY��,�{���~���Y]�;�~2[����X�o�m�u�����f��Y��5�z4�6}F�+����4�y���r����H\���?��X�����3$��L�4i�'��cQL9�R��_m�1���?M��e�+��X�SN�T����6c����i�Lz���:`����u�S[�f���5m#�I��cQL9�R��j��!���m�2�vc,��)'Z*��Om�1������X&��n�E0�DK����-`3�\������W������h�\�?�l����_�6b��
�1u��-�������rq�k�F,�^a7���r��r���r��k����5T4n�A�'rr3�!t�/"���^P�����TvuS3�)�T0�Z����7#:�]�:u���)8���g�R3�
���#�)I�8��^��MIm�����'�n�����_Oy��[�wK<=������������D)� ��xz��������?=��RnA�,��$�����?�z�����X��I���?�<���'J�y����\�?�<�x��)O�r�`��'��&�d�2 {�:�v�ts�k���L@�L�t��������x!x����
�M.��+pX}�W���Y����2�Qd�����Z�#��A��<���~�?<J=��_�Z�j/�y��<������_D{��<U�"
��=��M���������/2����|��2l���^����Zv������O����_dk3��������d��.x_|����c<���S_|���xQky����5_�
o��7�����d��G7�8U��\Q�#���w%	��WI�������,�/����tlr�_dH.<����r���O:��������-�/m�~���o1i]��#�rKi�5����_���;����I6�0U1�o�x��6������7�*�����U����1�
��`���O<��O�D�����!�S��1�^����������q��G��������k������R������<�J�A�IK���!����u�6N��r��m`+�?�8�?���������I��)�XJ�������#����acH|�b�:|
>�R�����Vq�7i�o�u���v���+����V'(��bxV�e����}��R]�%�b���c���j.��q;N��'�����
\��G�-���>t��Rjl���<
]�Q��e�l�M��w��/��W�F�_��E%�����mKV��������9����?�����<+H^,����D���/������������?����?�#JkM	W�%)��_|���5�_�����6FJkM	W������?����J�CZ�5�&'������^��a#��3&��Di;���m��*���	T�k�UG���v�0��M�����B�~<.���������b�0��*L�O�?�
~�_Eb$�3��|RS�����/�����_�_���O#yBbKm�5�O�����Gb�f��{����fk)�?y�������}����������)lV��������b���j#~��.@gW���������U�� �������?XK�L�8����
�D�����������dW�U�/�����tm���hf��4�8?L����Fp|���&'��G�d�	&O������~�.f4r��[�����Y��*��I���rYv�,)�g\��Q-���m[�.D�v����Fzg��^��b�n[��u����A����������2����������:���_���%_p<��������#}�����h/�����P[������������9��?���]/�'�6����_��?X�i�������?����?8Gp����zk��X���f_�
k����2B�!B�j[RH�<�)���N%�*�Xt��,r�hd}�Z��%���#z��������*��	����G�����R����z��������2J{�is����q�����;�����m�y����O�vl�����<�<�4����7������������6�4�����������as#���-8�������G����������os��������������kNX�6T�d�8&��qcF����%���u����N���%���=Ti��	���2���
/�QT�@Q�~[��uJ�������!�i\���U��\W��KNP�*?k��w���������
�yV�F�!�?���C�+X������������6OH� �&��fGE�
x�gT���u�?�?�?�����?�#�y<��o�L[�*[�U����������?������y��	_|�Q���Wb#���YP�XbH�d~�e�����������?����3����������__�d=��"�7����a�-�Vn��������8a��p<]3����<�V�����IM����!��_-Dd��"���,�	�/����G�P�~�&*�UJZK��~����[��&�5N*�'#T����S��u������o��5���������t���je_��������_�����f�L���6�J�����`�c��|�������?��������2��g�)��1��V���Y�x�������=�X��5��
	�����x�a?��������_dO��r��a�ZO����1�������x���2K'h�e�����Oo���T� )F��V:"J���24�����hx����!v�ra����� ��T.v���d����-����W�V��e�,��4�����m��l����Bj/��v_������k�-O�<���=�������1�bC�������O��<�z����S��D���h�-���y���l����w����������G�j����Y������_���ct�1�h�m��������1"�N1���Y���	k����i�����4����o+K!�����cde\��u�gn���b�2�����J���DT��_���(�%��BA�Jo�I���Q?De���g��0V�7�2G���_r@����C������)����/������.f��^xmJe�}�o����9�_��������{�����i�k���������y�������q�qv|'��5V�\�������2O�����������?�DY���5��}�{+<�������?���\���|.�s?���<����#�����?_�|��Z�YAjX�r������u��B(��W�3ek������\6��vq��Y]{|����\�V��_�E�zS��*��� ��*!�e��Gh�M�T�%�f:�Xf�� �T�>`
�b�zM����*3���k�Ye���x���;n�����Z���������L��������#�
'�������'w�:���r�-����3�6�_��s���=�L���n�.��7Xi�p�n���h_#K�6k��0m��0e��p���
�x8L�9��]y�2��{��������f��w����<�b�������� �?t�M����-fg����{�g�|Gx���5�{�
�m�q�C��=��Nx��+�>���pP�~�G[��W_9�:|h���m&��3/��V�Lxb����_��-������(c�
���C_= �����Xf�������^��gw���.w�+�%�������ko��G,�T��;�QC�&>�
a$��~������T'3���s�;��#�;����(,�H�)*o+%��~��wL�������|��m�s��w�sva+Hq��G����O��r��N@�m�s���������� 3����/�6��#4N�/��6o�����W��v��v�����j'�!����
|�����{��<�$�$RGb��4��N��m�s���������W�oX���U���l,	O��+�x��
��B����"��`K��F�L�V]*R�J���d<��P��?�TCr��Z�fj�����z������L�5)������&�����G#��+��[�
�\sKM�J�C��>l���&�OG>�!u����'��u\d���f�1;mU�P|�K�_�>#}�E��'S����F����w���a$���<����~�i��3�&-��/���a�e�N�+*;���_������P���~��a����fe�v����-����"~5�:����m����z��?%��;/,���|��4�������Y-�{�����p�=�?~��hw���2���a���j]a��V
'�W�����J����
����;��?���D�/�����o��������{�%�b��W����������|~�b|�[���>oR�b��=�<���/x
�~����<�x�Q�@-�x�B�c��������<n'�+�������_��Ra�I���R������o7���K������zj�����~�X�{����f��������t�S~��|!
�:�F��"��hI���kM���j�X�'lM(���Y����B����#�$�}�y�c-�/m���6��[�����r�O�y}��R]��6rX���[~�7�����	3�������:�%��mv��!n��=.���0s�����aa�-6
�
\�������~��7�����
���f�����u�Q�R4~
���
�u?��k����O��3�H:={����)������n���*������6���o�+�x�:����_>sD����������R6�S�\�D��O='H�n8z���o�p��O��\q�B���z���>c��_��S�Oo���u�g�xGx���j�u�_.���}��$G�F'��r�C���_#�^[��J�S�����_���g�������(r���A��*x�����=��)�t�4~>9��:�'�~��O���������������Na(�l�Jx���#a���D�������'<�,������?�H?b��-�0g�K��-r��
���p����m����w��h�����+�R|�F_@�Z�y�y�y�y�����C����S��O���rKu�?�<�p�h��i��p)>o�/�J-�<�<�<�<�lv���yFq��x��m�Z�����?�8Z�h�4�J����P��k6;h��<�8�T���6���R�������$;,�,
_&�Ro`B��+����*��8=��P
cj=�����k^�U��n���^���2@)����d�� ��d'�@IDAT�B-�,����i���{����3���|��O�J�X���
[��J$�~��������������C�	��f8�����
����@�L�Kx�40\��#b���{8|��q�����B���K���+����h�_D'������������r������)z9����q��e,�����#i�u�pm��|bX�5_8*\�_���g�'�D:���}�6H�
w=�L��9��
�b�v���M��6��C�~��
��k��<�����?����*Y	|�N��B'���1����a��9aQ�_��^����a`�%�=O=K��(!���S�_�S��l�:����s���Z��|��a�j+�;t���I}��������K��4�BW[��^���J��U���*���d�eB/��d����^��:\?[�l�6[�����
�:�^���*��T���u�~�@�6m�,�����u�Lk�U��zQ+�p�l��m�lY��+,�z��&��P��V����e�����VWX�!�2�MV	��E�������i�e	 ����C�eZ��8@��ZY��g�m�f�8@X]aY����6Y%<p������(����%<p�������im�Jx�U/je��-P�M�-Kx�au�eB/��d����^��:\?[�l�6[�����
�:�^���*��T���u�~�@�6m�,�����u�Lk�U��zQ+�p�l��m�lY��+,�z��&��P��V����e�����VWX�!�2Me�
kFr�.t%�M%��M7�+�z[�HG�g$�Z�7v`e��"��O���t��d�+A�)|�=�0��3�������Bx� �Ut@����TR��meI]z���4����Tf��7yC�O?��k�������5
�o@?��JX��O'N'��+���S��DC���������������\?|Q��c���gB�a�Q"ulX��!���p�N[D�w�O'[���8j�����a�;����F�F��O���F��w���{h���i�#�����/M'���q�?�������%������8[7��;���;��?=1u�Q�lX/���-�Hm��&�������������9a��i��^x�����6~q��p��������E1�#>�������N}��<�������o�GG�?�������q�q?V�?f���C��O?>~�����v��~�����G��#�
��[��'N��g"t��������s���!O��J:`S��?b����aC�Zj��5�
}���5��\������/D�p�3T�R5* 1&1
�x����V��y���_�!��G�������y
��G������j=F�����>b-KR/�*���
�o!���~Xk���D���|���`������K�D\`��B_������k�b��W������[���lX�I*o���7����3�o�N�-��@=��/L�qoH2��	��|,�+]��n��L����)���;���+=yG�'�K���`�y�����<�_|����������7�����w��z ��;�G��O��Jc���!a4����&�����q<D��
\a�
��������0{��^����\��/M'���Wk�~����%W5��Wm6����<��q����
��K���n8���qt�����>�7m�����B�8�3wn�����8��+��������_�7�'�?��
�{����8�O�����6jDx�^�}���E��b�,]Jg�����W�0�}������y���7�}h�����������f�?l`M�b����;\�y:�N�8W�	�����q����Sx�&D�9����o���0���vxg��v�ww��e��K�~ ���_T���?�h]��u���:2t��5��v�{���|n�?��f�UU�ao�_Mt��jS��?��6IU)����l�6���+p�������������3���������l�{�������C��'�m��-?p*Mjmx�?�?�?�-6��;�[~�T����Zl<1�-v�����4���=�<�<�8:��xbl[�o��SiRk�{��&����=[0��L49���L��3��
C�Uv���R�*-�K�������Ou����`���]�J��N�E�U3�]�R�'��g,���1�T@o��>F?����T������v^�8$>;a���
�m��[lq��rW����4����I�^��]��w}��w�������{j�S{Q���A�J���q�-J����|�a�a�D�i�)ymJZ�}�#�J���5��������_}�.���S���R�z�U��W���)[�����?�:���\��7�y�MQ&�������a��=!�I�Z������J��]���t�|����0���VE|����X|�:����5���
��Y3L���?�dXT��c���6������J���3?������W��S���y3�-!�?��j�f����{z&�E`fE;���4:5���_����>r���i�_�?���W��v��-!�5����6X�}Ly�����p������8B�j��~��������������_9��>m����G���.VJm������_�D9���,�v����?�}��59�F���������@���6��K��__}��a�s�vUf���4������<����~��[����x�6�9Xk!��7���SC�-���@Z�?6YG~��0��Mr�����7����A���_�VI�S?�V�O����|��p����������
�sP<u=�6���Ya�<�����c��/���Nv7v�J�w�z�'^|)�������_��-c����U�X��������+?���3���/�K���4t����j�4�~����/3������i3��j"	��(XI������!<��Vm]_���p�=�����/�6�I�]���	k�p������t������[n������x�y���'c�����4UF^*����h�2��~�k���J���U1;h�
�b�|�~�t���4���_S?Fy�����e|��?���O ���������Y������?��*�M���?x�t����Y����&V�:�
���@�����szzw���`��JIk�?���>n�]���Y?�U��TJZ����K���?<���B����XEq�;�JIk�<�x��(��y|x���u���O`�!�*%�y�������/g�R�N,�k��_�G=����M�����<\����_$�"fl�'��i��Rc�	�h��OP���1n�q(�DF��a��W�"P�BW�R���zM@����L��"���_F�����9���Y�@:��bR��/���?%e�7��}7{G������u��\yc���P]�w2����N�r���W�k��������k�#���k�&7�l\s?����s�)��~�FY���f���Jp����'��_���l����MP��	k�p�m���?����
k���`�E=�k>O'����tB��g]T������(��y@~o����
�����A��3f��N<5�������r��Gk�U��J��m�����>����5�z,|����Ad�����������%�n��������m�������`�B��~H\X�C�C4�lI!����~��Km��
�,�X������<�$$�<�x���������|q�����T�\��Kl[�����������%�s������O o�+�?���?�c#�dV�����?����?%��?�+����$@
]P��?��I���7k�Pc_M9��	N����J�`m��O��W�������jZuc�R�K,��*C��6����t�_��TFM���6��#�p�����gq�?����:+��3�����K��ca�u�C�H��p;�>~��5���L��o���ag��^k�a�������o�X�+|����
�_d��o8_�'��/t�o�Iq�����~�s���:�)q�������e��D��[�<��}�'!w�����0~��z���^�O7\��0�zF���n:a����@�_o��^vH��w����������<�E���������U����z�{�3t�����)�?wX@�i�3w^x��g���NK�.;�pz}y���K���~I����
�?^)��+S�������}�������/^��+d1�������f���������vg��~����m�E|W�ru����H��x����5�������|�l�������<�x��l����L�9���������[ZO������o�^�������?���?��T�����?�����<V�7�'�7�+��3%�zsZ:�k�W5HM�=jN[���Bf���-�(��*Y�-�Ui�eC�:#'��p�����
�e[{k����DC��
�`���S��u`�(R]�f������y��U��n�����rC��6^?���a��%����z.u&o�B6���Z����	c��5���������z�����y{��;|��q��<���~�p�
k~���?�
�>}�h����?m~���3���s�v��&�F�]�?]�y=��o���be���
=�������=�o��p����G�1Zr�c<p������5���_o����n�������-���o�r~6��p�m���m�~���;E��������7e������Z���+�!]�����?g�W�o����e�c�;��@`T�]J�6��?R���$J�6�������V��J�_���s�����/�Q!g��!�kc�J�����������h���Y�?�hl��Lk�������������R>���
�������?����*?��v����u�<�x��q�z�8*�z�<=��
o��SmX�t���T�����8��H����0�y��2M���U�����u���~hM�Z�a����hqW��U�9}�cc*q���6�S9:~�Md���h?�-�E=�������	m�q��I/��<��3�e������v>����������������B���O���6,'�9���X9�t����)3f�w�xZ��E������2��<�a}�g���Td��*���$�?�o�����1)��=������4jU�����a�,m8����j�:Y��1�^g��zk�����x�{W:M<g}��u��5_8:�G��~�N�uqezY����",�������k�{]D�?�/����ok�e�_P�������[\h��'���o��	k��������k�O����7���_����7���
VZ�NUw�?dx�:�/���z!�����mt���
$������������N5���:;>[��*^��nio�����<t��af
�G��ji>����C�!~���K�.��w�/Q�X�x�y�q����!XikY���eh?����>x��=S[����q������D��������!�"B4>#m���n���P��tKs�s�s�Cd���m�#K�u+E��tK������Cd�xS�������]���k����ai����qd��n�(^��ni��
k,71�P���������!�?�r�:�"(��W�������Mc��MB5*��/$;&���-���K�����K��I:�W_:E|����aK-O~��N�+����r���G���N�?�������k��|`��������.W�E*�}��/C�
����}�W�����Aq��%��1|�����{��q��q����7.�
m�/��{y
mX�	Yp���F�����fwx�O���I��k�z��Yz��EB��u�E1�������e�p�V����7�L��r6^m�5jx<i����G�i�����L�sX����uq�Z�c�s:��1����!�!|��_�k�X���'�����U����sx��O�?oNX[-\g�9���e��'�G����z�����y�\0i���6w���l���u������O�H��Ii6�l=�J[��l��������������w�`c��=�<�<�<�:���fs���|�ms��{���������=�m���N�l��u�?�<�x���;r��9������9�������?�T������A��[+�3�!�I���'H���!!-���Y�U,X"$�I�D�"/J�.i
/I��-g�&z*����In�4�G[d���Z�W��U
���	WC�����d������W��RPk����V?�S�,��;�����R��Q �;����
F/�_���p�?����]#|����}��F�7.G�G���;������R����/�����5S�`.��~�4��������U�?�Ic�e�
�	��{��J!|�����?N,�Ms�	��_
�����?�N�*n8��5o8�x��5�j{ }OYO���>�W{��{����|.�A���G{��������?�����z�1;o���u"�W/����_����e��KO����k>O�*����^	�����C��4��Vv@��u�����U=��oX?����-6�
�m���!?���0��>�~��O>.��Y����G��������d7�����<������9F��/�%xxr���5A,��>_�]z��������d�	@��K�C.������P������x�����W"q�q��xr����>!�>��A�����������+yP���R�����`�s���-n��B�q��u��H�$5�Wd�z�";9�P��{��2E���8�5CE������7�A3�c?�]sz��J�<bl��t�|�����?�9��\�_Z�Y8��h3o�w���x����GF
w=�}[��p}_�>����7[}�������h�x��G���I��{��������;��W'�y���?}aR:p`������8���y.�]��p�
��4�2�6xp�c�u�r�Y��f��nz%���Z�=;1\���J~W�m�o��U��^|mj��=�
w>�TX}��0�^u~���:l�?��{�~�x��:�6�G����O~7�7[]^u.a���_��#���K�k��J����:}f���F��9s�%w=&M�J��;��wx����r��Vk����QJ����a��Y��O�1`�S�b�9�����y��0�^���
������e?_����nz�	�2�_s����Z���w������������~Qmw�:}V���$zK@�t���������}%����P��N:�^�o`�&��o^�L�C��?wS/�g�Q�����VQ���'6�K�o��DV�[���/W��B�c,�3�Tr:������p�G%���Om���p��Q�u��?X��7�?-o��GZ������'v�������_��?,��x�������%������?�����a�����R��tns��x�������O��?,����T
���m.��?�<�x������6�J�����%����y%x�iD����'�4��*'�|�1iP�l8O��X#��������Wi�7��1���E_��9�_�v���PG���m�G]����Oq����>hw������
����_	��95�/��hXf����I��;�^��������=$�p������	������*<�g��vL8r�-k���rg�����0�?�M�7��u`Xz�jI�O���WT'�
1����'�_�oa�C����A�\��{�w�]7X[��n�B�/��9�so�������N���?����I�Xz1�_����w��d�p�>�	�S�s�C����n
���.���"
d������<���Sl���o���� �|��Oq��:�=�}�����^y=���S#������{�\��Ts��g<^)�<��k���b:��s����r�Y���T
jy��u�������,������Z�m@�C]����{B��O��T
jy��u����	�?Q
�P)��}�d>������'4�D)�;@����A��P�������,������Z�m@�C]����{B��O��T
jy��u����	�?Q
�P)��}�d>������'4�D)�;@����A��P�������,������Z�m@�C]������d��~�)m����U�h�
��I�������8AD%2T����I�e�1L��hU��jb�8�����S�M�D�_�Q����_
3��O�k��X�J������C�Tmm5d>{�#�_�W �������K���uu�'�:%��yg~|2��fQ��*k��d6�����so���'L�9�D/���Zk��=z�x������=/<���p}���������R��>�����8�?�����[;,5�����^��h�C�<D>#C?qr8�����d
�}������[m��y���KN��MI��������[�����?��;�i���4�Q;lQ�*��<[���N?�������*������S�p�Q�_�����M���D�97��z��q����?���������I�����XB�0eZ8����
��5�V�l�
~���Ys���^xm
���s")Zo���I�����BJO��(����?�|����J�m������5�����a�����_�����I&��"�Im)SI}N`���\����	�����}fTr���G+%6�vC��������<�`	�?D��*�0"�5�?�F�M�jZ��cs��#�<���4nP��Kx����C��������#�T|�U������/,Q'���fk��U�������/������_�6u��3n'���M���6��,\�u��T�J���H��p�~�	�65����	w�n��"�8������d	��c��(�0h3��#s}������n��1�I�+5�FG�iw�O�\>^��2��3�����u���Y"��}���8�s���h������Rz]���_��b|u������M�g�����&��3hv\v����������_��a������F�k����+a��W�?T��k���+����?bI���<u:�V|��?��7j��>����S�c�m���8�����������C��>f����������?}���WW�7��?����u�����b���8����'l������6R������r�I�����{[�4�����|D-��W#�<�����_ l��������|D-���F�R������a[�?���v���G�Bq�Z��~�e��
��D�:�	����1�����wU��rBc-����Mx��|�7�j[��&W� ��R�U}~�Gq~y��c�q�������G����l*��/��p����`%�W������_H9J��������?{����7'z���\/��c�{�
���_���F�����?xD������_���G�Xs�;<������C�l'���<��!�d�����LU����u��?���>b]�?�?�?��?��y�������g���?�J|�s�?�-�����NJ��/��?���?�	kqG��9I�L����MN��������cU�j38�$��Z��VD5��N��ZQ���up���<�r�}�C;�,�����C����z'xrX�\�/p���h%��>���6~�?����>�������O�|�����O���6~�?����>�������'J���V�o�'��a?d����R�r�����%��D+����������vo`�p9t������ou�����	rr����G�7����~��D��:�J�m�99l��l���X�\]��?|��[�h%�6����C6���
,�.����>Q��N��?AN��!�h����C����(�V'Z���� '�m��
~�{K}����w��O�|�����O���6~�?����>��p�����v$�wh���KF�~-9�F�qm	E\�(�Y�"���T,�����Bh�"��XT�����#v��s\���U7�n�G�Ty���~�nqQXrQ��_m�1���o�F,�^a7���r��r����C.�M��e�+��X�SN�T����6c����i�Lz���:`����u�S[�f���5m#�I��cQL9�R��j��!���m�2�vc,��)'Z*��Om�1������X&��n�E0�DK����-`3�\������W������h�\�?�l����_�6b��
�1u��-�������rq�k�F,�^a7���r��r����C.�M��e�+��X�SN�T����6c����i�Lz���:`����u�S[�f�����:a�C!��N�8�����*�
;!L���Z���S?#�{����':�WyD���*�5���X��J?u�Q^�/k�+����PL����9������[Mm�������&�W�?�?�?�?��R����(�)��]�{�������O)74qinA����)#�x�������O��ZinA��^)O�$�=�x�������3Ls���My:���?z�������oOy��[�wK<=����V�?�aM���^�M���d#/��{E~� 4+L�Uv��W�~�S�B"p��:pP�
y��/�g� G`Qi�u�\?�w��������;��n����w����z"Y0����/������v��+����gH��W������g0&����;�{�ey����A�tz�����w~�E���W��k���|���g~���?�=(l�<�Z�s�������b�=�<�x���xQky�Et	���������a�C��=]-�V9Z���F1+dl��+~�1�O^-.����]B��������:������ow���p3�z�j/��9�,�(sI�W��t�+��������vAE��6^������_ww�����S�
|���-Q*�
�����<m�Eb3�I��)l�R�����V��q�7i��9�Y����Mac����6����x���D�X�����C"��b
1�B�?�
l���������d�Cs����"i99&�r��/l[y����x���#�Cb3�I��)l�R�����V��q�-b
�?���!3��S����-�?�
l��G"�&������h�����n�]%[�[	��M~{C���,���h*���lz�xJ�x-�[��s��-������"�����j�
�n����?�*���f+v�mcl������g���Q��Z��
?�u<%����������R�)����c|�C����<�x�����9��kK�<�6��=������>"�?��#�\S��|)�y��������4>������o}��kK��/�8���=���J���/[��_l�����K)n���x�{���\�G�x���"Ui�8�]$H�2��������5b�B}�Ezf��K�����O��m3�0@�������J��<�����?WC5J���w��(��d�-6�<�8j<�pN�~�����%�{���?�����b������������_�����u�����:!X_�R�XK����*�R\�~&~������_'���?�����^��z��?��"6���'_��_����������������N��?��bM�J+xP������W�3���f� ��G]����������z�cWlu_;�����,���x�f.-)�D"�)[1Ke	M����ZQ"�)���s���%�����L[�i�&����e�O����������Y��?���3mu������?/����\om�H~i�z��x��>�Vg[����?�����9���������}"o3�\��C����g��l+�������\�������)Vj�����j�:�^��^�Ke�s�����<��iW=#�
a��^�� �����Ms�jo�����Qxd�-#h�f>+�Yo��my����vo�����~N����Z[��n���3%���Yw�s���������@l�@B�����W��)���u_|�������zcs���?������/�Ao��#��?���?���?���y5o��?���=����Q����������[�	klCSJa;$E����bc���������!$e����������<.���''��.��(�����P�rY��k�,2�g�9�����UT��?2�,�E������j������X����T�Q�X��D�����*�������9�#k'�b*�����j�������CHEh���?��? ��Y��2k�F�!�$K{�����W���8�������D�����R�Qa������C�K���H���G�?�v��?�_$����������_b%���_�EJ���	_|�Y����a�=y%7yiu��3)��0J�����U��&�8�vY~����Z-��W,�����-6�T��l~�c��3�����tH��`�C�P{1��T&�]�Vq�[g�U���'`�?]�a�4�R������G,�x�QO�k���X�����?�'�L�b��L#����<���x��X�����|�����_<=������T�A�6�|��U��/����ks���������SWW�fZ��uMa$kc���������;���pi�640�:���")�[Z@�.���E���7bP~K�eU4�!��O����� �)W�G�����O������1Z[W��8�4�-�N}\����l����u�����|K���#�d�N4��������$�u��?�@���&����;���=F���dY���-������g���}����=�K[�j�/�|���w�l�?�?���1������Z�����l���T����5������O������-��[<��~���	kq���3�N�:u-7	���9u<�����J�	V�\� ���4���u��
�`~��6�����xg*C�7�G��������Q��:���e�Eu��S������s��w����y��'��?��
��F��R}��?��6������h����������y">���?�Ox���WH�������!���<�����?����?��#���h6A
�����b
���_�
���9����_|����-�1���
^������5�&bA��%�nv����k]���j�*�Uc>��'�Q,1�s��U����.:M�XBT���q��6��'6�-]�XF�r�[y����{�]������v�^�~
l��������YH|��������`<��2)�����������_��������F,a=���|�v����r/d�?�+�m��#D��)�(������?����]��|�C�y�A�E4N�L>`�6�9����OA��=�"�x�E�E<��+��a'P�6�9����?r�:n�ZVNG�k��4��i���6�H��_��`H��e[QkD�C��^A)�)�+*����-h�Z���
E���kF���0�����F[&��tx�����S��$����o�c}C����o�����<"�^�W��z#�";� ���l�o����(�2���������u"�;���Om�������Z�#�&��+�H�������<n'�+�������_��Ra�I���R������o7���K������zj�����~�X�{�����7��	���%�����W���G�k��b��=�z�����
�q����x�������V�0�b^�.$�E.E�|�c��\��;��(_$7.,�S�)�&8c�\9a-|�����

��������M��_�y;�/�����K{��]a�l�2C�7���|���'��1�����
{�7zT8z�-�z���KR��L
���L8��7�_�Z��`�Q��������qR����
�f�Sf�����0��������}��\_0�o������KX"������Hc��%W����et�|������]�	��G��������h�<�\����m��~�����`�3f���7R��k�T��gA���a��$W�����R�����i�����q;8��g�1������h���>����9��Y�O�o�l��X�9��������h�����+�R|�F_@�Z�y�y�y�y�����C����S��O���rKu�?�<�p�h��i��p)>o�/�J-�<�<�<�<�lv���yFq��x��m�Z�����?�8Z�h�4�J����P��k���������1�!��QiG��/%3r$��(W�[��� �a�Y����h�[@Qf����k����t���2]f���6�����WaY����6Y%<p�����T�(���GWVY�yh3d��{�?��i#U�f�|���]�	K������	�����7/���g�;�C��,np��6�,S_�>#}�Etj{r�W�P�Qz3���;n�v���-}A
����
�\s��!z?��;�a�m�x�a�'q��w��\{kM��>������6���g�D����k�U�Z��@��B�eZ�-Kx�U6jeB-��d���B�����(����%<p�jw��:�Z���*���V�e��-P�M�-Kx�����u�Lk�U��
�:\?[�l�6[�����Q+�j��&��Z�u�~�@�6m�,��T��V�!�2�MV	 �*,�p�l��m�lY��vG��C�eZ��8@hUX����e�����P��ZY�P��6Y%<p����������i�e	������im�Jx��UaY��g�m�f�8@�;jeB-��d���B�����(����%<p�jw��:�Z���*���V�e��-P�M�-Kx�����u�Lk�U��
�:\?[�l�6[�����Q+�j��&��Z�u�~�@�6m�,��T��V�!�2�MV	 �*,�p�l��m�lY��vG��C�e���6����BM�`��!D�D�+�;^�W�
������i\��W���v����2.�m��}�Hf�z+��D\=������Vd�,�t���x[y��?f���:t"z�F����wb����$�\.�M�42�����
?�S�<�����p�������;<F�������W��UG
���V6x��o��:����������Fa��K��]�du�������xCXj@�0z�e���
�mV��+���~��x���,�0�_}��������������aK�X����L��|V�3o��#j�
k�>��;��A��K
��X6�
�d���5�N��w�=�_�N4��Z{������y ����#�F������&7�Nx�[���W��������XV�
�J�b�&0?FT����L��~�."S^��j��8��-LeZ��.=R^+:�(2&��Ma*���u���6�����Q�w���cJ>e}��K��4���w�#K��!���)���9[/���<���������i\��xZ���}S�����>@�/ ��2�=�u���Z)�5�
�oa*���u���Z)�_l����Q��P�FL)�l��z�7�������������/VY|��`�-�9���>s��X,���p{���/��#�OI!�=��.6�l]l���i����������Z�6��t2T<�,T5���.-����OK�5c��V���q�7�*��AR�*$c~��"�����pug�_�R,�`������L���jA�M���j�����w�#N� <7X�������G�+���so�mX��,�d8������C7	���������a���u���?������x��p����(w��A����������K��}����+������������
W��)a��6���lk�����C���2��W/���6���_�����p�����~����\qCC#���m��y����y_�?t������b;��R����%���`��t5h����!��/�n�?^����������/[LJ����������xAL v���<��S<%}�fl��������_���c%2%�?��w�6�2yt@�-?p�l������������c�bx��J�Z��������C��'�����8�&�6������G�O���f��X���z������F0�"�S��_��GF�������R&�E=(N���C�i��ZV���	�e����D�
�
j#
�6X��F��n�����������D03�+�:�o\���3a}��o_8*�o6�w�=��q7�v�.���;��;<1��p�)c���t�#/.8����j���.��oRsYz��p�g� m����	������}d���������w���u��O�@IDATT�p���P:������}$��~�Nr�z��������3~C������}���g}�6���������^���_�Nk������+\p;��J�O���T��q�-���e���������s~i����K��wv-��y��X���w�����'999C��_���� &#9�
�������__}���W~�����P����@L��#����
����_����_����_���+��t
������)���B���+�i�|z##gE���%�v������=�7pU�`�Z��X����V%7a�.�\2����U����T�X+�O8�&���j�m��[lg��r��;|���
��}��s���S�����
�6���o�_��p�'	+,�4��+����	�������d���c��������>�J'���6��~��t��6��������������9���Zk�p���w�������.9������+�������^��fA7���m8�k�eC����yH�����7s^7�y���{k��V����Z��?��	M���I�Q�z�y�!*<�h\�5�?����B�Y��la|����������%�����y�y�����ispb!��Xi�5X���[��<\�������d�������2M�S�U�Y�����5�?�<�HvA��N8<� ��9X���[��<\����g��=a]�\�z&�kW�����L�s���g�I|���zF��JR"x�W����"���5�~u�~f��E�,����U���
��=�'����k��+�,�����a����U7���{��]�k��%�8tH8����)�����l��W����0s�:q}t����z��N<5L��7s)��j���~�?J�x>�7�Q�������g�:���������1`0��bz��jh6�����K{�	B�^C�� J�0��b���_��i�������~�J�f���h��J��1�?"��E8��;�O�{��������v�����OI#Pn1S>����YB����w�"l��bR�F���$���\B��mw����5�+}R����r�7r�qo�a==������������`���d+5���?����XK���1@>�U�+�SF3b�ZY���G9����UkH�����������w��j���K�c������G+���������f�\��������u��q�e�����>�����E����������2����������}Cj'�fA\�w2�������)��X�@hq(����M`Q�E���$�#�����W���?�)�TR<-�(i�4�W��'N"�u��6�|���$�����c���?vX�.��c��x��������Y�:g8��Q�&N
[��u�����7d��#D��<%l|��qd�����"�ew?i�{�������Z$C��4ej\L~A��F�-��
��>����^xE�E�S����s���8:�z��w��wf<=�q����F��a��__�T��nJ;�m��Z�$?��@��5�{�7z�fm'�����'�{����������_����v����~8����ITg�l7��<����q�����������������z~D����!>�������i��b3��������G|��|���G�������S��������GjU[�����d������)���/P%NQ��u�hIJ
u���E��������2kI�%UX��7�\��^Q��W�A�?��qS�?����z�`�b�+���;��;
[s���oF���������g��~3�n�;���w'M[}�,\O�����j%��������r�xT�R�H�M���\��6���>��
�[���[��Hk���]���X f������t>�����Y�� wXc�uz$8�����3�kP�������g����T����z*����I��������0��o�8u:F��+k�9�?�l�M:�WWFueM0�?�?�?XGkh��?�?u�A
�+k���u������l�����:����5�����u��h
M6����o�nP����`������u��&�i���~m�N�-T*�B������	ny��QHq��<#�}_���Ey_����Oi)wV2���IY��6��
J���V��d8V������G�cG�Ag\���p�^;���OvX�%G��;�;��d��6K�����Hec��w������-(��K�3lt�	a���0Hv7_���cU��2uj�i��q!�������
/�KY$:��?m���R�
�G������w&|B�`�E��������|6|���%��1�1�r��A*�����u�����-�����\�����U�=\����#������o�o�d����D�?��F�auF'��������V��i��e��\��7:iy���a�Xnu��O���1:V�e����X��2�����
}09�l]��,J�I��&7��e����4�~(T��Giy���a�Xnu���������3���`�������y����=��)��z�H�|�����Z��fi��(-O�)�[=��ennn������bvd���s����X=b�ennn���>���QZ��S*�z,O��������:V�k�RKi��)Z�WC����t��q�53����<5��2t�Q����mQ�%���n�����.��[�G��	��a�S/��rl���X/���
����p����
�~�����A�m�����Q��Q]Xa����r5�������=���������K�3.����k�����Z)����#>����c�u`wu����s�?����ZU�L�L���NYQ��g���/�"����;�e��/�K�����<�e���,Z?���a�Sp����H��Y����JD��(�_��e�v3�5�z*�J������M���d��o�����|*�b�k\MIjsi���<���w������!��4��Bjsi��������������>'MW��|�s����?�������t�s�t�z��I������q���wT�R����xi>�9i�����?�R_�U:�9i�]�����O����X�B�4��Y�(�D�Hq[���z����^��x�c<�T��*�u
x�4����W����_��G����^Q$�8;�u������w�-���;���}�8f����p��������Fk������:���<���+%����s���'�`�>r�m�:#G�:�d���������z�(Be�	N�v��b�(����d�wl�d���C�&��g�zw8����@Y,X�?�k"���{�VYx�������N:O�UYG;�!����/Y�f#T���s��������m�����R����n~���O	�����[3��3�����J�6CYQvs�#~=����&G��CF*?���l�r`�����������?z�5B���L�_�3���~��q��������'����})eB!F������j��L�r�|�������#�O26?i��0� F���}�m�5�����G*1`�r$��S
6HYY��i��D <e��e�@�_����������N�/��V+���j�Qz�N��~��m'����Z�<�kN!��_�W�?W ;�u��k�?�n����K��z����iJ���?��,��/���/v�wcn	�����#�;�9*;�5t�9g�-�#��g0k��|��_����%��}:��_�G���y7l{�a��i%Mt�����2�����7E�3g��]%�.X���'G��������d���!����Q��H��C�Z?�c��������v��%����W����%�%��������W����������w������I}��_��Lq�c?��L���T��p�W�jy���������W�K��4���p��<U-G��5��?���^P�8��M��T�y�*@\�\��zA�I�T�JU���#�P���������O�/��q�?�N��Q-G�������?�T��	N� q\��#H`���0WA��A�#�
�z�J���H���76�b��5(&_��J�B~�D�3�i���5,&�A����0U��<c�1������e,��O�y$8{b�4�=t��p�G�Yg�9���O����
��������a�%F�~��7�'��L���	�c�{4��r.X���-~��&�v�����������U�'eK ��Cl���n.������n.��:�;�I���[`X������>.������3�]rr$x�!}����R��;�g��s�3�>��)�x�C[�������5��o�%�h�a�e��U]�e���*rl	d�1�Lk��w�CZ��J8�1���u�g<�5v�s��&����P�[	S�:�3�����AZ��J�w����j��i�]�\��	��zb%�;�V�T������������@=��c+a�Z�y��cZc�?�?hBk��X	����0U��<c�1�����4�5PO��z��J���a�1����������'VB�cl%LU�0�xLk����Mh
�+��1���u�g<�5v�s�������Xh�]��E�E�����a)������C��Z��})b�|b�>
��+�K]�/����t���mI~|�o�������a�%	�{r�,�>+w4c����n��?�)F>��~���_�����X�k��0����1������ �K�U���
�]��p�#O��[��T�g����U���^7!�y�����/�������h�uG.y�:�����<i�.��k��:�,���{������J������'�	w>�\�O�1�U] �������K�y��h���ny��rT��0��a�9�M�M���
G�G}L�"�VYF�X�����W���Z,����K��FF�OK�x�:�'�Q��������%��+���R����q��u_iA��Y>����_v����_�����!�B/2���J��5��O������u�_��A��o)������r�dRJ*I��M��4��~�|�������Y$}�-e��5>�F�d2)%�$|�M��4�Y��_J��ob8E��o)������r�dRJ*I��M}n���q�KI|��o�`m;���
�]��]�����4��?��aefI������)��H�H=o{�?��&F�$!V����tRE��[���Z���?�L}���,*���?����GW���w��g��'|a���{�!G����N�2%s���R�������h�S���?y�����'�ir�6�?�����CF��������G�������H���X�=�
m�zK.��e+��E0���{3�r����U��O�$�_�l����e1Bk�;d��Sd���Y��g��Z�W�_�-����/����v�8u���W*l3riZK�$m������0��+�*�4���Yc�v�&]��/����_nE��2���2�M����v�����G���<M���r�s��R����22�J��\f�W��e��o����l�0\�L����X�O��������N��h���:��G	����X��L���eV�����YW.;���#&!�?� ��6���4�5�l��L���r}������r+B.�Y���Ym�����+��������YSUK�i��S�������Q�t���T������<"P��@�P��IA+�����U����.���45F!jX�}����z��G����u�?e\�?�O����|C���?v�S��������e�z���J ���u��_j�����
�fTH@qA���^���z9j��HgXk�����2��y��XN�E�d����8n�Vb�a�E?�q��x
��rg8���Z#�%6��^`��p�~;�ng�;V���7y�,�?~x��E��eki�Ba��}���{��0`�����~jJ"E����g�D������������Q��������%JK������=�F���������MNV�T5O�li��5G\��.�F������]��N�>�����>r?��D%T}����hB�o�y��b�N��(�"O���O� ��`1����R�+�����hxV����Cr�������gn�����?~�@0����W-���_�����E��N��u��z��W��������|��g���WQ�~��_����M�����:�
�M�����Zj��-"V�A��
������CY
��GX�;\Q�eHWC��*.�uu���C��q��/M��!��a)
������!��
= ,5|����oM�~������
����h���CX5��h�+��o�G:��	����|w��:�Uc���O����veu�M�D:��	����|w��:�Uc���O����veu�M�D:��	����|w��:�Uc���O����veu�M�D:��	����|w��:�Uc���O����veu�M�D:��	����|w��:�Uc���O����veu�M�D:��	����|w��:�Uc���O����veu�M�D:��	����|w��:�Uc���O����veu�M�D:��	����|w��:�Uc���O����veu�M�D:��	����|w��:�Uc���O����veu�M�D:��	����|k����7�t8GB	�!F0,F�P�~+��6L-����g����`��Q[�\��w)��g
�jB���i�Q�
��&��4������������(�L�L��f�c2gt]�&�1��_�lT2��r�i�9&sF���dA�!Fp�k��J&Rn�2�8�d�����,(3����Q��O�
P����]�?�e����U6*��I��4��9���g���#����F%�?)7@�f�c2gt]�L�b��V��d�'�(��sL�������2C����*�L���e�q����u�3YPf�\�Ze������L3�1�3��&�1��_�lT2��r�i�9&sF���dA�!Fp�k��J&Rn�2�8�d�����,(3����Q��O�
P����]�?Y���R'N�SD���cL���f82h����Ff��9)�e��x��Ki����O��tN�|+R�SC$9�u������u�z�X���d�V�q�s�s�s�S�j@�o��a�r�"�����?�2����}�c���4�*
����q����+?Q�[�w��tE�����?���u��~�qNWt����q����+?Q�[�w��tE�����?���u��~G|H�`���(~�PD�)����M�@���f���Jh�Y��,�)���3
�g��e0�%�H�����m�	{Qg�����I�F�Y^���o�B��Rp�w���m`h�'��9(+���2l����(�?������������He�����+�����%������h!�������������_�/���B
>���3=���zXC�|m��)-���B���~�oe���]8���U]�:C�|��Q���qYV��
���P�E���U�Z�9���:�"�HB�R����(�_�y��i�,*�L�����������(�2u�Cu����A]q�S]����0�j��,��i��2�K�s��l(+�?�8��������U��L)c�-v��l(+�?�8�?������|�ZN�8�)�����l(+�?�`�+�?�-(���g����)�1y)r�)����z�����:�2K!y�2���R�\�(���O5��O�E���G}H}��L
���)�X^������r��G}��������L
���)�X^���eCY���u�.G�+���YD*|D]�M#����X�t���
��r�l��DX�X�"zI�L��/�������������(��^[+�?��t��i�.�[��0�����%��G�i��?�����C���������R�B�M���U�����j}kUC���/���/�����k�`u�$�������?�o��Cs>�����H������Rs�����oj[�}���|���'�a]��I���*�Y@�Eg�4w>�#���E�,(#�%��g)��ZD�8������J���hU3�\�?a���wl���������a��TST�S�%�T�j����T*U��J�������q�)n�J%�U�����B`�_�������|����gI-��/�C�PJ�S���?�AQ~������u�KC��Z��_J�R��������?>�N�����k��F�BO�������R�������}�������7M��+�?s�����b���A�4�n�����GH�+�����k��\�
�$����4&K�c�Q�_qZi�!����&v�*���gI>�����K�WA�>]�T,���kJCVn���"}p���7��#�9���������T������?>�������������T��/�, ��@,�SjJC�>��������������|����>��\��#���4d����a���8���SiR"���Y��*�:����@��=VQ��\�C�k����'�.��k�-��N:5�.�� ��\�1�.�D�H�����cMOp����U��gp���
��\�*������6������������o.�����?��}�����?���"}o �����XF�CjG�i�}�����_�S��Z�+���O��k;���1�y��#�c(=���T��O=�CR�S������P�W�o+x������>h{��s:�2�(�e��_��R��T)^��_l����2q��jD
*���-�x�w�s��f$�S������J�^���'��R,L F��������L���y���`'������~4��������L��U�eR������Rb��	�|���G-��(��y����7��b�T*�/����'�M?hG�������������b"�+�P�&�T�H�l��tR<�������Om#ZV)&"��+�i��K���g�G�7��P�K���H�i���^6%�|:(�@)��`����0H��Y%�c�i
M#WK���AB/-��7V�`i*/gKMy8J��_�F�H�����Il�`i�t
P�?�
����^W��t6�t�����������P���(��o.5���)��k�����?�o����_���P?g�PK�O�Mm��J�������7��������=mvM��ji�S#BSKi��u�����_�����c�ol�i��:M��D�TY����uJ��n=���j�=^���L�K�K`����Fh���P�Y��]��n�m����T��d����	4����������\�6y����im�?��Nf�:������ve�����������	��>��G���,�2���������.���q�o�?M>R=hU_��RZ��h�������d����������F�����?����f�}��H���iW��p������e�z�d�&�@'�X@��3���
���(�
L	��I)�"������%U-k�/��l��&��O[l
%�j����/$@��9�s�������������t�?���F	�\������
������(��U������������~R��������y������������?�+�	�)�}�����_��~��_H��R��y���0�����0��)'J3�}������u�Y]vX��k~�Q���h�Z�S���#�x���5�,.�T<&��wU�3n����T��&��8	�'���k�X�'�Mu<�kA�*]��y����_%br��4����	��.�?Z�����y{M�q��z�W�M5__���8���+�s�3�t������U�������G���U�m|��!F09i�O�5�	�������n6����_q�c�Q���SN,��	��������������_�9���B��I>�T��j>����?>������cu�a���	SI�NV�[t��+IIi:�:�8�p3��0��R�j(������S��H<�EIN����I�.��?d��O����PO\�(�?�?��
fL�2J�5M�BN���������zB�BI�[>�7��kR�+��������|������|n����0>��2���T;��������?�������������������&�I���Is�����r����hW�k�����?�`����C���:6���k��������k-}�R��$
�#(�Q���_�u��M��Sy'�/ ���L�3y#����X���.���/�s�������G�P�2yPN�����������_�����H�c�lyZ�������1{�e����W_/�L�f�V�S������������6��x��=��O�������0yPO�|��m���/����y��qs�����n�59��4��0yPN�U>�O�?�?���b�l������<�26��)�?�?�?���;��0?c0`\�Y�x�S�ui�?����Z,�MT�K��p���^�:�����Gs9J�
���M��#:a�I����W�V��U'�1q-�4��o����s�!f
���n���0q������c����e	�*�j��������T�����=g�4uJxy�[mF,}����	�-}LCO��t����{��0A�j`�����_�G�el|��	����?s��?����a�o������E�=ze�[�F9�>��YZ�������H�A�9���c_W�[�~��z��������w�S��A����z���r��=��$�?j�x���0�����3�
#��+f_|sB���1���� K�i��$��`h�U'�1iX\?�Z^_�)s����"��Y0�*����b���9��C����e��G{��<H��a��k�������������VC����ZG%����x���D�Nc�_�@��]��@�l�t�N����x��]�M���Kup���U%Po�nnn����K���1�Z_�������t�I����1v��J�������>���,X����V�J����(�u��t��H���IS�KHy�i-$n��H���R�T*b+��g��J9nNe�6����y�_�r�0`�Y����_����������w�J����z��9d����^}��������*������7Z+,=�����C�<ejxY|�2(L������t�|�e���\)���5��%��8yr8�����/��Yq���
K�A��Q�L�����p��O�Uv]}���2#C��g�����'��^xU�2m��u,��d��������[� ��,�N�2-,2tH�����7��"��������Fo�y�������=��H�h��f���d���Q��6V�P�q���{x����Y_V��y�����>R��?o���,-����������e�m�>9Z�TV\*9�j�E�����?�K������aS�_��g��C>bP���B����p��k�����O��|Et�����c����
������6��������
����t��w�������r�Z�"v������_�|]��-
���VZxx�w�U����|�p����"/������� ��{�,
:a����l�N16IqL*E|(���~J�R��\�J)����uB��A�Q�Q�U������ec�c���������w��k���}��>��6O��Fx��W�=��z�2��7�������c������������{�h���z���������b����hp����w��/7�X�z�_��-��e?h�5���.(��CB������/�����\s���#���x^����R��t����v�,�C�h!��:���f�����Z���m���R�iZ�s\����xo����������V����U�����]��n6w�����?������'Dp��r�<4�O��3��0&<�s��sN�6H9�T�&�f�R��1�i��Wi�N�:��'�U*E�
.�%C�cLx�2Me���F��R���?Y�����H��,D�Peq��@��a%R�^[������q
���VC%��0��T\�?J-��m�Kx�O�Q�T������n�v�	t;��,bWd�0{����z��r�����A�_$I/�.����OU+�?��`b��g^�{����e����d���$R�����g���p�����C��+�L�49�.?pc����w
K�"�:��q����Q��:K����&apY�h��?���a��O"I?� �M�������-�D����/w=�\�i6���	>}��.�}m���w������	7�&�wwA^�A��?������p�����?M�l�������������[��V�Y*���L�_������W]!|y�u��}�h��/����!��p����:x\������e'!�����o?�'�h�JrE"�_)J����?���=�\Y{[�������,��>�hCR�W��P�f��2�����b�'��p����M����\~��w��n�=6 ��-J��HM��'�)�����}�Y5����?K�O��g�pO��;e��C����@��s����������|d�v���<�h+�l�?1,V����]"���n�_����wF�|0��m7�R��_�'����9%�Z}�87�y4��I�z���x�������������l2X��m��.��}0���W��)S�}���r�=�����5i:�.�L��Q��+�<<����J�x6��������.�)>aFMSM�f����Cb�eG��?�w�.�?H�vF}`L���?��eg����c��X�P���J�$��3�M�#<�'��i�	��w�s��uXH�	�&�!<�'��i�	�����������M�Cx�O�Q�T�������a!�'@�l���0���&�����k�SK~��.���j�FEXU�B)X��.�5��O���/��U0�#����U_M�1�O��?�f����>������n�nX{���X��������f8�o����L�;��rv�a��B�#���(|��������^o�E��l%e*��y*�����r��n�������}����G��#��#;~f�d�f����/R�*�I������kr�i����{-7����eAw���c���s�c���_�*qw�v+/+;�p4�����
������~���S�����MW��Hx��7��9���X4,����Ia�_�qM��z����������_~2
�Xi�2U~��a������[G�g��,w�)/�z����O����w������Yo�E����K������YI���-�.�B���������}�#��&�s�������h������c���������-�?Svam�u�����q���=^~��0b�a��s
�c����������7������1��}�2�����Eg��������i�/���p��k�?���*�}�;���p�=�=�^%�p���#��C�t��&N�#�_�kW8����zA?��"t���
l�z�?$�"e�Rr��=R��X/���X�	�H5�w�G3s�/���xa��:d�YM��������&��S�C�>��������b�,v��#�2�|1N�`S;��?�"�0cRi�������h�������2
���:A�������������gn9Q������i��������T�:������E�����y�~O��������\j�<��}?'����	�N
��8���s�Xt�8�����&G�?\�0��I�S��_Xw��-����y)��a{�������������\g�:lxy����:���Z�������������&�4�$�����i_���4�����.�n��+�r�S�Lw�����9�?������I�����������������
��������m�6R�Y�W�5�����>�~��_��Z��x�4��%b����$�R�R�e��(F�q�!����DZ�#����V3���

����j������%��;����K:�~K�d��?�h,�F�~R,p���
k/�p�i�#�r��!.��������_A���^�������������r�=c__<��\�a���l��J��k�������_�'���,h��X��"�y������U����&�b����#w�>��:�.X������?e�]�h��bM���[���~����i��Rg���,����{���;�����7�y�����?�G=�Gl�069����mXk��b�i����c�E�c��!,,��"����3�Y>���� Tz/���bmU��-��9_��=���g����19.�z�kG�k��G������)��s/����(.�]���Y,����F������~y�0�,�aa�V5|x��3�!���k��X�@fi��u����L��X#E6g�{������Il4T��������0�a'�o��%Ac}�6���'�K�U�dXh'^���k,�#�6R����p�C8j���fO�����!��u����cn����}�,��������#;��!(�(6[�������)�?��--�4�,�� �S�������/�Irg������Gmf9���Q2����~{��S�}��=����y�d�e����C\U�����������
KFFk�_��}oJ�(���Z��a�l(��H�:������9��_�K�}����S�{�����_:n���������!��\���J����Rw�s��[�������������������~�z�"�j����L.�������������G�r���&�S5��r�q
)���$����77����s,�B�*I�HE��K�z�MZN(c��q�\T>�a���������WK�|�����E#��$a��s�)�?~����(�����SY�U�u��|m�0'v���mv����!Y�����_-�7�g�^�7|G��n�{���CeG*����a�gw��
�Q�w$���<a4��n�G��!G��&~��q��uM>��h�Y���1(	���O-��j���Zny�,�\��r���p��;J�#�e���V���Z�W��5�������[�/�y�+P5�����;����_{l���XM�s�\p�����T��|g����a��Z�Gv�����A�c��Y���,�i�(7`Z����!tA�������������_����-���+D=+��c�q�s�?�w�����G?���0��G���=DvL�	�����u�S����/�����;��#��u���*��4�u�"�g���������A�S|�R���|12N���!��!�/��������-���V�(}@g�yd�[�����7�:F���ZD:���ZB,������|��
��X�4aB8�o�
?�n����1�_;�����\���u
G�	�����������?�a��w��q�yq'��`�J��~��;�������X�������g�o�?�����*�xt�>���_��G-_�kx��e����`������(�VY>|g�
���8yr������o��2����<����3����s��������a[���*�����~��:.u�G�B\���,M���B��c~o
h�8H_/�:av���o�?��7�W��)�����S���w�����\��J��������zo�c�?�?��?��?�%���z�����?�9(/�\�����n�������w�\6y�����_�g���?*
���?>����o\�V��1B��m�i�Q]�=�Gf�����HqP���4z�Y�_���R4\B�4�+J�&���k4k�G*�f��|R���'Y�F���'��g����Gd��ur������x$mg�����k��\
&CP�d����3��&�q�u��Su�;���)�3|�Xp�,�3���X9�{���_���p����y���:;d��k#,v����;���"�,�@�]����3�BYBx?��;o6Xj����>>6|��?G^M�G{���Ar$1~tW��Td �=O:?1�~���:�y�a}il��bk�R��g�4�'�Bn�h�iZ>�Xf��k��	XtC�
�c�$lA���+;V�u�_���B�� ;�����?�m��A--��]Q�[�@����%K;��\,�����/#��u�/�~0���95�?m��_
{����������wXKz���A����}���[d�5�tjD��3��CwH�$)����Y��?�p=p�X��;�-vXPj�?��t��nw��&N	�ig���8-�������_�7���b"��FH��'�:�������1��\U�@IDAT������v����,����GP|�������?�������X�����o�EL�_����;����/�u;{V�Y���[9 l����*#��k�'�a
���\������?q�����W������r��?1xE�1�����a��?���L������akS�t���q!�z$8J�@��&��0�����E���9p�~U��v"#	<�CL������)x��6v�����'_��_����}#D�:��'_�����t��J��	���si����]��o*���\���T;fl�5M���z{�?�o���u�������_���?����l�y5�W�V5��d�����r���G�������S��L��)vX[es7�1�KI�,6����0N��Ruzi8�S���H�8���������U��8�g���	����#��+��d�9FXp�k,8q�y�?���#�+���{��������x4�54�c�ZV]�$�:Z_�tYH^1L�2-�q�y���G��e'+�����IXp�K����?�c������R����G� ���]������Wa=��r���_�O�!W]m]E�Z�t�~;�e����������_z-,.���r�g�iw�����@:��?���`�=�Zw�Qv�����9\�?__�AG�
��,��.]/�9�m��RO��%"`����5���������#+�������7v�|�#S�,Hn��S��E��5t���X0����v����O�0�x�!���p����?\kY�I�������_��"���kJ���d���6W�����C�q��h�z�2vjC6��������V����C;��I��8�u�v]k����~���a�e�--~�I��|��=�����gT��B	~����#�n��@�)>z����������z|t���u���`!���3�u���
���=�:z�y��7��p����I��7d�a�!����HRa�����{�q-����>����S��Q��|��0�_���8�<���F�������.�Xx������xF>�����?u�a;�;�H�s�-Yw��0����:���SXe���",T��54��6����W��<>��7�7���n��{�w����_u��@�$�?��(��M2������<B�[��o��:�PrueM0��?�?XGkh������`;��J������/����Q]Yw�������������	^u���K9�P����aV/f�z�Y]]uN
������iun�����?���,o��!u�
�q�_�A+�;��o���E��x��I��!����p��w}q�sZG�b�?����s��>^���`��QA�&�NY<Dvc�����3/�T�����Xp��W'�/n�V��Z�D�sn�w8�X�.8.����j����|+��g���=���4��v���}����c�ZC�������}v�:����=���[��@�>rl�`�G�����q�=��-�p�M��s.�b0�H���4�s������Yp���NkVi� �s�,���>`G[�,�Bf�6�O�������w������n'8���?��"#�'~�P���C�
g��d����)1��/���|���r�q��'��e�wsu�M�.��I�w�����~�|4r���G~u�� �O����T��O���/���r�8����_����3$��*( ���Ar������������U��M�iy�.	H���7Hl���zA��?��������Q��?>����g�)�p:��iF��4�]RvX�Hp	��G��,�?��>���R���=��Hy��y�Aa������IR�y����/�]��C��1��H���������;������hs�����7#��80���{�#O���p<O�y
�v|��a��7�����(l��	.�������l?b���cyZ�~��1������@���u��/M���8���ikb&>��_�(����;�?��7��^�����|��]W�^�Z����_u��ozF�Jui����?nnU;�<�f�nn��n�����<�|�y���<M�Tn�X����]��������bvd�����,Lb�\Ln,�:]��������)RO� m��a��������4�}(T�fGiy���a�Xnuf��j�I����>�U��������o[9�yb�]i[*hY6�����WV�&��L�5�%(���?��y�5\�:���e��&{��D�#}������O��cx��V�
��~�(�S��M�N����O��OQ���y�v�� GJW�@Nenw����
?!��7K8����r�,`�e��so��t�Qw�n!���h�1�����c-ir���v��m��6��0�?{��5M������M���c`�G�*�Ev	�-��_?!�;rD��]��e���z�[y]��?0���#���S��C9Bx�
T�Zd�s���+DH�b�S����lP��r�+�������������Q��m+�iq/,�_�;�
�we'��G�&�������G�Ml�)�����`�:c�t�G��g��3����[wH���1��b���/�.��G��u���_K�t>���w\u���-���;����~/��*���w��r��eh�q����Z��8�G�#���q�z]���}G�����'�v8�I�}N�uk���%�-�]"�h��"b��"�)�4��T���{:��������`z�l���O�oF�������&����q��n��R�<{���?H�S����-�|���[Z�<����Rkz���?��o�����;�vp��;W*�O��i7��'�����G����o'�?�?�?}�Mm���O��;���o��i����_�ho?i�������b��S�K�����-��n� ��W�a�~iA$�)!1��xD�1_���4Z���j�0�W�S�B'%��1��).�4��R�?�_C[�D�1i������������?�)�}��N��,��f������aC���t�Yg)�X�.�k���'c���������g�9���a|�MaY�)� .vX��
K��o�q��[}2��W����wX�Hs�9j��~7l#��`��
w/�AyZ)v�x��r���I��]RP����~���`�X�Q��x�S������s�������=�s��"%��g�����tX�������I���w�d�����H���:��,o����+�U�:��RAP�B[�)"��o�3Mv��Ap;�V�??�A���O��\p��f�}�r�|�������*\;���L[�n�v���>��i���t��������0u���/�����A�_������;�����nO�1����/��am�5��!�>\,��-vH�o�s!k�{��}��p���q�8N�kY�NvX���H�G�����}�����DX�����0�=�����ont���ox��wY6�����6k�|gv����Q�#	nwX���a�R����C��yt��_x5�w��$���3���a?�h���A�x���?f$]/G��8teF�,�#�_�Av9���}�y��F�=O:/<!�������7#�qd9�S%�69�D�fJlo�1��� �O�V��l-;�WY&����h�W�kRg�p�7����4�&z
�y���%9��i������?�Q���W��N����&���v�������]��*O������!>�&��.��>��An���8��������nnxK�@?�8���F�����?�	�����OU.����������?��W����l��P��Hy����Z9�����1��S�O8�%f"�Z^�o����/��U�FOS��j}��$�O��������T����
��Y����v��2�:x�����r��3hP�v�e���;������g_�bok0����`<[�O���M�
��k�P��)����o�d;����K����]�\06��p�, ��fG���8�l�oGm+�h�����@��3|��+��O�-�s��P�����J���6n�Yq��������}��o��?�������G
�eO������O����e�K�;������;��R�*:X��Gh���|���.�z$8v�s�XN|�U}�G����Sv����T��lbS������Gl�?�Q����/����T9e�]�R��Jm�������M����V>����a��>����r�@������q�A����1S>�}���e�b����j 5�����!wX/!���?�J2G
����c�����.8c��C���V��z_�"��J��W]��U���u�~��������H<�9��tL��G���P����r��
��i,�������]�^���_���u�5���G����h��u�e��]������=�nB���"��Ia���k����������/�����7�]0^�V���g���������*����S����d7;>F��S8����S���p:7��
3�I�?{�=��P��W��}�������w�6������r$x���Y�������W�����H�M��"�����?!N]mM�)�?�Q@��W��Y+���_��	��p��~�)���AY?�[q�y�Z�<��W9������(���7:y�Z^�o����?��T3�?i��/��Gy�Z�<�kN!.�U/�?i����Gy�Z�<B� ��U����q�?�G��yT��G��q�s�s������?�8��G�R���#�P��������?U�@����� <:����'G��c�aZb��M�5`x��h�:6�&5�����O�������1�X���@�������I���;���%���0��[
v�i�����w��E:�s	'��{�e�������.4��lC�q�G��6��[��U��7���Y���q"m��:�r�g*v�_",;���$i�������_���X_�����t����Z���=WXp>������9z���< ����v(V���+�y��2�����4l�����Gdg����%^���_r�y�i��s8�/n{���:Iv�Q���6^�u�"��{K�o�;����/&G����A�����}����.F`Uv�#�����
6��8���uL�,i���Hf)O��&G�B���#����'���^��}����&�����������h���:����p��O���m�&�z����?f������DV�	��6����0b�9�9��.��?����BL����=���?�[���s��������[v�������q �K��C��D�+�>v����|R����I8��m���g
��g���8�`�,lV���{����?�zw8���
�������#���G�;�y$x���l�a�p}>V�e?��{�q4���S������<���]pr^
�a������r����a�c�5��S>���rt�Fr��/>�e�$�lr�Ia��E�[�7����<Y����G��&6]b�� ���������*�X����b���@�cl%L�o����!�v�b Zmlu��q���;�;VR�hu����Q��3NqF�P��6�����3m���o�)���u�g,�5f���e�������_�����;�V�T���������*J�b�� �;c+a�Z�y��cZc������'VB�cl%LU�0�xLk����Mh
�+��1���u�g<�5v�s��&����P�[	S�:�3�����AZ��J�w����j��i�]�\��	��zb%�;�V�T����������N���?����R��R �"��0���P��c��	a��{��,V�r�����J!�	^*������]q+��8�/��1\!�e(��~���F��zyO���,~��~����_v��[��]p��D�:��ia�_/����?��,���������XQv���)����-����Q�s�'���g��r�3�������q�����q��;2���������?S��*��'Z���]��q�_���{��p������
�
��� �#{�
"��uo8f�-@����)��C��_�8�u���#���?�#��t��3I`��!������o����?���R�)����|_�G���8�u���$��?M����I�g���C_�6��	R�����m�,>  ����`}]D�����jE�(
r���a�S/�T.������W<��G�������#��H�xp�z��?���V�����������������%���n$l;d���L���GZ��������+;�WYP�_y�XpV���op�H�o=R<�������5��B������XI���Y���UC�X~���NSD� _
�������pd��w;�L��m�O�<����]���������r�K�	'��s�#����Gv����W�/�#���uVb������Z��j���:�`m����r��o�?��z��	���LkR�����U��d+�>������������&k�=�Z9�w�|������g^�}�&�4=R�Z�SN:�C���=�(�6S�Al��z4��a]�E2&���js
����9_�r��������Jrz�O������!���>=�����%��o���e�LJKI=��Jb/�?�:YJ*I��MisYt���������_�"��RS�D�s&�������*�e���E�d2)%�$\����i���#d����(�$;0�5��(�L&Ry���6���u���4��Mx@���5�J�����/L�H�X�1�VZ���(wW��R�T#�z��H�����������n��H�#�$?����������f�N�o��E�o��9
�iIu���Z4���$���B��.nx��X\���^,�B�;E������:�\�z$�.�z���mM���M��x$���>������P�s��/����;�<^����?���z�����PY���k���N��J�0xu':qz��-�D����E�z^v��,��H���������0��	�=�|���d��?�qs=�T�ce\w�#�5^>Eq��OL�����A�`MA���}���,�#��"����Dz�dc����_��F�v}�9��1��?-C�����h^w��Hy��-��?2:��o���.X���(���C���<v��p�mq��T��]�?�a���|�{V>���s�����m�����a���XS���k�V��/�N���"�u
�����3��o}�.��CZ@�uo8��������?��~I�E���BSwX���j���X�^Hwh�%;������l��o]��|����m�����VT5�$-�D��}�����K?��m=6����i��X��V^6(�� ���7�N�S��i������"�f��(����/�����o-�Z�]'���.���a�������	����5V������W�z�3�������.�%����.�&����lZ���y������;����C�����bEL�"������#���E����q��h����#�#`��_���4�t���H�N��I����i�?����� ���M.������[��RG���M���pl]�M�]���%��I��?�!��e��P��jS�n�]���G���iSUK�i�������~ja�����m�$��'�"��2���2�M���g�����5���t�c:Y,�2U�AI ,���8�1l��h�6aw�u@�'M�Iqk .J�/K[����c;�\)�<�?�)F��q��c��;d���?v��7�
��=�>L���c���%LZXl�<�����BXu9�y��KM�*��q�]�.��������G�=���Y�xUH�������OI�~-&�k������8���:+K�Cv;O����R�o��������[rl�,�|v�ev��Y��d�L{�Yz,�y�u?�p�X������:��#�m�F�����.E����{qw��K,�^i��WxBz�1vXk$�fd���o�p�,�u�}N�s[���0q���L�����~���V<��������]��1X^�X>Yvu�{�=�o�����Z
�(��|L&�*�I���{���$;��I�29>U�v������{�-����{��o�7M��t��;E����N`���5Ef������������X�zF����X���Q���1�����E��XXp�z�c/�,:�p�������������S�����]���R�n|l\z�������.V���r�~�#����
�����#����������w�^}���#F�x��A�>�|Y�����/�K���'<*��������|^v�b�q?���!���3|�AaS�X�S7E��l��A��$:�����s���Zd����Q�u��C��z<Y�V<�������^ai�����n�s��O?/~����d���b�:�G.V;.�\��j��	r��n��0������1�����!���������Lf��o6Xy������������H���/���w+�dj�Bv'N��	#���y-T�)
�|����=�B��G)�_{eY�����[��t4��O������H���z���}i����;�;�&r����SN %���U���8Q���__v��$w]S�����2O �������I����!��;�4����'��,z��^�w��������/����O�X���)�O{�?l�;��E������J�1=���w�C�\���������G��R9?`���!�N�1����*+H���M�ZF���U�2��vQ>�n�>i�?��_�o��?l������#����v��T��_�XM�EY�[���#�w�|}i��!���j�����,*�`���"^�Kv�O����,�����E���S�E�#���h%���B����<�'�G��uXw�EZG���ju���z��w�E��+�-���4����������S�"�9������S~,�AL�8�w�uW
��������`v1�1�Z��	���8:��d��4���lWv��^�������V:�����
k/.�pB��|.�IS�����h!��.q�]M����N9�xY0!���������p�m��Ll�>����)��<�b���0i
�S�S"<M�$��E�#�����`�g�_�����2S��#�/�`���Fe,}a��v`*�\��?h�^�I�D�����~S�����EB��n���ca5�2jE��z���Vrl:�G�?9���R�7%�!��a������cc���2��0������;�=�8��UJ���
m�L����:|g9���������qo�]��)!\����b~����$������W�g��"����.��G]uS���m���liR��<0����P��arO�-�>YS/u�$�Qa=�����pL����?r*��2�;�w]m���p�	�����V�����
�g�9�d���OX�=��~�C�~����N>ZZ]>^�B)�\�����8�����^V��i�]Y
z��!��au���>�������dFX5F-������V���CX5FM�r*�kWV�X]��q>i����uu����~�(g�����uu��.�?u�N�����7��T�&|�&>�����V����?u�N�����7��T�&|�&>�����V����?u�N�����7��T�&|�&>�����V����?u�N�����7��T�&|�&>�����V����?u�N�����7��T�&|�&>���,Xo$X�Q_BiF���?/&a�Z����x�����
���u4����e�a���1���Zd��6�y������N��n�Q�O�l�C������/��!�Gv��lB��}����G�BJ�M���Gsl�*>NxGv�'w��w�=��o���=�H�7Z3������udt��QW�$;T���|�{��0����Z���������z����
��T�Z���X_q�CrW�
e8�K�;|[��^j�����t��mz��W���{�U���>�!("0�X��'��4>XR�������mM[����_��&����*n�?Iv����s�^k�D���E�6vX�s����*��mG����e7���C�o��m������S��v�B������~q'>�\�5��79�/�sn��
yH�w!����w�,X�;��������x��i����{���A����]�1�<�_r��uY4�Wv��P��O��z��_n����j@�G�
"6�2����C����.�:���SRC��J��
%�������?�?��7�d�q��-^O}*G��x�=��?[y^ �Z�-���8�����5���,a�c�q�E��Kl-���l�9��'��l[����.;Wq�29��Vr���a&�=O���a���%7��G�~+��!�������qrl�#�����a����Z��K�b����c-�g�����������"����p����~��8�az�,v#�g���t��v��%�s]�H�'�7FN��	�q�k���m6�f]K�_�v���Y��	���fZ-��������rJ>^�86�W�{��q���1�9�����D�H�����
+My�u� �1B������(����M�� 7��l���rC����S�K����������n�f����i�9&s&W�?�e����U6*��I��4��9���g���#����F%�?)7@�f�c2gt]�L�b��V��d�'�(��sL�������2C����*�L���e�q����u�3YPf�\�Ze������L3�1�3�����JHA����s��
9�*
qKy�jN��b��s��@�+�9m�e������#��S���K���^����c|������[�b���E^���,l�����h7�,��:�����q9���B�-����b:��~�rLmj\X1����\C�T�i��}e����7��	rDxs���n�#w�{q%�&�?c'����D]���!��q��3r,�����8f��A���f��N����������a����a���:K��sr�7v��-����#�����������im����K�?O���������[�&���_�V~U�������9�!�c��?���c�������Ui��?|����D��.�_�_Gr��S�����������\���X�V����__9%Wd,6��q�z������3)����Au'8��*+�w2Vh.���������w��_!����f���rU�����������\��;�J!����������������-�;��p���������?]��:�B����+������q������-�;��p�������:V����
�
A���!��b�l=<^����9�����K�E5���/	6�s�&�R\qD��e)G�Z����z���k�#���7�)S���U�uz��3z��������������-�KQ�������O�"�\*�f|�v�K%F��������O���T���e�n��(�?��������rRkr��~��J�����N.������-C}F�_(��?�QMj>���So/�-�r�:>������yRM5�S�������e��,�SY��(L����eJ��eeJ�	)��4�c��.����<&M��\�(�6��������SU6�S�.��Vu[�g@�p�,w)�/�6$�SW���������t��}�M6���Wv�q�rJ��[��t�z��2k�*B(S�T������
�����
4����B��2K!y�25*y���?�u��O-���9�������P�S����0��G�PV��q�j#*
�?�=b����iS���9�?�
e��G-���9�?�#�!�����S���9�?���r�S���i����HmHu&��i�u,/E�����������o�s��<RR�I!Lw�!;�U�Z+�8���g���~/�M��up�~{����n�����
��#Wo8�0I�<�.��������}w	��?�������{1R�s�o��n�����j����2�	��z���;�e�!p�E���^j���>������u���hPe�������3��Y��\�|���D�fnn�9�����������GQ��Qk�v��|���'���i$	�}�Mu�����jH��u�;}�7�a����$B5gO����|��*_����FG�rR8K	�qS�����/�"R&'��P:�
���(�87�j}��E�9i�j}��TJO��i�?t�l���v	C
�][8�����r��R�r�\�����a�YRKq�G�P*�����_��;t� �_;�������[��;�T.��W�����Q�h��t���Pb1F��=����?�?j5�����P:�
�����~�����T/�+������/==J�)�(J�Rb��p��G���}�I�|�G����_�0�QRM�����T(%��=���iy�(�9�p��V�H_��������8�� �WA���cDQ��{7�$�����M��5&�����b/�;��(*(�w�7�����=�9���W@������������}���#U���*��qP?�c���<����BH��(	�C��B������eV�V����y,;���Es�|�����ci��)y�^s�W����|Y�h���]�l���Z.�X�Ei������h���}��w�u���X��o6�9N{�����]^������e������?����o�N�k6�+c�xq����w�w�w���bbA��,�X~p�S����Xg��"+�������!�����6��*���u�sOX+���tC6Q��^����E�I�Y����Z�O�/*���"��E.����E�\R������|U�?��������b����uQ�}���7^s�i��������	��l^a�b�tMCL�2��������W�ob__Sz��l���Ne�����?�����Qk6�0_����8!�ce��:��
k��R� buL
�
p��T���;�(	�@�RI�1����1^���"�8C�FBb	i+�H
t�����e0KH�J��Z�c<����Y!�8#�2	�%��U*��BU�!'�?��(������*���XB�����dT>��l]���H�dzg�D��`$$��`�������a���v����_��j�G`,�#��,e0K��G���0�R���c=q�k�;��D��������H�r�7�1]I+m+����:�P�lY\H��3X��������RB�������V��<cAqff)���XB�J������0Jc;��gY��=�?�
��S<0��Is��&�[:-Y@c�Q�A��eE��:�3N�������y4���z601��N
G������W��V���N$�T�����6@;�������	��g�p��r�R���=��t������6|��������>3�Z�|��@�����B*����_�c������>�b���5�3c��mN(�XL�����X7����u��i�5��1����
@c�i��]���;VA���'�oV�zG�T�]�c�*0�V���i�"�V����_$�W�����:������U�3nE:�T��UW��'(������2r�	Tgc����\������v��O����|yU'�����H�H�>���/�"�HG�Tm��%�����vm����d��	T�c������t�����X��"���l��2�]D�������zq�	T�c�+�^����,���t�Z
@�w3��,P&�^�;8��J����s�80��a0��!W��Q���������]���&���+D&�����������_���\��a>���������O��|ev����?|���_d���Q��:�H)��0_����_j!�����$������oVODwLc4��@\�?���D%9�������@r�����B?�g��h~�Lp���4L&*A�)�;�Q9.u����D�T���$O1�9Fo����i�d�������$�,s�(q�PBH$?v��v�^G��"�I,��4���+���]�.xa�
�?�:������#�C$9�,�<��q���G�@m����_�6�W��Y������_�����?��m����B"��g�	��<�����|�����U_�����?0�B"f'�L
<@�y�����>�����7��b0��UNP�8���j�Aj:��5��$FH��X)R)jZ������N�� '�U��l%g�H�8�f1�
D�.�?O��@��$�-�?�?��R1}BJ}��4����������N`Wb1)��_���H�:�k1�J �v�����o�n`'�+������_��R�I�J��v�����o�n`'�+������_��R�I�J��v�����o�n`'�+������_��R�I�J��v������a=��7��G�)�9���?�:�G]��Y/&����E&�qI`������$G��,�#.|������)6�;�z�x��QqL7/�����������g&��z���n^�����?b-�v*�J����.b���r�s�s�s������3L�k=�qL7/�������f;�v�X��Q�Q�O�����������|���	�������8���v������X���J�R,�g��������M�����g;����%�T*�".��<�8���V0�e��D>�/��M�,���!.��������eE����!.�-'�y�t�����6�����6�^����\$�/�"Y��C���|��_VD+b���@��]�"�|��R0�Y��p����t�H����!v��J ���������m�����C���"�����F�.��C����@����������F�/���8k}E2v�s�+��"]�����/+�|w�s�s����"_�q���d����W��K���!��b�G�R�%�uP�����&�c�qZk��1;���F-�8/�4c�qZk��)5)�wc�?��1�8�������<N����\���_��M�����F�o�x�����),B�������!��8�2JuEa���W���d!�8Ne�<Nk�7��uP�c�2@�8����Z'��������f�;�a�1y:�\���M�)���^��v�8��<��m.N������|������|����y1�qi�����x���*�TV
�_����?�_��M�`+qi����>'N��RY�R��������@',N5&O�b���y�)5�u���S��
k8�x����U��!��E�Z����2Dv�B�"���/��+�kC]Z��/�O���g�{�����h^[Y�RJ�O1>`E�Y���uN��;�x<5_��������#t�YEN��>�`���_��Eg'��Is�/�����������J�"�����_l;���Y���c��������?����������'�a!^O��v��3j�*��������uX��I�E�x��Q�T������O��BlO-��c|������nnnbb{h���f�4Uw�s�s�����@�l�0���"�������/�a��N�8�5,�����(^�����q�S�6�������v�Okw�l��
G����y��C_�UUt���R����@�6��V����y�h��9��_�SB3g�-!�}�Y�+��oK���3�\�	(���3����2�Wh������Y��r�v������t�����K��{�����7�Sjk�6{6����h��W��q�}��o�������3KB�-WlF���hj��a�{��w��1��tu���a:z���%��t�U�2~l7�.����8�����C��M��O��q~=�_����=���yp�s���������A>��dFw�s���t�����ToG�~��zn���������34v������D�:��_��(����?|���_��Cg_��9d��?���#�(VQ�%��	(��afS��:��t^
��ZF�Igd���_�.��W��$x�����������[�S�:�i�4e��/��>��|C����i���I�B4Z��8c&]��Pz�����@IDAT7����lZ���)t���Y(A��k��:������q�C����O�/����?h�b������D���$���9���)������O�Hs�������O��J���Z��m/��.\�u�m��^RK���
���������6�?��|�O��J���(������������}`*�"�Oc5�z�L.���_������g�6�b����M}*�&�Xn)��H�����?�]`3�����iR��I.�[�k8�r������z�Ll!�)��x���j�����������Y~�Or�:UtU�+}����X��h]��x��������mP*����j}����|�6�f�N�v�N��Y��x��	�I6����?RS���=��������������:�jA�x�N�$�����B�X��^�s���?c&O�����O]�.��@�!'���p�|�Dz��Q������S[��guj��y([���O�M���K����������d]�%5%T��7�K���i�����t����J�9����i���N|����%%�����p�x�!+�l�n�_���p�Al�p������$��������g�CgCO�c�?��r�����}�UGU7�����������������/|�HB��L��A2q���������"/
�;R���r���������_�����Wu�F:�����������R�Y��ub_�����_�_X��_a�Z�>v��	~��E�9��K�����\��B�����Z���?�7���ah�1|��p����}r8�-�r-����V�'�<6lU
�����������J;pwj��~{�������t�{�)�R���G��=��h���J�s�����w���t��>��;:��{B�y��SJ��tr������|*VsDW�m�r��#�r��\�,������]��D��
�L;����][����_O�L��M���O�go�;s�\5n����r~�.�QC��z��)�m��%M�8I���i�Ii�����s���Tj-\X��B9U��Z4mB��N���J�f��w������L�uk��V�v�������~��/�Od�q4.�@k4�<�d��+4.���s������K����Vev��	��oX]���%|�������a�����{t�i���;_J��17Y��
���b��M�*z�7���-�d�r��h�T���+���/nloX��
�E�_�J��f�6��8�����~	� �1������b�/����am]��"�h����.p����_�������/Z���?��>�0�'����J��O�[�/jU�R�2r�����ol>�������
���UK�/~�����b1����_�c{������W��C$�����V|�%����/�U}�����g�fC������e�U:am�k�0��$�'����!�Eu0EU:c�R]=������C�n�aM$�}k�7���oH�����=1l2������7�
���a}\�"�~��|m����wo�r2��'�._���vt�fP�{��)t�U�������-��=�8��o���JO}4�7r���&�
P�T6I���&2��}��Gp���q������P���3E!�V��Z�������e%�'
����l�z� ;],4��3gq{?���{�f���D�=J��o����� w��J��[��^�d_�>1|������/��f�Z�Z�,�Wf����{��G��@FRz��O���8:w�~���+Q�F�"��E�>O����-W\�N�qK�����|���By������t��o����ft"�<���?N���7I�r���=t��,b�/���Q��E7w`R&%�A�s�{s�K�R&�.z�n�G�������(�����\x��(�U��k��^���	��t]���u(����.�zo��Q���-�^�y�d7J���M���[�^|[���/����������/����R@N�++�I�T�����8��n@����`�n��:*C����u�������"��_����:*C����u�������"��_����:*C����u�������"��_����:*C����u�������"���������b�D:0��<opRV�r��}V�I��Yw��(��&�7��w��i����������x�������u/�I7�	��D��|�Z�S���S�
��X�&�~�1p���Mm�����7����������u8����s�@{o�^(�Ob��'�[�F�Sg6�����];��_�����[���F�i���s���=�����;����C[)i
&���������v/���W��u����R�DYx��������R��������UKX��+���/��=.�1|8�G��/dG�s���#+6��~���Z�-'�1�%�\w����'w@���������RA����a��7�u+Z���~"���*�c�����Y�h����������7��O?�7��t9�^�����N��>��~����?����?$#7��KN�
�3v�k�C�\�����KpDZ.�<n0� -�������/�o<d������SZ&��J�L�r]�q7����r�A�KR1�4
K���Cy\�d������\�����/�:nzl�C��"e8V/���_|YLv
���1.��1�[=��e.���,#�7���������ea��brC��������_�������G��8S1��Cy\����������`j/fGf?�<o��2�������������G�7;���tL��V�q������,#�7����������K�p�0�2������u�f0����JP.�M��Q��8����[1h�U�r��`>a-������ceC�O��1 |+����U��Jr���;��������0o(6kV����~�i��5��O_u����}�@���������s��������_���sKr	���M����?�;<>���	t�5w�������/>�|�6�Q�&+�#������st�1�:�;����U:�����:���|H��/*������vk���l,������
�����v�J}�w*�E�~�uw���E~m��^���;�>�op�>v��c�'�}�������)rEt���N������SO��Y��_��D/��`��|�:�S~I�������_j��W�m��[��L>�}�+o���
��3f�M��X���y\g�����O�������|�XlA�������K�]����sW���/���4o�>���������m���t��UHD�U��R��{�m�F�_�'�r�6���7g����5����j����:�@��O�w�M	��C���T��/�E���k���� W���(|S��WY~��F��� ��'������
)l��
"�S�_�H�v#����M��,�������������>�T7wd��9'Ng��|�s����?�����bQ��������>'N��q�����Ou�#[��8�������������q���E�c������8�������?���lY�s4������7���8&�: U����u��)��?����J��e���^+���'���0�|���
��76Wj���_sU�6p�Pw�������f�l ���C�F������\J�8��wk���?�sU�����\M]�;�����R�/���]iW>Y;�7�O��^���C�3�x���v���)|=��Knp�S7��'���~�@J6-�~�}���Wi._����}�>�zm���\���4����	�����W��R�_��4�e-��%���Gl�	_���Ke��7So�����[Na}�|:
�l=��w��t�!{�b������x���������C���h�3��1?��]��{*o"����A	)��6[���u;��V��W�N�?��c���F4n����q�������7o�w�;Y���Dv�}o������!�r���o������B������o�k�E�
���P��2����=h��Wc����i��U�M���k�a��$2Z�]z#�� �a��2��������d�k��vu�����{�>d�e���W�n(I_������?���&���-�
����P�B]�h����qF��7��N�16�p$���/��p�A`�����_�����?�e�������_���	���u������|��Z��v$���>��/A��������	��}����Y��}����_�����Z�����?}��������
��Pc��Y.U��T�N����q,eYG	�l�z����nXoP�:���]���~�?�r���6�uRGk�y)%�y�������g>�,,����7H��H��8������K������=)0����|�
�a��n�k�����<���3�o�p>��;>������C�_v]v�^$��������f-
J��4Y�A.�����f�q�z�*z�7�O���@I����o6����L6ueC}�^+�rj�Q��S�g�������
��V�h�r3oX%���z�[}@�0���������WN�s���&�	��v�
�y����7^'��)�~��Qo!�_E��pp�>^��u�CY�t���B����kn��i�U{�X��yU������7�������w������Ct�z���9���9wr��Zxk?0/@����b����
�~�Jp�?�/�W�a����/��/,NV���y���6d�1�\���bc���o9� j��
��?%�����I^B1-�_����>�����r�Kp�*��(�S�e������T�<[����������OV�L�\�DY�d�g�r�s�����i��_��p�S�����$����O�.�?�X�x�g�	�l��%����������O����Q���K^B��@\�\��z���XJ��'[.y	Y>�n���d��G����Tr�d�%/!�������������0�EZc1
IU�Y	��� ���<b�CZ����oX�+������:����+�7�Z���x�<�?���4g_��_�91��?n&��a�����������S���!�������>����#_��j�v4����?<�
��z����-���w>���������)']���_�E{]�/�b������	zv�H���*j��9=��cl_}>��ki�M���������>�"���I8��7Z����c5�t�2����/��mX���|=�]o��e
Jy	�������(e�&�=��!Wr_��k|��v��ov�'\3~�.������J��~��+�es{��V%y�a�K������qwKy�7��]���t���~���a�Sb� 0�o��'�5�b�"]E�?����Z�������l�g�;��C�����\�j���������)�������G�K�l��G,hHk��U"������]��i}���G,p�5v���E*��J�w���l�������&T���@�[	R�:�#<�5v�s�M��+��!���u�G,xHk����'�P�'V�Cl%He� �X�������O4�2@O�z��J���A��!������hBe��X	��� ���<b�CZc�?�?���=��b+A*[y��������	�zb%�;�V�T���i�]�\�D*��J�w���l����-}�K6�����Cy�����������2�����P���D
$��F}�?��f.�^7
#�D����x��=���V�^����|��4SN�^��S����>t��h�M��G���������r��5iLO�}���
�
��|����9f�|�W��-�_N��W��J�����9z�����1_���h���
t�f�So}��������i�5{����JZ��fra�������&����c�����;�Vh����+'������%\�'������/WG�v��eYa��zGH��
/
��_�a}��C�)����%���~4u�o8���>!�-��4�%Z��<_�-�����H��q45��A������:�g|�|�PO,��a��oYw���q|�zzm�W���fv����a�����4��b��[V
r�z�p�:��u��''���	k���a-/n��^)��N?*��1T��mRY��_nx�x�}��� q�OHry��\����Ji:;��r2���]����������Q"��������L�����W�E�k%�$�2f�p��m.NC�\� 	��"�)%���e���?A.�L����c���u��B�#�)%���e����A.�L����c���u��B�#�)%���e����A.�L����c���u��B�#�	�d���G��+%��"Zs�q]���7`
D�i����/����(��������
k�$��f�ey��M�'�<�{������<8T��
���m�F�P&��>���������|b�K���\E���_����q?9:����=�M����|A���Q��W���{3�����O��|�Y��=�On7�M��c��q7�E�7}�~���G6)������������f���`(=���q��v�~>���� ��r
��M���W�s���x$����i�/�{g������~^�<�8]"Q�d����!��6��z��n���������9�Zo�.�+�_}��;��TE2�d��i�O���1��\�W�o��;�H���n���;z?�� �4��[g��}.��u��C��x��%��}�[r=�������y��		��HT9
4�k8��+�{�\�~�"���NJ�NX�]�vM�5'T����l�^w�����,���DY^���'9���l�*��,���Fgy��8�q�������z�RV��|��������l���oD�$�����Y��q:�������'���[]f����p��zQ�e}l���iM�����++K��0\�R-r���L�w��_3������y��vLG�������>6�����������_����2��
����6�
���}j���8	R#?WJ�.�F�>�c�Z��	k���)lXK����lXk���hN�>�j��)C�3|j�w|zWi���N4h��9O�A9�y��)
1�M��}�A-Wlp/{���~�}�O��s�����/��-�Q{�|��I���|�v��4p=��e
�xCqj������a-���:�����q�:�]E��O{o�N��	��h�k�V��~����d��\oMn��&R����7�ecSk�_���)�~��A*�V
��ZNX��"+	�#$Ki��n�h/9���w��>����'�������>���������>����.��<4��z�n�c�:�1.T�����L����m�a�z�JpF�@6��	q�*������;�[��s�J��|%xQ����U�����v��
��W�B�L�6"��?�ub�M�
4D~��U����k�_�O�����_y�B����M� �/������������|���d^*N��s������M�/��0��>�\e�?'M�������G������V�r�I��Q}������W|������������E�ol���V�d5�.�������G�_����]!m���'�����+��,�G������������
q���B���������������1AI�f!�`�X(�G���<�"z��16����7�����y�P��d���3�
Fe�V�+_{���w*w�����?����R�q����
�C������_
���\~�^i��VaP��8���6�����3��������k������m���;�n�	�{^v��>#��	h,��}�����c����ZpL=/������4y��PCNz�W���fe7��]��~��<n��]L�����y���L�m�J�a�U�=#�6���`�JV����2;�,�}�������W�k��uu3]N�w����Qz��/3���y����sy9ANV�c�����c�����M������_�?�2���O�5�M�n(Iy!��k����l���R��Y�����%x-�x6_E��&�����=����#Wr��.��E=���!/�Io��&�@!/RH����o�YQh�/l��u�9W���Y~�E~5	�c�X6�b|��+N6��X6���e�,�,��xd�"|�>�5��������?t"O��+��/�'���E��
|�k��,;��D�nUW��_�O�����A���$��X6v�����<���,�H�@'��6���I�W�l��]��y�U]Y~�>�N6.�m�#_�8�`�����C'�t���<�"}�l\���G�&q^����w��N��Vuey�E�:�����|M��:�ec�������������	t�q>h���yu�����:��[������d�"|�>�5��������7�wd��R�L)�,7DK*�B���0��3����]|�;��kv������*��r5����t(o,N�k��|��r��th��o��nI�n�����1�������|G/�"��:�k����9=~�z��a����i�����M_
U��9���M�=���=7^�����,�s�~�^�����'���`��;���W��c���1���h�w�7�������[6gx����)��������7�5���HI"�a-���k�\]�7�E>�;���O�S�w���r
������=���k����?�t��d��=�'B]�_N-o�Foj��!��W����"��X����j�6�X~���
�_v����*=�����+�i=i�Lj��9���I���*��/h���}%�U	@7p��������??�=���-�=�[��&-�������^y�#�����������-�����K�m��?���# ������u��q����������v3�D��s��=�mW~+�}7]���}@��8w��5i����iE����	�����F�~&�����
/&��Y�f�D~�BE;��-W]9�N�V(i4����/v)�.��<���l�F�Y�����DL����;}���$�4�������, 3�%��+e��I�BnEq����u�3Y@fKp����J&��	i�)&rF���d�I,���R6*��/�&P����]�?�d&���J��d����@�F�b"gt]�L���\�*e��I�BnEq����u�3Y@fKp����J&��	i�)&rF���d�I,���R6*��/�&P����]�?�d&���J��d����@�F�b"gt]�L���\�*e��I�BnEq����u�3Y@fKXr��9a���	:�
�(��`��X.���jR�����
���sN�=9m/.+�r?�O�~����p$OZ�+�A���l������S�R��7�o���[���/:����r������nXV`D1��`o��N��&��|E����;�_y�S�����
���0}&�q���v��
k�/���U�]����m��E����I�M�8������v�PO��e���Do}1��b�>��
��������Ow���������x���3���	����zuh�K#����������E�Gm�)��oy����-�-�t��q���	\"r�M��G�d���u�r�e���������{\vX�X6�_8�$j�6�W��"%��|���@�LG�"�����oRG!S5|����<F�����.���m����k2"��v3��#����&���^.�v��6����U*.�x��U����$��H�����������Y	��������6ki>][a��XqS��~e����������3�AR���Xk�8yTb���?����>�8����Z/�)��%�����q��(?��[�w��,������?�
�t@�!�����Q������m�<�QL�6��d�Z����0�}����4�a�a=-|�YZe�������kre�`,�Z��s�����6����_o��}R[���ld���[t]�[�/']��um���gv�q�?�.���mm���q#���CK��������U��F���A	��T�Ni7l��k�����_���q����RS���������������^meZ�Owi����M#�M�7���;^{��/�K�%��5O�����f�|��	5��4b�8=i
�W��Mq��I�<@�G'�Q�6���m���K/
��#�S�\�-�����3�x�3H��tp����!}7
'��T{�Nh��9������~B���V��1�^��������Lg���t�U�1��)�{~qx��S�����9\�-�%��3���W!�7�/���~��u�#�Pj�UG�O�)|& fu��r���������7�5&��Ri��	�f���i������.�r
��|���|��i��l6CBR3�_�]�/����������R�b�H���� �����j�� ��]��9��]������m����	����S�?����x����I����KR�E
���.�?���C�A$���q�����T*nn������������I��/�Kc�D����wq���?�Q�����]��7�a��T�����ATV\�V��h��ZO�j���A����+U��e��lR�����7�k�������lD�a��������nX��zzZ�'��`�:�����l�Xw���� ����AOR����.���k�{�����>�_x���	K��������5:w���GE2$��W>���^�
s�f]��3�q�,]�W����|zZ�F��e0�t<p����Qz��U+�_3��T�_�?a�/����O�#zm��i_��ktX0���or��F�����m��w�w�7Wi�V[Y6�_�W�]�����:f1$McL��B�R��Vid������Ar��T���4
���A��|\�|��m�V�������r��-HeC�4d
���s��l +�?�8���|�	y�6�:C�4t
:��J����������o�s��<bR��!i:KK%���@Vnjq�7���A�
����4
������[^����g������7�|��!<���*��������bH���b�������Ut�U��������][���So��Q�}.����:-Q��7�n���������������?��������_�������UO(E�+HP���������OO��n�I����_��f#y�&�gK)������m�~h����_�����MNX�KP]����5et����	\��B�Q�!�t�����J�#e&����|��t�����7\����p}�p�=>M���k��E�&���kRS>Y.��������8��2��g��������K���$KO���������~ �����H��W���R��_H���)��q,O�q����C%��������b����K�������?��a!���i�R@��8�'��}���?�}���Y��K_������(��P8J���|���_��c�_�6�����i��"H^�����������p��������
Qp����2����j*�uW�B�����
o9�l� ������������E�?��Vt�6��)����U4g���=���|5���6������>���mG�����f�q����r�s�s��������?��T��Y����\|��PQZd�����>���+>B��?|���������?T.���u�(-�����?|����|�Q9���S�T���_�������EV>���or�:5�"!*\���:/=�P}���C�JY����y����}w	��MU�M���jT��x�U��k��0�
���m�W���C�o�H�w���.z�Y�z���j����Z�Y!Y�(KU�z�l�X�w��}1n"��b �$��Q����������%X��i���;p*e�%
��W?���H(�����/�8!�ce����Of�J{�u������?��j�~�2����?>�������7�_����_�f�<�zT�����_�}���ob_o���}�����_������L/��Gt�Z���J�!�����H��G�n/�����.�;�/*�S<���y�u������A�Wl���b��s��s�G��Y�����o�{%���
�j�M�5�FM�D_��D3����6�?�ik:l��Kt�D���[��I�)����~�i��r�%�������o��_���U�D�?@�U:��O4�FBb		VD_K]�c9��]��>��v�>
6�XV�X����M�1]I+m+�����(�$[*���?�$������h���v��������_��	����H(�&X�	UQ��������_��Ql'����^$��FBb		��_�$��ANm��/�=R)��<��2	�%$X��nj��������/K���;�V�q�����hO��
�%��i
%�4��C��e�����oZ&9HZK~���r�^�������l�2P�8.I�N>a=�7���J&%��(s������s����I�$���x�����?�7��T��M��������|�q�s�����d���D�fS�@��b�A*�DOb�p�����/�g�����6�"0P4���������u����_�����]c�C-
O�P4�����_���n��u������k�3c���i��� AH%�1�,o�	'�A2}x����tH�,f����U����{@�*�����H��/zS���H5(������\�\��u�|V1���H��O4��%�1��F�����������E>���|��n�����_�@�o��L1�J�:WW��w�����z��t��O$P����L������/��|R��������������q��M��o�]��NX��.P�P�l,b"�P��XQR�i�����Y�������]����~B��������BV"#��������Z���X�������?|���_d��z
x
�!�����������?�M������x�8�����|���/��0O�<bSsXkW��	��?T&� ��]�Q9��q���>��B�#i�5��a�����S������+�Z�G��9�<��M56��Rj�j�E�i=�n�������h6x6����E[M�\�l:6;v�S�az�z�����Sl���q��������|��l��/�QH����PI�l�l�����>���k~��_�1�����I:�d��l>����?>��������|��l���QH����PI�l�l�����>�.+�o�
k�lj��d%N��S��!};5�8�?$��w�3]�{ADJS����]I��O���'~;=q��dm��?� *�������J�4����O��W����������?�H�:����^	L��������
�v%�����u�k��T�#�5i�^	T��������
�v%�����u�k��T�#�5i�^	T��������
�v%�����u�k��T�#�5i�^	T����7�SF��i�8X#L�
&��z���n^����]��Z,��T��b<�G]�F5?��������{��g&��z���n^�����?b-�v*�J����.b���r�s�s�s������3L�k=�qL7/�������f;�v�X��Q�Q�O�����������|���	�������8���v������X���J�R,�g������������=����V��*u6����������"Zyp�_��y8�@�l�d�1�nq>-�/+����E*���	���H�yp�C�������"Zyp�_��y8�@�l�d�1�nq>-�/+����E*���	���H�yp�C�������"Zyp�_��y8�@�l�d�1�nq>-�/+����E*���	���H�yp�C�������"Zyp�_��y8�@�l�d�1�nq>-�/+����E*���	���H�yp�C�������"Zyp�_��y8�@�l�d�1�nq>-�/+����E*���	���H�yp�C�������"Zyp�_��y8�@�l�d�1�nq>-�/+����E*���	���H�yp�C�������"Zyp�_��y8�@�l�d�1�nq>-�/+����E*���	���H�yp�C�������"Zyp�_��y8�@�l�d�1�nq>-�/3Z���%H����DR�P��G�k�1�q���y�i����T��y�?Z$q^Hi�<���LqSjR&�f8H	cbq*1�[�'�y���M���]��������G5���1������H$�s��J+�$he�����������E�z��r�)�����e'i	*+M�o\'���)����i����T�C��D��2@�8����Z'�������_����8/�:�\���)nJM�\� m� ��T������LqSj.�?�?X�� ����b���Z3�M����������^�8/�6�\���)nJ�������f���y!�������LqSj?��E�����iF�ZmL�@�CmQ���p+�8���t����)�3�1l-�`�A\�O����+���1~�"������h�����i�����
rB�m���Y�X��<c9�81<�/�Sw�>���#�a!�'���1>`FMSEp��%e�:�W�=���H���ip������`!�'-�����5M��������uX��I�E�x��Q�T������O��BlO-��c|�������bi�����oI������?����������g{o���������!�	Yk)����Of�Z�i��'n0�X��6y���Kcj���w�����K�V�v�N��Ej��9-X��&��I/2�&L�~�u�6�S��M��gC�4�9��[��ISRG�-��3�������_�S{�v�U�q�F�5-i�s�>�/�M��w�R���K���~;�d�m��V-`��E�|:��O����/���=C?5�i���!Q�Pd�{}��8zy�(��]�\�_��D:�����fI�s��O�y5j(�It ���K�{I�_���)�w����
�
�%������&�������Y���L�������'P��vtUp�1���,��]�\�\�~��_���uo�r������m���]k���
�;�&����JE��9U�c���|�'���+=?�P�Bzn��4j��e����|�4`�5�w���i	����#�*�YQl�q�������I�x��4�����>�?��W������#�������P��2XI��%�`[�c��������R�T�-���H��_�[?�E^�t*S@CC\/����k��4q�,�;A��08�4��q��p$��[������������l��t�F~?����N��@�������f������w�����p��:����K�w(�N��4�o������)�������E[���-��o�+o����	�~��m�f��]�~��7�?��	t�uw���Km�_���Xo��V��N�Z���Yz���W�Yq�U�f��� ���\g~�f���%�	Z����/������J��wh�,��.�/�,�/b+IS���A����	H�d�MJ�B*��G�g����G����-���?mq����i��:�7�����a�aub�����)�	�������#�T�J?����R��Z��^�k8D�������_��_V��n�"m��m�jO�l����M�0�{��&7m���H�c*9��6����1����qm�$U��'���o�	����0�z��2���?$���W�+LF����7��/����Q�jcY]��!��m
�������?��������0I����<�?m����n3��
EnU,���y����@|]�l��m�c
X�������'���G6����;t����`��ee�]���:�������J��FM�L����Z�w��?��6�;h���G�D�$���N��������������h��
�����?�A��H������b��eq�~�?9a��4����!��5|}<�5Q/��7R����C�?�?�Z4]���H�
��~B���_�7��m
�w{�����g�}�M�3��Xee�-��q���OO}4��y�:{���<�iI���Y��7����C���#�l���0@,`��a
�>����:���O�:=���;oGM7N��,�@�1o��;����Co~�5
�����E��o�����FG-^��
S����[.dJrV�(����O��������nF_�&���I#f��P�����}h���1k��Q���C�A@IDATF�n��HSg��\��Kc��K����H���'���H8�����J��_���u,��gi����;mC�l�!�����z�+�����Z�������V�/h��<��v�
%�����������<����'F��e�P#������C��
���A�����6�/�G�!���E��!�O3>i{��{�z+u��?�=���T����n�S`�������Y4%��v������V+6��~��;�����YAX��[�~��_��W_�G5���<������|�����Y�D9Rxa������W���	���w�~k�FO~0�����NM�������?��Y����.LK���������hk�����4J��m��I�����������W�CNu�����?�_�7������W�,�����Z���O�l���X�~J������
�������]�����=�N��!��lZ��8�C<���1�}>���N[��[nT��������
kxX����~����3>����yGcy$���U�D���*]����/�~Y��|h�_�vU��3�G]���?�k��o�/����:���?���NAp��x"v����*�C�8*�hd�o��������h9[NCy��o�W����yd���*��s����a�-�6~�o�w�]���;E7��"���G}��G�ox�F�W�0�E�����i�M����o�U6F�RV<�7O��>rE��j�������������*��B�����H���3�b�+u����O��m~�&a�?^^�P��v�L�����#�r���z�>nz�Mz���C��nN#}��������������'����X��>���=P�vm��^������|�I����$`��U�q��������Z];�uG�F:���v\��Z�%���+���~�����*�`�6-����(�i���.��"o\7	/o]��Z�_���uM����x��o������?�e������;��������He���C��T�c{�f�y��TVa����Q7Y�f���E�.}��pbQ��o��vC�|�%�����������������/�'s��$?����j>oX�����SM�__�,�^�����/����E����������asn?�(w��;�W?����G�x��,��?e���Y�������.i���<����Og������R^����.,��%-����������������6�8�cWS�u�����w��3j6��^���}�71n�7����c��i3i����&�U�.��K�C#������>�k�/N���?��������M��	��������|����~���-?�
��n-
O��.[�w�[����Bt����-���/�k�)�c�J�6j����������CN�3Y-	���U����NX�
��1�q�WV���G:�#�����Vt��>rO���?�'�*��m$���R�*�=y�H��&
<���q��oR�fMiw��D&\�&L�I��%��./��"�yl����Fs>I-���;���|M����
o�l��h���VXU�^�@��l��*t���t�����������O�v�6R�.��X���j��\���L�FG�u��f����u�?���� �k.��#Vh�7�����!� �CD:;\�/�?W��D�d!q^��^�/xD{m���[?�7������������c��$��ye��W�[��4�/s��i�=���H,�6PS������td���_B)����M��s���~�T����/u�_fQN�����������������2�]*����O~�&l�hY���||�~�B/d�D�%/���b��8��f�c
�.�S3�K��r�u����xI�h�|��e	V'7�@�����?15K����G�::ye5�����?d�?y<C�T(e��*a-VlB����f��������w�������6������9#��M$�ci���������-$/����}��>s*�����~q�����7Q~X�#N��������������c��?_��VT���1��WV[v������6�����e���fX��EN��?���I������$����/��}�#a������p���{���_��Xx�.=MC���Lr��Q^(���L��mqQ���S�������T���6�~~��<?m�1=����`����J:����2���l?�7�Y{�7�{��RE����S��t��G�������|;�����4�N�u��SW��������<1�q���V��H&K_��c�s��vX�0sd"�,.Dgp��W��&��}���y���:���|H���4\������&���������=n��*����%|���7���2�d��h�
e������M���?Ut��GRW���l(���!��q[��!�����d�%�����(�G�%�)�����*�����F�;���u	���	z���!����.����]h��c>wy������/�h��:�jN�'L����tq�q���o�����f���/�M����
���]:�k:E&�L��/���2:F;��=�[=������]:P���������#�����N��`m��S�.W�
�_T��VW��������������������h��#���j���� D���}}g�]W�1k��]�?�e0v�4��67��
V����f���i:��������xE�r��|��'|�����w�o��������M��wS��M�w�Di�ma�]���������W}�_�}u>��b���U�������_��\��J���v�fAV���H��i��VW�����0�FtmB ��?e��m+�����X~��h���$-�������|>aMs��,���g���V� ���)�A����|���o���/�>U��BMi�^�i��h��w�������h�����{wjO�X_L��R��z�H�1��'��QOi��X65�?�t`{���-M�>���8)lt�?8n�7d���A�z�Yd��g>=a�t���8��{Nk���y�sP�������4���k��`C�$������n��c��M�n���S��d��n]�_Z���*>%~�nX����GN(m��)5�Ool��������K��y��;�@�E�����^���Vwy�����j:����f�N��O�C�bi���i\�s��n�������=��6���k�c�)�������c��
������c��/�o��������f�yaR
����N�u����+D���u�mz��8��Klp�M����I����:��N�����F���7'4��0s��p����6�V&)+W���]��%k�j;�An"����L�����������9l��������(���q�F�����[�*�[Q^G�z���\�}hZ_�Q&C���l����~�61<�������_�woX��K��
�������
\�p�����\�'�+������������S�{n���[�X�������F�?J���o��l�t�����<�Y����-��mj�>�'�����!�y|��'��7��<�2���5y>������z�:Y�9/�8����^tV\�������
�������*��_�~���n�?��Tg�`��Om%�q�����-�eq�'���OW>�4��{��"k���a��{C~�J�<cf�]+�_���u�7�������g:k���&��W"_y�7�D�����u]����Fm~����k�?����Gd�?���kN��W��9���u��?�+�H!�i�+:���9�0�HI��].��7�����	�|��'�}��@�h^��Eqx~$�C������������_���D1���o>�PZ��~�����Ce���������t�C��]6n������]�����_y����4X���]�����4�����\�&��F�h�,��L�VXV��/Y�[96��?g�+�
n��q�i�A"5���8�t��d��y��nw�(�����W7�����;�:���7�����PI�=�����W�������vM��>p���K��
��>H�pN����ObK;�����CUA����o����c'O�
��� �A/Wz��h�����a-u���n�T���fa#](
��7�����Gl�i�>\p���]���Pw����v�����������Nr?��������'��t2O�O}�i��b��y������������U�'�G�K|���<q������y��7�)�9���1���	�)u����o���<�O����Bd��m�,�o{�=���7)���k��^������o�u���R��^�y\G;���A��#>�l�B"��8]����>K�}6]����1?�lHy�������,{��	L^n&����o(_���@�2�'�t}�7H����I�����<�����o8�Z��li����[��pW�g�.�w��>]>���F�"h�����v�&��Ki�9A���b4���Iw�����p��m�������^|]�kL��_"������i�,TP�TA�)vp������v.�!�_����`}WU���26w��]��K���/xJ����U�]���=����S�#-���<�������F���;�fn��o�}"<���r{������{�|����`�=����F�0��O���U���*��B��c��E�j����C��~[�.|������������.���	��!'�����?���?�`O6�ncrE�����b����~��v��������
�;��7������:~�����4�c�u���>�������C������?���_XZ��Jg�rE�#�����5Gl�_^���}���]vc����jjy�����w�;�mQ��/�a�/�u�M�-��{��#�c��5�Q���z�?l,�/��sx�h�����4%ZE~�z���?D���i�2a��2k���V^_�W�W��6eo���LN�m��/sx�uWg�:"�Wf���2����{��i�5*�K�y�y����
�y�L�������?�/T$�M�d^����o�����\������u���J$���-Q����6����j���?�y�����"�1�8]]��g�6����/s�zR������z�z^WJ�M�}�����'��g�6��U�P�'~@��}��Rz����3%"�����?bT��y�����<��.�T���W�/�����u��������]�T����t�e/��RG���I����������$<?�g6����~�g/u����i����y�b����_�~���0��MV

���|M���2���u���g�5z_������N�[+�o,���y���H�N��^�(|gY�_�����^�_��UK�������w��+j\A�r���*������[O<��T�7�L	�p�E����1���9������d�<�����d��9��������c�
#�a~*mMo��T�oE
��N��Tb�����7�_]����'���]K������#��x�&fe�Q�8���P� �D:�g�=�����3��
�����]-���u�H��*���������9e�O���xP*�_��?u�/�Dv]o-~�����~���ku��8];�����)J�<������/k�/}�ZG�
�H���*��A����E�<zJ;}�xU|�i��7����W���,�Hzb����7�I������|rKh�����Q�%l�f��b��7U^.��E�?���� ~($|��5�A�G���8&l���~�&�y���pzT��)�?�5�ry�����|���O�yS�����	��
�����7�������/x���e�m��_[��c����C_1�xhY\9!�"�z�T�����S�(������;��*�@I5&���H�*~��v�����2@I��	��(sIF�����&�5G�6D���	{P��G��D��p7oZ��P��������I{�JC���M���/7H�S|�#�������/�uS�i��
kyS��J<�}@�
){���e����m��$h����v^�y���MN=K���I{�R��C��c�\��21^��}�M&KFI���>��8�����*�7����e;�%������O�.��3�?o�������k1!���������C��7��E�*����i�]K�H�_�hP����s���Lu&��R���/��4���L(�?���k��5��Y��S+��>������n��B6�e!�!�Yof��c��BGV�������X����������y�R6"q�N]��2�����r��5��
k����s-����HY�H�����J�������BR�&�?�d�������y�9�v�O���_�������>�����7����p7�4O��$��Ok�����G�E�����Vh�q���������/�_}�_m�������-�
6fU����k�8��q~������F<����t���a}�Aa�e%
(�h�j���������,g����A��b\>��7���u�i�x8@`�K��gk�ob��P�������e �!�7�����	%Z���v�Lz��Sly�nB����Q��_��B�������d����
���z������"5+���:/�<�91`�h��Myq6[_�#�������+��V'��h�1�X��[��u�K��u�l��5�Tr��O�h��z�{H����&�������k~h.��v��F~�sF)�����)C�t����#����0�I�~���j���n���h��h������_�����H��O�I���v~����|�?��j��J�9�������*��J~?Y��_[����?�]?a�dd��_���YE�����G�?��G]��8�����7+�r��-�ee��)op�~�������W��M:
�w�=^,�:U|�Q���e�1��D�hP,y���_�������d�b�#�w�)u4���m�#�������������|8����P�3d�g�m���:����u4�oQ��6W��8n;����!]��P����CP��(�3�T���/Ak��������.�����2������>
i�LKo��5$�,�%T���W1������z�������>���&���uq������{����j3���3���lFK��Z>e-X���(��u��S[��,Z~��Anh<��[��h/b`U�%���?�hZ�����_��.�:�%�������=�4�|N6���J���
�2��c)�*���{a��+���;	��>{���&�1DM��O����o��� =I}����{|Q������-����u:g����
�4�
����P��uK�������wHX�72���\�Ax��%_��5o���2��->8�V|���p%86�q%���=_e|�����O�2-����/�x��nX��?h��L�"s�z��~}i{>�����R8Q�6�7�O���R7Z��v�������1|2J���`���\��7��	���kw��B��������^--p�;�K:T0�����C~�!��7�Sy���s��-|
��w��k�����C��^y/���<�ez�~����?��
ayh���������6���y���KM
���F|m�M��v����*|M�0������:L�
��W��L�r�����+L�����Q/={�}i5��{-���(oX��#�G�@���=���a�B������a�Q��8�������x����`E����]�b�a���a�5�4��������b{�-���(����������9����|��{���m�;;;[gp�������*^��4���9�*3u�����]x�s�3��j�~�J�}�E��?/&,������s���PJ����(^dT�>�o��V,?�S����^s~��W�7m��a�������s+��<��+}�?{�on��e��^t;\���H���l�����/o����^���C��[�}�=����E���l��[x�Y<�Q��v���T����T���"|��=/�������jq�����������/�O������Oy����e������������zd2:lM�Y&��'n3>�?��X/>��S�U�ib1�����@?*����������
��R��>��5�t�j��L�h�y���S]�V��@�dT��0�ixy�e�Z��g!�?M�z��;h� |��q���|Q�A��+~�J���1�-�J���G���{8�z���/�f��J4.8�~t����-65B��w���jb���7����~q�~�?c���|\b���p���G�b�u��6�?�sM�_=��������I�e�U`U6���A?>���Fd+�V�8'���y�<�BC
�9�k�Y�IIq����?V��&���4�t��NF>����?��[P��	�{u�����.1V��A���,��|�b�)�l�=���uY�-^6����G�0����S���������4�b6%^.���KT�����?���%��;����rT�R��<�	��F�:�����gQ��k^p�����o�_k�\���Z��n�z����1hw�vH�5� =�IN����PyI���K�L?�sx<������*��`���_�^���F���|�W�\S	��>���������W���i��:��?��
�	Y����&`}��Q�1��Ty����������:w���C����}��q�q<�5�4�[��r-u���k��K
+c�������6�#����|SI��	��kK�T~���f��O��������Y���?�;��R���R%���O3.\���.6��"� >�1b��n���N��~��CY�������������i�`�y��:���l�?��r�����u!�4�k�������6�����n������&��x���/a��K�#q8e���N�B�k�����<L���L��1�?�.��/Cs�������r�u��~'���25�a��M�u������8�����U��/d��k����Pz��o���o��U�����_������/���G�f<���������:�bP��0��)��&�aX+X������o_C�dY]���&�����V����������dD����)����M�u��������k'�a��Okv������?��5���.`J�Z%�m����4��'����O���&a=��>^-aM��`�z�_��8�+�k+��
�v[�����YX���%��T���z�?���/��
�y���5����V����eb��/�O��M#����V����C�?������X��T��)V���KW�Q�"��B�*���l�C��?�m����
�
�Ml��y�'<��{Y�;�=������'��'�X��BPmm����
p�mM���
k�#	���Z��wg����G���r�F�M��fN��`M������2�_�u�;*���?C�|dt�R?|�#W8���5Ca�&/)%i)V�2HG��4���P�����4�w=�.������������1���6���yw�dq��Wt{B]����������O�Lm��z����l�����R�a��L%vV@o
������c���wt;�c������`�����1�2����\�Q'H����C��En��g��Q���v��S����t2�o_5��(�ir��T7^��
���P������8��&��K��?������_��&S����/�`���$�������F75���$��;4���������
�oi�A����/��P�?��-� TO��y�B�{�`{(T��������Q�l�������*��-�E,k�?�������Hgq����&e��� ���Q��i)���Q�^1��Um|��l���>\�r��>������d����[n��"�>�}��`��>�������g�^B���A*]���^a�8����\p�p��B���3}���d��ec�U�����O��������J6<��
������j��x�/�������g+���mH
����f��FW���������{����K�F���U�����YJ�v����	�a�]������y�m����4�����g�AE�bLu�����������,����|)Yn��X�dY��7D9
8�\����/k�q�������v{�_=��'�9��������>T�oy���#�����l2�O�gD�K=��
W.��-9wx��b����+�d<��<�vc��$-��?"zs,�Yu���o���d�O��������Pfy7���e�u�S�7�L%8F�7�K�q��
��PErs����2�[6�L�s���_���Z�#��g��x��������f��A�3VOJ����81���ko�.����{mW���)��g�Y&^��$�'.>��8���5������_-��T����N^���a�v��j�m�����|����������P�_l��1^���	�]������{ww����q��:�i�y	��S�r+7���X��qa���������N������������;w���9��O��2��0��������k����O��7s�p���i�>��-���l�r\��������b��ITu�pN���N�7Y�����k��o�<�T���F��i���SfZ��J��N��R3U����G��������	#K�+x��5������F������[r�O��v(�������\7P�E�g ��1tpn�*���W���4��&T�S��O�`n2m��mm�F�������`�O��>w����{��48U�e3�����B3��\~���6�[v>}�
,K?6x�E���|��������;�c���}c��}������8��J��a-\�-�����!���"W1��e3��fO����&T� �KX34����W=���X���~��|��/��~��w�9����B�]��>�vZSO/�|f�a��d�������l�M>��M��V��"��|Wv���F��On�|��0l�)���C�\�4���xr�M�����e�iP4��/f
��3���
�#����	�[�����������{�#O��!YH�z<����DF���@
��>�AU������-K�R�Z��HH��
>2w<�����W�@-���x�c�,�����q`���,���7y	k�*�R�����vH����s��~2�|����[Pc�^u�~���� h?o�Du���*~�e�Sr��G��!�@	eNb��iy���Y}�./p���>��O��|k��_����q?��
P]�<(=��	���D�/��7���Y��^}��
��c�C]������jM��B�V���a�r��rEe*���5����x�E)����
�Cx�hv`=6d��:r�X/�%��<7T�e��<L���m �"�.��H�	Z�"l���p���������XH������� ~u�y������7q_y��TM#�o=�!t_l������,���-_��	��b����@���@����iw����������k��a<����������'@C�W��-<�.���g�Ep�B���sAU%~)1LM|v�����AB����#7��[G���zl���E�����4���aH$������X��UQ>��G\]x�^��|�������2�2$�������.���_/<��s�}��3qa��0��K�As+���#�Y�/�������n��/U��g�����(�I��a���������6�����\h�9f��u����=��f�����SE+3�mD�����]���AO�[>�a���E�������3������2�X��^!���&nr�9��w���Rq8�������q�R�4;@��Uh ?x3�z������-�����c���q����=/����>� ����=��!8�������75�������v3����b�-���_��C���V����*@�������O
#p��p(1���}0~|V�N^z��#�Wj>��7Ee�h�_�_�����o����>������xN�|���q��y!%��J�/@�C�������R=��5��OS���w`72
G@�S���N��`<����y�^H��'�|�U����8��BPc���l������?�W�9��'j��:bH$a�Z��Ju4e����lu��1�i�����5���f�Q�l�����=w�\u�7[a)���e(
=����5�]���d�xf<�u����9�`���Cn�S�+��[���L2�=�"���e������w��oJ_�5���r���Sp�f��ph��&���>�%�@���!�������4��L�?^:�83������(�BF��������lk�_i��/��&���:\x�@���n�+��0�k��=�Sj���'�E��)^b5������Bc�c�R���mm7�p�����p���M{�J���?��w��fx��UbF��y��e��k���Z��G��x����E��?o��m�\O���_���uY������v����~���/:
��������������4���J��F�o��[\�O������e�vNhi�;�?�����c��*Y��!�5������3=���\����+��o��/���I���/;���`6��-�?�q��g�U��W]v+e����[���4&�����U��)�����o#|�G�k�>*��EhR�����1��O�7� �����=1N*��������$���:j}�V�By�c%�d$��*�T�b�0�a&�G�@���<t/��%����*�)�w�#9g��}��o����x���;�u	�
������-.�����M�a���{z�	�P�+!A2�L��x{n��#���7���$�����E&��!�M����^��*��2H�C%s0!�z�3?�Q[���&a�u��%�������{&�[��w�������z�9�mI��
x���������2�L��7Y���#6v��}*���V�|�,�J�����-��|��������-�6�G=�������#+�/�?���"�k-�P6o��2$����T�Y�Sq*�����R��~����;n�Z<�mu�%�����O� =����?|�����`!������+������iSh��8����|�mQ�����C��*�c������xW�����8H�y�D��L�����`n0���|!w����i�7|y���'����#F�e��?J�w��l|�����jq{��
��?�0��D�'�f��Y����!���!Y��cs����m��g>/�_���y���0�>w945�M>
��~��g�I���7^~)��M��0���z�P�����[��Ky�,R�E������7�A�C�z��z�^u�W�����	e���b�����>�z+���
�C���'C��HX�n�S�Y��q��N�H�~!���Q*����#���|AW\����UF�_�3\l���XVg��K1=��9����q�on�(�Z�����Vo��\���ZU��L������?��8jO�S;���
elf�q���^=��;�1��9��nx��o�>^N�7�7�;�|#9�� a��?�v.��M[�_�g7�{��2r��~�C���������}�?���Q�O�Zj�d'�?�����x�E����:%�xI�4���m$��vU.��i������+������z�?S����b�y�s��/`~�lEBQ��[����o:�_D�g��y\�FT�"|b_��]����0�0�e,3���#��|)����ey��8y����<���$���������@���]|!��e�A�\`m�"�Uq�fX�������������?/����z���k��m�%�A���M~�9Zz�F�v\������Y�,6A�{/�����u2�i	�9O	����8L����y���������y�n�IC�����n(Q��y�q���*�g�i�O�Pt'��*�?F���]=��"�����;���u=����m��q����\��M����_s���|�'��M~FX��m�Ye���V�^&a�\��h�J�s���f�ald"[[B��5��k�s�;�cN��W��5�O�WY���U����_q��������!w���3��i_��9�/>W���
���.&cM����`��yX���K�=���v�����x�2��C���z!�\s�Y����xN�Bj���P�Q�o��8X������[��������������?5���P%�p���\��(�V��q����y����O�m�I��TV6?��Ej�a=����W������)q�������p�o�~��_���h%��_e��s�J���O=��<�������/����L�>c[��������d�b����x�{b��X��m�P��;��Vp��g�a�r��
����t�vnA����PJ^�����y��c�mN��?��8�����ng���5�zC������Q�^4��������pC�W��[�7�����G�)M8������Ip��xI�MO<�������Op��8�?�a�H����[o�Yuy��4����n���+.B��������������:����r�T�C���,�������o??[)I#���3�����x	���b���@�k����}u?I6�@_�.�c����e�{X��	�A1����cn�;;��:0'�<����^��'��Qy���~Vg�67��pK��l`�r-�$47����u�7�oF�M���<�"|�P]*�yKr���L����Jk^v���pE�P��
��q����a�������������[y���
>]���1�������^5������w��e)�*�*eTV~3|���vg���w?���c�_a�f�T�G��|�5KT��<7?q��p���F?E��R���:e�7����}r�;n<�R���^x��'�.S����P	[�JxR���
��>�"�hy��>��������r��}*��_K�WGE�A��.��=��_��0^lZ��,X]��i����v�i�]��hy��y��c�,X3�5����,*U)���R�V����1;�g���_8����S���n;[J��l�4������sz���E2%����[��>��5��GNb��me���1Q#������o}�VG���>���
�1D�Z<��]�)�L#�+V1�C��q���9�y������W���}���u�t"4��r����-vJC��
I��\y�6�������r���U�68����hj���OC�����4��� Z?���p�\��C�����V_�
���(�^*o1���K��Ni��p`v��o��T��L*N�'�?�8���W���V�F��hhx��4<��5�Q���Ey(�������}�����+��"82�v����q)�M]k�9�9o��$���_9h<�d��A��V����R	����|*���o������8<
0���=jf>��?x�m�����s�|�v;�
��m��z��������������)}��>"�cTB������U��2��7Z�P�u��6���Nx�\�(��^B?��������q��_�����O��'��4f�O�������/�G�YL��g�D�'�R������~`��L��P�>p�S���Nw���'���X�$���_�������Q���Z���|�Q�?����v��4�t������1��.��Ex�6�\��x��w�����������������X�r�Z���#��D�k��f��/6
S�qjq�y��G���0�������g^�h�������:���������]�;�5��k����
���c�2
��X�V�V������=��z����<�Y��Q[�?�Kn�/�)�<E��o�Yl�"l��z�Y�W�����U>�3�7
���aJ�j��c1���tG�L"Z������_�n	���GA%%'YX�p��lo��5���������)�6w���]�����G#~�cs�-"2,d�����B,�aM�
[�r���V�M��-�0��'&>�����PI��?�j����*��<��1� &Hx�6����|~T�9��K�zL���_xu��qUFu^\t���F��8t�K3���GD��~��*P�K�)kl'@IDAT��;�{���e4��-�s|��a-��� ���2%��?*����ouS���o� =3�$R�g���q$��5���$�x�n�c�q_~�]�Ql)~����,�����A2%��u��`(����� L�YUJ��)��i����^�;U���U*)�%am�7"�G\%���]�����Y<��*��N�e X����_���r���?�����P�������q�o2�<�#������ {��aO�@q�WV*Tv�_	D�^jo��y	�P�S~!����-9����]����������t�$�/x����V~AB��?����j�W.��oJ���M<�;�{%��+���m���JT���������4�[y�ag�<tO/!��>R�e��o�e�t���W�?����������on����E&��1(t�K�<����s/��2�!/��`N����!���
�'-$_C���XD����o��-� !r��u��_5�\���_M�7�ZVKT�9���#�Y�F~y��h�
�]P:�j+(�����P����F�|���B���������'��p�C����b\�;�,�����S��*�y�%X����+��SK%����rm�5���,��\��}�=������Y��H��$`�f���W_|A�W��5�0\���8�G,��������Q��O#�?�#�
����.8���	Z����g�.]���|��:K��H\���	J��
k��~���fF�i�o7\����>}��#���y1�4!|��/�����,��;�����[B|�����w�/���MP���^��F05lPR���g��XW�v'7g�n���N��<o�D[�mF�_��l.��K���35C<��{��G�m��Oqc���8^�.K#���t�����:�#�S�������=.���5#�
�4�W>�����1�����*���4������2	�s��-�?�w��]G[C[�F��i����6����/�g�����l!c��9�U���W�����r���4���������������d������;��?I���_�`�L#�67?d��������Y~a����W�-��Iqc[����h��q�����������n:h7����Ma�p���d3]��a.��`�����������F����f�oj�O}�������J��Q���!�*�+�*cX��\.�'v��e��O1|��Z�_{��"bEA�-����~j����_Y���_�`���K[bm*V��w�S/�JAJ�9�#�Ch#������+�*K#�������b_�����_Y��Z������5vY�����P�b��b�M�1",�:�')�(���]��}���TB���8�}�"6BO��G\~��	>|_��4��u�O�
�_yv��������5U�Q�$N�8���*�A-�p7�p��pM���~�A�y��z��{�������B��~�W(7}�w�����7,^��tg����g*�	-N����klB!������w���!�U8�V���5������������m�^�4�
�y(�Ji�E�!^�O������TU��^�����[��������~��/�-��:�mN�����g���cw�W�q��6My�-,���s!w���	k��������x���8���Ui����1���f�&�M��R������]P�����@����I�����.20��P'~6�����O�����P-O�Q�F,�F��r���SB����qo<U@l������q�l��T�~o���k��r���a�{�xg�T�%�
�5��P����������L�-�*��j�?`m�*xOB�D�i��a.�k;���*��&����^B��v��>��\��+%��1�{��q���d�t"c��D.31,�eW���y��g����:����?5m��C��s��3���$�f��g^
�A���!��}���e-� �_8)��|���g���N����Ecp��+��p%DI7�p`1����r3�����5%�!a�b���[�]�{o
��o�9��Ly����]����u���'US�GxP�������.�M����F��p��w|��<���qY����Gi�{�}hq��S&5�P����?��>i�&|[�_m�� �e��p�H�[���������9���j���i�*q4�@�z�w������o���{�PE�)���.�s��@�������������������?9�[������7C)�D��1�?�b��/�u�	^�:B��S|+P�x��u������8�pF��!�{t��/�&�]�����e)+��7���~����F������gHuXu^�
�W0W#���e�c���d���<����M����������-�,~��PB��������8�n�*-���-�7H�+�|��!��,JC��m��4q�G���v��oJ_�5����������4�����o���z@5$��uhw����|���f<�X��*�w���i��������ED<�#��4�3I�4������Q������&�����w���.~\�~����/�����<tv�������?�a�����	�W��<�Dox�s����?B
�`�v��t����������(<�y
4��q���F�e�X��+��f�]��z���a�ch:U��P�Jr�i�����%�s17���j.���:�N�[��]��3XK�^Wu
A���q����7�k(Kk��.�c�[J���b���X�����P��?b<xx�*����O����oR�?������������PX�������ks���{:>Ds����/�����P�@�����.]o���~?�,��T�� ��4:�:�a�q����S��?�1��L��O�o�6,��6���/HX���?qC�	�!f�q�[��\
�[g���x�u�������Ng�b���j[g��=����	���Y�tG���������QUo�BU�&����|�>=kI8�q���I�Q�������������:K��l�������/�����X�V�Q����=�����J�u�]�65�Hy;��k����+���o����o�� ��'�{^x��*�iV��7�����S\�!��%i������^�0��tU
�CUF�2��sN�y+����sO�{�*����hK ��������m�]pH��t<@����c������lK#����/��{.���|��P�K�J�������'�
\6�K��p���O�?J_�^T��&T*
�9��
u���:C*�����x����z���]F��`������bB���+�W_��f���-O����?���?�����?@��(X�"�n4������P�i�~�B}���}����aV�H��+P���?�	���%C�h;��a+7�X�W?���0��J��%U� g.l��x	k��.3}[*}7�Ay	����n�����+�7��;��}�-|6y��V�f_���;�m�����A���&�$D���� U%3T����$;�/8t��?�or�
�Z�	fz�s���=�F �8�����c��������}2�!Gs��
'�4�`��o6���Q��?�~�X��KX�o~#�?�37�?~�^Yp\l��_�7�&�S*�TQ��q�.�9n)��=
��7M�0�����~�R���������������������*������j��6�Z~���R�	
��qC�ch��%�P�����x�������	��A���g�����>�kt�_��q�o�\y�/���C~Eh$�������g{7��0����@�{��������b)��o��������
����\����f��W������S�g�������_����V�+NY�J������-��=���R+����w�c�����,�f��������SlN	k/a�g*�&�w�l��{��;�$�q��~|+�������_e��-g���}�g�)bw�\>������\?�k�0�W�;��7%����������j�ot����g�~�k~����I�������O�����q���n�����P�M�7�w^�w�������g�6���?�����J��@�Y4����Oi���#�������.���c���Ox
ly�ce����x���<�y���!p���,��!���N�����!�f;����\����O��Sv�V���/���yq���`��q0�A�i�<�y���{W����[��i�����h�,0���E�KNLt��������'������G���U�������Zyd��vj�{�e���
�h�����?)�_���O�k������><�Q��h�p����W#�?��e���l�\s-�J���d�R��I(����<.G��3���ys����4t����/-�5W����o-;����P���m��)^>�|k�����Z�Z^�����0��
������:?nD��AZ�T~S�*M������iB
�M���(e�&��f o��������������x�s����A�-&D�?��{���������a(����'#z��*���c>�$$iw.$`:�]�%���V<��w!9�w�_x�}������8%�	��/��[�����������������r'Vb�6�k�����}�������P�`6���!$�+�#����9�-~���x�Z����
gE�6#��{��v|���4�[)�����w�����'����K�(�;!%|��o�������O�i�m�e�i|�DHb_������������K<R��<P��<&��P�3q���O>�'>a������^�^K�m��n��f�zV�����G�y���J��������c�j ������g_���MY��van6���7��D��\o���
Y"���_�&����'_t�1����}d,z�>����'��}���G�m�~x�H�yl���(�s]��
�Y���������:��R��k-���������8X����mr>����m�h�{$_��`�9�+,��pL�K�{��?�
^n|n
	v�!�
��*HQiA�aj���C�������?�>&����c�Y<��~�����{���Pe����5�����P�/C��=��f��]�����[v�?����
O=�zA��OL	r�.]
n�~��lGT�:6�g���pS����0]w�.�`��92��A���-F1?�E\��mT x���%{
���E�����
,J����C���m���o@�����^��G����O��cl���1hM��+����0���4K�6��Z�����\���"/��z���
��82g�����<��B��l������OVZh����/oI��j�����
O=O0�2B{�?������b�[��qn,�X_>�A���A9�G�Jh{K�$u�W���6��_0<L h���u��G�����9�y�=��#�t��yqV����/k���t�����G|6b�;�����8��4�M����������\F:���*�&�Y}�Z��8y	
��`l������x�c�i���7ml�>���|�#�������p��������*q��+�=�����v��������_��k4|�6��h�Olq���@5�1r��,ek�/��;�����X������y�
���(�����+`��5��4������;p�-lji��y�����������������HT=H��1�b�/��c��r�-P��y�
D����3�4���Wf�W9����C�Nn����Z��J4}�'y1��M+@%9�C����������}K�	���}f��3��X�o-��,��?����|��r1�\���yq�4�rp�S��B�n���Z�u��_����N���p`��h��*^��
5]m%��:X��0��|��z��i��5�� ����}����L��s@�?��{�7��|�s�F��q�H�����_�=���H3���$�D��qOl$����j���b��}��>����e�G�phj�sB���x�����y���M�<l������X_gC ��yX���+hOi��������~YF��n>xwo[���i�Z�R�X�s2����L�=��w�M%�y���G~��?��#���O���j�\������p$�/���Q9X�����#�z���c~O-T�����s�]��z������f���^���'���S�I���z�iq�y����4X�������]p��3�K�906b
a�G���q���/.i|���q|��"��[Y���j�%���_������3o��
�XY��
���6�\�+�-��R���0���Nm|l%�_tul��U��A�&���J�fyq� TY,�*��>'+|�B�$���������`��������C!v.u#�'!�:��Q��?��'.�;@���XH�������8�����\<��Q{������4\��C9���%����gg�
SP��o���8!D�����uMHX�m��������G?<��+����u���ph}���W��}������lR	mN����������#
��!�	�����t8h��3�	m)�<����'x�0�7N���_��D\�S�<�T��L�M�������B��  W���3/n�w�p ���\{E���������&���>3������>���� [{9�O��#T���f���C�����-�����������U���Oq{?n��=�������/v����C��lsc���B��o6�o�Vp�����������7U�1���h_f����u�?�������3=�T����cp�D�y��=&����06������z�AU��
}!���e3,x����V�����6�.&�N�+�ao������p�����oo�yHF)dN����/����Gd����'!����'���/��yJ��}����e�����T�K���F�~q\�?[�8�3�����*�x(��#�T;�1b3=T�����?�����[����/Z!�� �~�������v����J��y�;�������s~��Z����B�@,<�-t������5�Xo8��z��K����X��h��p�D���������f{[�����	���Wo�W}h�i� -"���ZM�v1������K��?#.]���nzl�Q��6����o��������;���Z������Gm�p�����'�<
��9H-����y
��F!���O�0J=Z���c���KJ'�	�>�ICq��ch����Xxh�"W���-�
e>�&�_��l�6��o������Q��������3���_��i��?�����������C�m�=�����Db�����������l������br�G���(P�a�y�5�@�
/<�����=h���5�?U����Q'W�������_m�[k���F�i���
'��o9\�?������������_@���������U���45�O�;���r�%>j���z���#��pA�d�!jN����3��o�xKq���p/�Z����}�?_u3������_y�q����|zq���_��w�����F���a�l����f�����5f�����6?��������'���qP7OM^yc+�/�����w����O����������
�]�~i�~���i(
��F�~�z+��|���U�v2��?��l�O���WS\�*���/���Ky��3�R���!�a��1��������h����C��K(�g����(#�]{���eFGu�[������2S�t���K�m�	M7�����J�Z~�b�|Ul����(�x���c�f/e6������d�������W����f������?��H'�];�u�Wa���6���(������F��J���y0�z�y��x���Y��M��oP��;L���o`-�%k9���������ko@�����T�P�7�X'�a�"����l���^h?�C�LL������'}P���U�w3t���h���7���d�M�Vy
�eqY�zP����y��;&�2T����qI���{�j����@	��8|5
}A������� V�8<�����2��d��B�q���5�*�}���.�.��������/x{�8�N�%L�x���N��[�"a^����]pyb6JS��$4'\U�7�F��F�����	��Wy��������r��9�t� ��m1+�R[�����;�M��O$������cq>�J}�g��i��-����?��������,���P��7�v'���_c!�;�o'c}(%�;��E��.�s�f=���p�x�������������Gg������~�xHp��Vo�����n�����yUf9������:�W=�7���E��-?�:�	8�j�QO��Kh����k���}����l��7}����������Lef�����N���_�������Fb��6|���+�e������6���I���j���-��nK���>��N�YM)Y+�(��2#�����K���V����{�����8���e4�?Ss����o�������X�P��'�}z����C�{-~�Ty��o�5���������t���u�3�#�2q;����}�B��������9��[��7��PM�#�� �u�����=��8�qiB(��!�p�AH+��_=���|��?b��OeP��^�C���<��P4���������in\u����y���7��g�M��o=���������*s���T�U�k��c�)|�|��B�0HUg!��H�m�|C����k�i�J<��1��������8i4��yu����c��Oq����O9��jg����G�����;�s���W>y	�d�K���������8��:�Y��pk~���/���>���\�}AKZI�������l~G������A{�?�|���i��h����W��co��^������8j������|�8o�������������A�b�'�#�����?�.�v��i����d�����0���_i�g���������:a��R����5
-,:�l��4�-`/AZ�v��yI�8<����u��4������@�!q���.8����l6/0C��/h�����������P��Nx>A�������7����_���������iX�����N5}�������V��0���\���������Ot��?��Oa_��^�o���k�X���Z����}l�X���@����"�����x�;BQ�
��9�=���[���?����v^�G\?-�����QX?�o���w������/����������o��'��
�w�������Q�<�����,���?��2��5�m�	���2\���@z��v��$��8���F��dN1�`�l-
�i�\�6��#T~����W�e�W�|#��c����u�U*NJ�Rz�L6�������i���<��j���9�0PS�g�~j�m\���x�u�9f�����@�����xHw�6W������y��OuE��}�����������p�|Jb.�w�~F]���j�����k�3|��4'|8�k�$��q�r���&�g��+���m�����}�7w�����%��H����&<��w�=%����4�r�����������w���n�����+6�m��p���'�%���8fY�����Pq=�)
��6m�?�i,��f���B������SmX"+�J�R������~P�?������iv�(�+H�����J���������R*���_|����7��K�oq���tb5.���0�	�e���b�w��t��s��'�z	k+�V��KAU;U���M-�����X�`������+7�����������9���^.�	������J���@��^�j�������������O7���q�AE5����Ux�	q��>�j���Vp���{�<���0����n~}��'�j
�;}�A���4����w�X�B�)F�n���nb��b�V�u����&���l������'J���v�V����61�O�f�������oJZ����E}���v`�2�5y�EJ/����#%�d&�I�?�]�u�S���a"��&������$
-i���h\$���IXk��8L��/y�����/���9����__�%�����w�g��AZ�&��F��%�����P8b<��
����,�E(Y���>���sv�~1~�5���������o��B�������.���MK��%�(o�����
��j�z�_�*
z{�?����p��/
gm}�E�4>�R������ON>��rR��������O��?"g���`ZS��u��/����g�	��+���k���Z����x1!��
�,��V��(k���-�0�;��"�q&�j�����0R9�.�+~W��O��8�x����go�my�^�^������m�I
���/v34����u���X�g�y~���O��4O�l�V���E�����������m�.���G�����_Y{7%��$n��L����Xe���D�q������������&�_���h�N��_���>������nE������W�w��Y�J�4�Rx�6��Z�����qR�?��m�����������.����&D����X���c��O���o��������@�&Uo��k�g����W��n����9��d�[��K���W���Z���Z�W��5(����[tu����g�t������C�"i��T��/EZ����]������G����X���x�y�l�b��������)���R�����XL��� �1������OB�_q>���$�Z�-��<���H�����~���gHe5��e5������J��m�����
�\��5o�}� J�PbsP�e���L�������	`�|��mm�I
?�?[�-���-������;6��������GgH�A�cV���KV�����KA&������B>����o��?
�k,��;z��<q<��{�?Z�������_������O��?�i�Y=�X���z��j����Og<��;�,����j���o������9��M�o���}\nU+����Z���b�j_�k�]wL�\�k��u�39�}`��A#���6�u����?��jc=�L8�������C�6~��>}7mg>%��VY�����=J�N��w)����b0��?���+a�v������O�=�������q�o���_�b_������S���b���r���^�!{���B$��+7q?6w���z�/=��n�NQ�&G���O�i������oJ����f�mT�G�d�d���E��"Q�[v��V8m��	%��$�/��6N��]��D����^l�?��������R�Z��f��+dm�I
kL����9l�M^������]?�Mj�VQ��j_����B������	>1��o4���b�Q!�4���o��U(�x���oj�a�
�y<�GQ����=�?pc���������<�-5���������{<�Nn���h��D�������?���e������o�=9�]7�^��X���J��C��r7�+���;��{�s|����Y���"Z��������*�o�X1��m�G�3-����<����������U�?����4�c��$����(�^��aV�n"����PH(��b0B��|�z�S/��O|�F���E@K�h�_f����;��oW����eu��l2�?1��J�2�[v�e+�r���a)��B�po��O�?i����r���Y����]�������n�;�������Vu�q�J�G���4BOOU�Zl�@��	��e8[�[�4�������J���1c�w0�������+�|c�b�7K�a��%L�}�W>�>��M���mi�Lu+9w����>^)@s�7Yn)w��}����5�G�x�u��7aW]��[g�E������A�/�_������M�-�'5�'D��},�, Y�L�oR���=��\D
�z;�?p_��'�F�ID0�8�,�|x}�G�����i�~����x����������d�����g����|�0(_���wJ��|��lZ��}zw�m���8f�or��O�z�K�'b��?�'�KL�����x{�����1��������o��������v[���{������t?�KQ�4������~����6���_����2a����s��>�]�n������So���C�eq�;�,���O��i��0�����W�UL������z�w����@\^�q�����w�.!J������w�WZ�����w�o����	QZ���j����|��W�����;b������~y�}���+�^D��*�=��w�S/�g���j�9���%�h&����_��a���������%�CA��c��0kk.��:NhT��U�+K���	�JV��TO��k�J������~pw�����2.���H3�2����n���{��������oZ}������}�]�m�g9��|����\^�S��-��U�C�7�tn�<w'�Z���XA�P���6�b��q��[�	U�f��z�'�c�.q���P�o�l	>1P������g�Jk6A����dBK���7���������}>y�������q,�9�[���n^�y?C�i���|�y�����e��xr���e���������mz����w�A-��O>VC��������_C����0K���Xjg�y���������k������hl����������~�fO-�N(�����������#�in�jm�q���%��[j	�����Q������{w����������ek>kBS��K�?k�I��w�o�>H�r���b�����y�oFs��<�	=��g��ZK,������'a�%�p�W����o�*������:6f�k�=����j��F�����h���D��@-����V�1��7Z�������o5��oO�-��U��jm��n+�c��;�����?������m��C�����LaF.��������_�"N��b{����tkcBZ�]�\H^2���o����x0�H�h���������2��������E�$a]����z��g���v��
��m�-g�5f&#?��p�J��a[����O�����?��.cB9�u�/�_}����D��%�S�&�����)���t'~<q�oR�O���.�SF�Oj��~ZO��wZ�$�[&������&��	��h�8v�$��+�$�'�kg�[�����eE.�( ���g��O*��)���'�����v�����/���W���~�Q�4O��_���-����o����&��J����j�1L��$?���'?6���V�J��QW��������#�
��x�-~��h'�K�G�	t����&�)�G��>��9��$�����v�?��$���o�+i�I��F[�DL�N�#Iq�)~�c��4�v^cl'���D�O���R<���_�����a-�ay�Whu�"��
d��3�x��4j�?�0�?���1P�\y���t�/��D��%�S�7�7������K�.��q�2���>����%���O�?E�!>8L��q��ou�+��0��%�J�O��#�?��+�?��3�?�����S3�4���H��Ywp�qhG.��4�N��4�N��4�N������
k
1y�S[�86a
�x�c��o�������-s'�	����[�	}��_Y��_�VZ�!�rW�������_��|&�1f��t�[�d�����I�'���`B���W+���Vv�����_�����s��;�	~��-]�V<�q�e���I���%��w����
��o��r-w����_�����!���g�cK�Ov�o�;����ao	&���~e���[ie�\�]�������U�F�E�.~�����'[q�]����j�U�/?��\�0|b�7�pY�/?��z��aXxyX�����';���F�O���.���'[Xv9/��W���d�r��H���r���e���d��.�a��a��*����W�r	>1P��Z�,���la=��0,�<�V^e�����U#�'�qS�e���-����������_~�\��a$��@9nj���_~���`������Zy���Ov�+W9��(�M-\���O���r^V+�2��p�*��������2����]����j�U�/?��\�0|b�7�pY�/?��z��aXxyX�����';���F�O���.���'[Xv9/��W���d�r��H���r���e���d��.�a��a��*����W�r	>1P��Z�,���la=��0,�<�V^e�����U#�'�qS�e���-����������_~�\��a$��@9nj���_~���`������Zy���Ov�+W9��(�M-\���O���r^����I�$��Wg���T~,sK#O�-��������"7�%���K��|��<c���,n>7���Q��-[����S3v[�|�8�1�O�/*M;O1e4�\�.����h<�_��D��'R������s��G�sc�a,�+����8���E%��m�R��b��G��}.v�����#�f'�������SLM�4����s3��R�K�O=C�N��c[�b�I�?�9��0������p��O�?��4�[�xP_�ma+�b%�9��0��U�E�8���D%��`�)���b���eq��Y_O���/��z���F����Z����.��8��S� F�R�b�!�O�>c<�8��c|%�E��U�?�_~�5�J���h�O����%\��W�@��$7��4�����C�cz?���qU�>i���o��������-��8~Kq��%�K���@;�O�����O��y\�x6w�?��$�����$���?-�)1��7�����4���'�?1_��	�[�)q����p���_�����\7���W]i�Qx-�<���q�����7�I9a+^�.O����/�?�&�C�a&�;�M�7�?��#E[���b|�N�o�����4�H�/�f�cH���W��O��m������;����+����+�����#�����_i���_��#E[���b|�N��4�jq���!�@U�-7�`�|��B�.+c�0��7�Y�P�|�?�D��T;x��$�7/�)�%�3�QOK�/�L�J���&������R��T�h�Z�!�#���iJ�>����
q�J���/�_���)����G���x�e3q�|\�P���I���A}&�!�3��'N��)�
�����������&�k�E}&�!�������y�|�b����8t%���O�?�]�g�"?����8M���7`.�[>n�CW�?��$�c�E}&�!���t������a����+gL"�H,��a)�	���e&7�TS�7>��l�g��'k�$��#���7�A o�g��i����9*L�������8�����%�K���<�&��>e��W�������'�c4�/�����1�!���.F�a����>�����5��W���@�?�����4��h��;�4�`�(�M�]i�e����+��4�2����I���G�������kc:����������[a������������7n�����z/��[y�\���ws�4����	������C����������o�:����������Aa:�	��������=��{�������o��	����V�31�/�_�N�������	��S�K��z[�?����$���o�~`�`	��a����4����=;��K��q|��������_����'���������i�c��`_���?F:D�;�����2����*_���h��X���';��5}�i��C6uK�7���1���~1�P������X�M��s�mO�����'H�R>���sVYX-?B����J#)�My4�Nqh�z�9hC���������GEX��6~����	~	���F��D��F��'����%�+k��������_��1����e���/�������H[�h�U���Z~������_���]�gp/S���Z~��$���{G���gR�K���6DAea���M�������E��o�N1���z���t�����1���o��y0�.k��v]��>��	):����
���f���V0���d@%�IDAT-<�	��
������������C>qx�V���H��8�m�w]{���+!�N��;t>�(2�qU�J��|���%����B����'�	�1m����bcX*K��Z5X�������cw�pL�!��CN������O>����������N�!M�����I�G�������G�����C:��a�������zF��������B��� ��+�	���R�K�/�?��C���C?��cw�K�������_��q~�_B?
�'�1.�b��)<�I����M�W�������G�����C:��am�%���v�<v���E��[
���p�<������a�I��������X��w����~������|��||�����u9|A*����h��+�!�����>�n��C������S/t_|]T�>����p>���R���or�������H��N���??���o�������%�W���~��'�����yq_(����9�_���_����W�h�'�����?��l�H1���<7�Em���w�sbw�?��$�c����G����)��>�S�K�/���������������L����
���[���Y�l�z�;�8������=�EK�-#��;t��n�{y������J�O�1��P<������������?�L3�������������~�~��g~�nPm�B�y�������~�����|����G�?s���-:��n��fu�v�����x7����k~���ox|J�/1�n�i�������������_�3�\�gpsfoz+������_�3�������6X������G��w>w���U�G��oZ)�l���v��4e�Y�	~��1iF8�O5�'��f�+�.�����J����D+�������G~cx8�	L�_����/�����Dv��0��Oqh������h�("�L�_���$����4����8�����'/�����I�oEF�f��
O�o�����4�G���d���S�4i�M��h�("�L�_�i�M�o�
kom�6���e�����@���~v��p�?��8��'�(�&���q`M3��K���
��%?�p~�h��/���A���
�T�+}������8�>t��n��sSM����Q����<�l%�Y�M������`�%#h�A����?��.z�17�t���Jn�����Q��4�7���k�����T���g�����,N�U�o|�y������a�~5�\��]���}��n�S e���h>���o�C=�M#�
7���bx1}H�R��b�b�!?s���C�?�X�.D?���D��!�E�*��p~��e>����B��1��?�Q�U�7M}�%�+���'�c���'���b8�i�p�����O�?E� ��1���g*%?�p~��$���O�?�����Gl��C�������MS���O�?��$�S�����{�R�S�7MN�?��$���O�/��v�?���J�O1��4E8��LH��W��fc�m6����6t�,�(�������Z��{�Zvq8�^';��������C6S�m6��Um/�.Uh_��\�N�+91��{�
���PU.c,� ���Gn�s.GP�[
���o������+��O>w{^0�
\i��Z��Z��,����o�����@Zf3M��]���84g\���
�79�\��?�����������$����7�.JY34�]v����W���8y�!�\����i����x*�L���8���X�+Nc~��l�v1��e3��f'����C��'}'�������3}�f<��N�����PmD'!Dt';��UL�o��'���������$���d���i�-���6;�_�?RB������"W1��e3��f'�K�GJ�6��"��B�*���l����D��H	�FtBDw�C�\�4���xr���/�)���NB��Nv���F��On��%�#%T�I��!r��[6��mv��D��j#:	!�;�!D�b}�f<��N�����PmD'!Dt';��UL�o��'����&=����xU�S}�������Q�"����w������h�Y��5�$��B�&7$��n	�e���GV9�������������!}��YH����~�������T����w������!��������;�m��3u�u���y������+����-0��8�^��|������Xw��[�����[��z�w>�������{���Wb�NP3>����c~�������u�y�{��O�]4M��
�v[!����>q��y	"��������[�[����Y����_���W8�iaB�zj�����bw�?�z�I����YWI�?t�4�f����/ -����R�&4O�Gq�,3��RJ���"G"�������4�W�K�G�H�'�9Y^������_�\���<'v��R�&R��F�4�&Z��Y�[q$�����^���0��O��T��T�>*$��%�"�T09�
��B\'�_a���
��}������r�����<11l���vg����Q��p��P�
\Dp�����)��mH5��<��J������O5|����n	�*��p�
��0
�x�����w]t��	�����Ox�����[�
]mE��������r/�13��_o���o[�W���������n��.�������w[�4�Mn����	�m���j�� �}��t����]�/������y��p��&��s}[����>��~t}��(��L>�pd�0��U|��4��bXH���c�/���%%�S���,�_���0F�h+������pb����"~i,�������ln��_�]EZ�����{Q�E��'�S>gc[�?���i'�(�H�'��"�<&����t�R��+��<��F����"~�q��.����m�����K��h$`(�����*���;v+���m���R����h$`(��|/�Wg��bXH-����+��4��F�:n���1��;t��{���p�o�.�5yU��^�s,�c6��T������>��r��Sv���YZ��g����7�%�!�!�_����[>����b�g����p���>������Y
��n���Z���(D�=�_�6rk-���9t�����������!��<B6�������{sHj2`m��Q7��_x-*��g$�7��;p�
��2����x�����������yR�CX����Vx�o�7�I�����(������?�����p�QT�6��q�w0�K�yf�����pK�������n���B�����c_���w�/������&�ot���F�I�O�����1����W����4�J��4�J��0�6���C��Wi������4���-�?��#�?��#�?�������?"	����~���fo����x������t�ep/��h[��7����m>�b�a�)`��Z�[�F~��C	kJ%����[�sW<�TI����4SO�n?d75$�)y���#�{����fmL�k�������G\�,���e�u���N���`M������Z�;��;�
���7�������vw����J`�W'�/���a������\�~u\_�(��"�(z��\X%R�Q�F~E�I�W��6V�~ei�W�k�W������ei�W������/}��.K#������/�(��������'�S�k�W������ei�W��D���2�j.�,~-zR>E�V|����n�]�F~E;�O�/�(��������'�S�k�W������ei�W��D���2�j.�,~-zR>E�V|����n�]�F~E;�O�/�(��������'�S�k�W������ei�W��D���2�j.�,~-zR>E�V|����n�]�F~E;�O�/�(��������'�S�k�W������ei�W��D���2�j.�,~-zR>E�V|����n�]�F~E;������~h��N���l�?o��m���8"lr���;��k3�jN�9��-#�C7^�m�|/�5	�7 a]�����wL�k>%�M%x'���ou�<��OW��u���z��0��u�i�g�
�;��/�����P���g�����>]W/	�C�G�x��w�U������g�	������W�_����t�n�[�i�C���~�h�PgB1���f����3N��{����G�.�M9�6��\h��m���3?��;�k.�8Ln�E����!*
m�?�I�1���0�e�c�+���p!���I�W��L�Wx�����1��M�p!���I�W��L�Wx�����1��M�p!���I�W��L�Wx�����1��M�p!���I�W��L�Wx�����1��M�p!���I�W��L�Wx�����1��M�p!���I�W��L�Wx�����1��M�p!���I�W��L�Wx�����1��M�p!���I�W��L�Wx�����1��M�p!���I�W��L�Wx�����1��M�p!���I�W��L�Wx�����1��M�p!����x�W��6�VkR���u��n�e��^����;��}��T���,B*��7�)a��$�C����b��|���}[�T���������/�G�|���x�z����������`��*�Q$D�L�eT�dT�bYJ��� R�SJ��,���PK0X ���)!1(�A�A�!bHP&I )b"��������}��$ ���x���O�=����y��{o�����w�/I�����������<)�\6�Y���'����-//_��u=K.���E�r�l��Q�|z'�W\+��������o���s~n��?���d��d���C~~�����?��9>���uf>��������c������3�9~l�E��?�G�������B�q�Ud��!�V����_�o�?���[���_0��J"���������Fsoa�e�#��A��f�e�e�e�m��<��(�/��1�x`
b����N?~��r���5�s�xJN����H*~@���m��|%}$���G�y�O���;����}����������H�o�������;��e�-7k��������n�����?4}4���";�������9����l�������G�m�o��4g�,}�%���n�o������_�X�3*��9x�O�=n��Y2�1{�����6	�I������u���f�O�]/�:ZO��x���x+���?�7��P�k�����n��������������8^���D�Q�Cq~�����8Z)��@���!��
�b����C�Y�8Z�_�������U��8��E,�5�i���*����n�����*zq�����g����}4M���.����I��(�D�3�=�C:��MS�>�]��>����}Q���G����N��a�	��������~���}�)���y�o���z����O�O���;��M9��Y2������]�3���-=�^����|�W���x����u�ct�G?#��pzj���@����������96�P:6���#�6O���~�6^����U�Y��V��
���;+�?��c�+��W�S���9���c�<���g�H������Q���
���Lq���x�<���31���)p,��l��g���G���!�L��mp
�G�G�`E����7�Q�#j�8#y���Q�Q�XQ�8��z���2��H����|T{��V��)|��<���31���)p,��l��g���G���!�L��mp
�G��z�o�����������M����?<��y��W�c��H^Hi�/��������=�o!��cg��f+�L��9}�h�2Y��z�s���9��x���A��^��v��{�'C�wHo5j�����f�?����.j�X��'��=n���y�1��	��Iq;�;xTn��������;������t������}r������B�����K�X9��[��4��G {&\��ew�Q.��w�Y^�5b�7�T.H���2����g_(/��Rz��!��W*[�������kX�b�n�}�����bd#Q�5�k��Zy��c����=��f(�5���z�,#���'j�T���?�������b5.�1�/�������z�_�o�H�kk������K�����A�U���Fj���i)�1�0�0�Dm����w�����za�����3>����d���t����N�a}{�.k��\��������y�-�v�
�����gp��na?^_Mo�^���(=(������j�?��y���K��:�?z�
�����[���q"��F��w=���9�:y�����u��{�"'}x�3�:�ry�����v�Q���}���t�����V��Ui��G��c���ZC�������4���cga{��fU�_{��������Lm������?�Kd�g����?�3�����s���?�
����������+�_�/����0����}>L������.�'�EC�BPTD��t�
PB��s���/���}A�������a�Q"S��PJ����y����7������S1������w�wXo3f�40D~=g�|���+��q^NH�}=e�]�w,��;�4��f�E�-�)?��<�����F\�f��5V�f���>io9"}��~���|�����������W�����*�M�Q��s������������+}���u��2f�
d�)G�[�2T}�Y9����Ud����������34}o�29d���wL�������%���(� 2��{���oO-G���f����L��������c4V/��p!�m��q�*&�+�z���P�b�^0���jk+���R>����/�#��Y���Y�?�Cmm���������B�������<���U�h/���9��V�����#�����1_('�������p��G�L[[���G����a�K����'g�wk
f�29�������^�q�t�W������be��������-F�SF_/�Kz�<��y�E�Xt��Z=6�=������>�Z/���<n�l�������:����G���N:��y�X����\�����zu�\}����,���q��k�{��O���K�G�����~��j1f�����:�m����C���DoTW-���j�X�q�m3�0�0�0���m�
��2��C�V��<�m3�0�0�0�0�DoT_-�,�7�����DO^�	'}���;���6k9s��r����sl.~|�!����*��������������f��t4�h�fUn���5c���K��}�������7��\;�����^a-��.�l7���Z�����r����x�.�l7���Zx�
���[�Ry�f���"�	��D��6��a4�hX������`���s��j��p~�G���<�����z��h4������}}�i���?�8J�?�@
v�
�������G��=�_����%�x�.��
�����p0<�_��W'����"N�Q�T���t4o���~\W��?�������N�?�(���cN����*�J��_�/���������'�����X$]}$%@4�jP��e-2�����Kg40n�cR.	��3���o��������[e����
���A������.�1��??��iw�8�g��� J��V���Ey�9�q���*�_dP����?�x����G���3�q��S4��c�����%����A�����p��I����4����E���+�?�?Q�?�?�?���]c��Qo��j+ 5����#7����5��wX���?����D~8�P�a��d���Kf�����<�M��]��\+g&m��xy������w���Ps�W��/��no�w������v^��*����^^g��A������X�/Rma�%^���c�������������c�_h����>�4�}>�o���
�G��k���>��S�?��K��~�{��~��mQ��������(m��~�>���q�1�O���E�����4b��<��X���?����_��F@�@mY{k�a����;��E�"Z������w�	�xa
���(8
��)��|����1�zQ(9e��_N��y{��`�������������~�z�?��k����������U�O�g��\hLPEXA���{"���/C8)j�Jc����F�?�?�V������is��X�����9�\����������)��-��&ha��@L��

����(&�.k���?%O�[�1���0W���\�����������(7"�G����S��g���+��Q�t.���pLA�u�s�7]�O�?�b}�E1y�H�#�&�m�n��p�<����q� q)?i���87������i��w7V�l��\?������v@�����
Him��<C��?�^��3��c��?�O������/�Sb
�@��#^����|������C��'�#@�u�Vc�e������o�W�_�/���?�Q �:���-���5���K�e�q_a�e�E�a�E"��<�b�e��f�e�e�E�
�a
��`r��&��9����t���?��.�"����'f�;����W�g�[�c`���^=iB�rh���fv�
�Z�����D���:���������#9��^y�����	��p�x�-�G�9;��96y
^i������^��W:�s��C�qv��s����y���M����J�@'��*&�C���:;��9���������_�o���R��s���_gZ9G�5y�4jm�/���[�:��T/��/����V�eM^�+�Z{u�o���F���u�X�E8�=�3=n�y�P�ukm�O�_;�H�Q�I&����%q�O����I ������������m���>�E�-\��j}���}<��<nGy�P����g�y���"�p���Bm5�G�Q�/��^_�Y/�8��ZoQ��G�Ewp�p�������}�C����?������k�WW6��e���U�-����������3������y����6���C�Q�xq����fy���X��j��f������pyRe�X�#�s���a�����jq�P��h�����@�6,kq�Pu��{�x}�m�Z�b�k-f�*>�5Uzi����������a���c������i���]]���k���������C��o�~cmk������%u�E��M�jq�P����A��7��T�#���+�k�������6���Gu��6��?���m\��CM���5N�Q�_]m^R�#��T_������6.����&�J����?����6/��C]��
c�oe�X+�8$��"�s;v*�PvFp�P#�|��gl����
�qC��"Z�J�i�<���|n����c�7w�f�9{x���Y[G������;�w
���\|���W���p,j�c�cZlM{Eq�xl>����xL��]{�:/_���5�X�9V@���|��k�+3N�������k�~���#e�=��;�����9�"�LI������99V�O�O9F�qE������X�����m;"�W�����^���q*r.�ks������G�A�	�8�X�-�v������9���"8F����%���9c������='�kXY?M���E���`J^c6���D���a�c��#���z��<�&U�IEND�B`�
#8Philip Alger
paalger0@gmail.com
In reply to: Akshay Joshi (#5)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

Hi Akshay,

As for the statement terminator, it’s useful to include it, while

running multiple queries together could result in a syntax error. In my
opinion, there’s no harm in providing the statement terminator.

However, I’ve modified the logic to add the statement terminator at the
end instead of appending to a new line.

Regarding putting the terminator at the end, I think my original comment
got cut off by my poor editing. Yes, that's what I was referring to; no
need to append it to a new line.

--
Best, Phil Alger

#9Akshay Joshi
akshay.joshi@enterprisedb.com
In reply to: Philip Alger (#8)
1 attachment(s)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

Please find attached the v3 patch, which resolves all compilation errors
and warnings.

On Thu, Oct 16, 2025 at 6:06 PM Philip Alger <paalger0@gmail.com> wrote:

Show quoted text

Hi Akshay,

As for the statement terminator, it’s useful to include it, while

running multiple queries together could result in a syntax error. In my
opinion, there’s no harm in providing the statement terminator.

However, I’ve modified the logic to add the statement terminator at the
end instead of appending to a new line.

Regarding putting the terminator at the end, I think my original comment
got cut off by my poor editing. Yes, that's what I was referring to; no
need to append it to a new line.

--
Best, Phil Alger

Attachments:

v3-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patchapplication/octet-stream; name=v3-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patchDownload
From dab0fee58e2887e0d235238e8d3b0609105ebb0a Mon Sep 17 00:00:00 2001
From: Akshay Joshi <akshay.joshi@enterprisedb.com>
Date: Fri, 10 Oct 2025 15:46:13 +0530
Subject: [PATCH v3] Add pg_get_policy_ddl() function to reconstruct CREATE
 POLICY statements
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This patch introduces a new system function:
pg_get_policy_ddl(regclass table, name policy_name, bool pretty),
which reconstructs the CREATE POLICY statement for the specified policy.

Usage examples:
SELECT pg_get_policy_ddl('rls_table', 'pol1', false); -- non-pretty formatted DDL
SELECT pg_get_policy_ddl('rls_table', 'pol1', true);  -- pretty formatted DDL

Reference: PG-163
Author: Akshay Joshi <akshay.joshi@enterprisedb.com>
Reviewed-by: Álvaro Herrera <alvherre@kurilemu.de>
Reviewed-by: Philip Alger <paalger0@gmail.com>
---
 doc/src/sgml/func/func-info.sgml          |  45 +++++
 src/backend/commands/policy.c             |  27 +++
 src/backend/utils/adt/ruleutils.c         | 190 +++++++++++++++++++++
 src/include/catalog/pg_proc.dat           |   3 +
 src/include/commands/policy.h             |   2 +
 src/test/regress/expected/rowsecurity.out | 196 +++++++++++++++++++++-
 src/test/regress/sql/rowsecurity.sql      |  78 +++++++++
 7 files changed, 540 insertions(+), 1 deletion(-)

diff --git a/doc/src/sgml/func/func-info.sgml b/doc/src/sgml/func/func-info.sgml
index c393832d94c..4b9c661c20b 100644
--- a/doc/src/sgml/func/func-info.sgml
+++ b/doc/src/sgml/func/func-info.sgml
@@ -3797,4 +3797,49 @@ acl      | {postgres=arwdDxtm/postgres,foo=r/postgres}
 
   </sect2>
 
+  <sect2 id="functions-get-object-ddl">
+   <title>Get Object DDL Functions</title>
+
+   <para>
+    The functions described in <xref linkend="functions-get-object-ddl-table"/>
+    return the Data Definition Language (DDL) statement for any given database object.
+    This feature is implemented as a set of distinct functions for each object type.
+   </para>
+
+   <table id="functions-get-object-ddl-table">
+    <title>Get Object DDL Functions</title>
+    <tgroup cols="1">
+     <thead>
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        Function
+       </para>
+       <para>
+        Description
+       </para></entry>
+      </row>
+     </thead>
+
+     <tbody>
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        <indexterm>
+         <primary>pg_get_policy_ddl</primary>
+        </indexterm>
+        <function>pg_get_policy_ddl</function>
+        ( <parameter>table</parameter> <type>regclass</type>, <parameter>policy_name</parameter> <type>name</type>, <parameter>pretty</parameter> <type>boolean</type> )
+        <returnvalue>text</returnvalue>
+       </para>
+       <para>
+        Reconstructs the CREATE POLICY statement from the system catalogs for a specified table and policy name.
+        When the pretty flag is set to true, the function returns a well-formatted DDL statement.
+        The result is a comprehensive <command>CREATE POLICY</command> statement.
+       </para></entry>
+      </row>
+     </tbody>
+    </tgroup>
+   </table>
+
+  </sect2>
+
   </sect1>
diff --git a/src/backend/commands/policy.c b/src/backend/commands/policy.c
index 83056960fe4..1abe0c44353 100644
--- a/src/backend/commands/policy.c
+++ b/src/backend/commands/policy.c
@@ -128,6 +128,33 @@ parse_policy_command(const char *cmd_name)
 	return polcmd;
 }
 
+/*
+ * get_policy_cmd_name -
+ *	 helper function to convert char representation to full command strings.
+ *
+ * cmd -  Valid values are '*', 'r', 'a', 'w' and 'd'.
+ *
+ */
+char *
+get_policy_cmd_name(char cmd)
+{
+	switch (cmd)
+	{
+		case '*':
+			return "ALL";
+		case ACL_SELECT_CHR:
+			return "SELECT";
+		case ACL_INSERT_CHR:
+			return "INSERT";
+		case ACL_UPDATE_CHR:
+			return "UPDATE";
+		case ACL_DELETE_CHR:
+			return "DELETE";
+		default:
+			elog(ERROR, "unrecognized policy command");
+	}
+}
+
 /*
  * policy_role_list_to_array
  *	 helper function to convert a list of RoleSpecs to an array of
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 050eef97a4c..4d8611042c5 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -33,12 +33,14 @@
 #include "catalog/pg_opclass.h"
 #include "catalog/pg_operator.h"
 #include "catalog/pg_partitioned_table.h"
+#include "catalog/pg_policy.h"
 #include "catalog/pg_proc.h"
 #include "catalog/pg_statistic_ext.h"
 #include "catalog/pg_trigger.h"
 #include "catalog/pg_type.h"
 #include "commands/defrem.h"
 #include "commands/tablespace.h"
+#include "commands/policy.h"
 #include "common/keywords.h"
 #include "executor/spi.h"
 #include "funcapi.h"
@@ -546,6 +548,10 @@ static void get_json_table_nested_columns(TableFunc *tf, JsonTablePlan *plan,
 										  deparse_context *context,
 										  bool showimplicit,
 										  bool needcomma);
+static void get_formatted_string(StringInfo buf,
+								 bool pretty,
+								 int noOfTabChars,
+								 const char *fmt,...) pg_attribute_printf(4, 5);
 
 #define only_marker(rte)  ((rte)->inh ? "" : "ONLY ")
 
@@ -13738,3 +13744,187 @@ get_range_partbound_string(List *bound_datums)
 
 	return buf->data;
 }
+
+/*
+ * get_formatted_string
+ *
+ * Return a formatted version of the string.
+ *
+ * pretty - If pretty is true, the output includes tabs (\t) and newlines (\n).
+ * noOfTabChars - indent with specified no of tabs.
+ * fmt - printf-style format string used by appendStringInfoVA.
+ */
+static void
+get_formatted_string(StringInfo buf, bool pretty, int noOfTabChars, const char *fmt,...)
+{
+	va_list		args;
+
+	if (pretty)
+	{
+		/* Indent with tabs */
+		for (int i = 0; i < noOfTabChars; i++)
+		{
+			appendStringInfoString(buf, "\t");
+		}
+	}
+	else
+		appendStringInfoChar(buf, ' ');
+
+	va_start(args, fmt);
+	appendStringInfoVA(buf, fmt, args);
+	va_end(args);
+
+	/* If pretty mode, append newline at the end */
+	if (pretty)
+		appendStringInfoChar(buf, '\n');
+}
+
+/*
+ * pg_get_policy_ddl
+ *
+ * Generate a CREATE POLICY statement for the specified policy.
+ *
+ * tableID - Table ID of the policy.
+ * policyName - Name of the policy for which to generate the DDL.
+ * pretty - If true, format the DDL with indentation and line breaks.
+ */
+Datum
+pg_get_policy_ddl(PG_FUNCTION_ARGS)
+{
+	Oid			tableID = PG_GETARG_OID(0);
+	Name		policyName = PG_GETARG_NAME(1);
+	bool		pretty = PG_GETARG_BOOL(2);
+	bool		attrIsNull;
+	int			prettyFlags;
+	Datum		valueDatum;
+	HeapTuple	tuplePolicy;
+	Relation	pgPolicyRel;
+	Relation	targetTable;
+	ScanKeyData skey[2];
+	SysScanDesc sscan;
+	Form_pg_policy policyForm;
+
+	StringInfoData buf;
+
+	initStringInfo(&buf);
+
+	targetTable = relation_open(tableID, AccessShareLock);
+	/* Find policy to begin scan */
+	pgPolicyRel = table_open(PolicyRelationId, AccessShareLock);
+
+	/* Set key - policy's relation id. */
+	ScanKeyInit(&skey[0],
+				Anum_pg_policy_polrelid,
+				BTEqualStrategyNumber, F_OIDEQ,
+				ObjectIdGetDatum(tableID));
+
+	/* Set key - policy's name. */
+	ScanKeyInit(&skey[1],
+				Anum_pg_policy_polname,
+				BTEqualStrategyNumber, F_NAMEEQ,
+				CStringGetDatum(NameStr(*policyName)));
+
+	sscan = systable_beginscan(pgPolicyRel,
+							   PolicyPolrelidPolnameIndexId, true, NULL, 2,
+							   skey);
+
+	tuplePolicy = systable_getnext(sscan);
+	/* Check that the policy is found, raise an error if not. */
+	if (!HeapTupleIsValid(tuplePolicy))
+		ereport(ERROR,
+				(errcode(ERRCODE_UNDEFINED_OBJECT),
+				 errmsg("policy \"%s\" for table \"%s\" does not exist",
+						NameStr(*policyName),
+						RelationGetRelationName(targetTable))));
+
+	policyForm = (Form_pg_policy) GETSTRUCT(tuplePolicy);
+
+	/* Build the CREATE POLICY statement */
+	get_formatted_string(&buf, pretty, 0, "CREATE POLICY %s ON %s",
+						 quote_identifier(NameStr(*policyName)),
+						 RelationGetRelationName(targetTable));
+
+	/* Check the type is PERMISSIVE or RESTRICTIVE */
+	get_formatted_string(&buf, pretty, 1,
+						 policyForm->polpermissive ? "AS PERMISSIVE" : "AS RESTRICTIVE");
+
+	/* Check command to which the policy applies */
+	get_formatted_string(&buf, pretty, 1, "FOR %s",
+						 get_policy_cmd_name(policyForm->polcmd));
+
+	/* Check if the policy has a TO list */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polroles,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		ArrayType  *policy_roles = DatumGetArrayTypePCopy(valueDatum);
+		int			nitems = ARR_DIMS(policy_roles)[0];
+		Oid		   *roles = (Oid *) ARR_DATA_PTR(policy_roles);
+		StringInfoData role_names;
+
+		initStringInfo(&role_names);
+
+		for (int i = 0; i < nitems; i++)
+		{
+			if (OidIsValid(roles[i]))
+			{
+				char	   *rolename = GetUserNameFromId(roles[i], false);
+
+				if (i > 0)
+					appendStringInfoString(&role_names, ", ");
+				appendStringInfoString(&role_names, rolename);
+			}
+		}
+
+		if (role_names.len > 0)
+			get_formatted_string(&buf, pretty, 1, "TO %s", role_names.data);
+	}
+
+	prettyFlags = GET_PRETTY_FLAGS(pretty);
+	/* Check if the policy has a USING expr */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polqual,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		text	   *exprtext = DatumGetTextPP(valueDatum);
+		text	   *usingExpression = pg_get_expr_worker(exprtext,
+														 policyForm->polrelid,
+														 prettyFlags);
+
+		get_formatted_string(&buf, pretty, 1, "USING (%s)",
+							 text_to_cstring(usingExpression));
+	}
+
+	/* Check if the policy has a WITH CHECK expr */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polwithcheck,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		text	   *exprtext = DatumGetTextPP(valueDatum);
+		text	   *checkExpression = pg_get_expr_worker(exprtext,
+														 policyForm->polrelid,
+														 prettyFlags);
+
+		get_formatted_string(&buf, pretty, 1, "WITH CHECK (%s)",
+							 text_to_cstring(checkExpression));
+	}
+
+	/* Replace '\n' with ';' if newline at the end */
+	if (buf.len > 0 && buf.data[buf.len - 1] == '\n')
+		buf.data[buf.len - 1] = ';';
+	else
+		appendStringInfoChar(&buf, ';');
+
+	/* Clean up. */
+	systable_endscan(sscan);
+	relation_close(targetTable, AccessShareLock);
+	table_close(pgPolicyRel, AccessShareLock);
+
+	PG_RETURN_TEXT_P(string_to_text(buf.data));
+}
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index b51d2b17379..d28039e4c08 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -4021,6 +4021,9 @@
   proname => 'pg_get_function_sqlbody', provolatile => 's',
   prorettype => 'text', proargtypes => 'oid',
   prosrc => 'pg_get_function_sqlbody' },
+{ oid => '8811', descr => 'get CREATE statement for policy',
+  proname => 'pg_get_policy_ddl', prorettype => 'text',
+  proargtypes => 'regclass name bool', prosrc => 'pg_get_policy_ddl' },
 
 { oid => '1686', descr => 'list of SQL keywords',
   proname => 'pg_get_keywords', procost => '10', prorows => '500',
diff --git a/src/include/commands/policy.h b/src/include/commands/policy.h
index f06aa1df439..40e45b738f4 100644
--- a/src/include/commands/policy.h
+++ b/src/include/commands/policy.h
@@ -35,4 +35,6 @@ extern ObjectAddress rename_policy(RenameStmt *stmt);
 
 extern bool relation_has_policies(Relation rel);
 
+extern char *get_policy_cmd_name(char cmd);
+
 #endif							/* POLICY_H */
diff --git a/src/test/regress/expected/rowsecurity.out b/src/test/regress/expected/rowsecurity.out
index 5a172c5d91c..992c88f2e3f 100644
--- a/src/test/regress/expected/rowsecurity.out
+++ b/src/test/regress/expected/rowsecurity.out
@@ -4821,11 +4821,203 @@ reset rls_test.blah;
 drop function rls_f(text);
 drop table rls_t, test_t;
 --
+-- Test for pg_get_policy_ddl(tableName, policyName, pretty) function.
+--
+CREATE TABLE rls_tbl_1 (
+    did         int primary key,
+    cid         int,
+    dlevel      int not null,
+    dauthor     name,
+    dtitle      text
+);
+GRANT ALL ON rls_tbl_1 TO public;
+CREATE TABLE rls_tbl_2 (
+    pguser      name primary key,
+    seclv       int
+);
+GRANT SELECT ON rls_tbl_2 TO public;
+-- Test PERMISSIVE and RESTRICTIVE
+CREATE POLICY rls_p1 ON rls_tbl_1 AS PERMISSIVE
+    USING (dlevel <= (SELECT seclv FROM rls_tbl_2 WHERE pguser = current_user));
+CREATE POLICY rls_p2 ON rls_tbl_1 AS RESTRICTIVE USING (cid <> 44 AND cid < 50);
+-- Test FOR ALL | SELECT | INSERT | UPDATE | DELETE
+CREATE POLICY rls_p3 ON rls_tbl_1 FOR ALL USING (dauthor = current_user);
+CREATE POLICY rls_p4 ON rls_tbl_1 FOR SELECT USING (cid % 2 = 0);
+CREATE POLICY rls_p5 ON rls_tbl_1 FOR INSERT WITH CHECK (cid % 2 = 1);
+CREATE POLICY rls_p6 ON rls_tbl_1 FOR UPDATE USING (cid % 2 = 0);
+CREATE POLICY rls_p7 ON rls_tbl_1 FOR DELETE USING (cid < 8);
+-- Test TO { role_name ... }
+CREATE POLICY rls_p8 ON rls_tbl_1 TO regress_rls_dave, regress_rls_alice USING (true);
+CREATE POLICY rls_p9 ON rls_tbl_1 TO regress_rls_exempt_user WITH CHECK (cid = (SELECT seclv FROM rls_tbl_2));
+-- Test NULL value
+SELECT pg_get_policy_ddl(NULL, 'rls_p1', false);
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+SELECT pg_get_policy_ddl('tab1', NULL, false);
+ERROR:  relation "tab1" does not exist
+LINE 1: SELECT pg_get_policy_ddl('tab1', NULL, false);
+                                 ^
+SELECT pg_get_policy_ddl(NULL, NULL, false);
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+-- Table does not exist
+SELECT pg_get_policy_ddl('tab1', 'rls_p1', false);
+ERROR:  relation "tab1" does not exist
+LINE 1: SELECT pg_get_policy_ddl('tab1', 'rls_p1', false);
+                                 ^
+-- Policy does not exist
+SELECT pg_get_policy_ddl('rls_tbl_1', 'pol1', false);
+ERROR:  policy "pol1" for table "rls_tbl_1" does not exist
+-- Without Pretty formatted
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', false);
+                                          pg_get_policy_ddl                                          
+-----------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p1 ON rls_tbl_1 AS PERMISSIVE FOR ALL USING ((dlevel <= ( SELECT rls_tbl_2.seclv+
+    FROM rls_tbl_2                                                                                  +
+   WHERE (rls_tbl_2.pguser = CURRENT_USER))));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', false);
+                                        pg_get_policy_ddl                                        
+-------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p2 ON rls_tbl_1 AS RESTRICTIVE FOR ALL USING (((cid <> 44) AND (cid < 50)));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', false);
+                                     pg_get_policy_ddl                                      
+--------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p3 ON rls_tbl_1 AS PERMISSIVE FOR ALL USING ((dauthor = CURRENT_USER));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', false);
+                                  pg_get_policy_ddl                                   
+--------------------------------------------------------------------------------------
+  CREATE POLICY rls_p4 ON rls_tbl_1 AS PERMISSIVE FOR SELECT USING (((cid % 2) = 0));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', false);
+                                     pg_get_policy_ddl                                     
+-------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p5 ON rls_tbl_1 AS PERMISSIVE FOR INSERT WITH CHECK (((cid % 2) = 1));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', false);
+                                  pg_get_policy_ddl                                   
+--------------------------------------------------------------------------------------
+  CREATE POLICY rls_p6 ON rls_tbl_1 AS PERMISSIVE FOR UPDATE USING (((cid % 2) = 0));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', false);
+                               pg_get_policy_ddl                                
+--------------------------------------------------------------------------------
+  CREATE POLICY rls_p7 ON rls_tbl_1 AS PERMISSIVE FOR DELETE USING ((cid < 8));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', false);
+                                               pg_get_policy_ddl                                               
+---------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p8 ON rls_tbl_1 AS PERMISSIVE FOR ALL TO regress_rls_dave, regress_rls_alice USING (true);
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', false);
+                                                        pg_get_policy_ddl                                                        
+---------------------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p9 ON rls_tbl_1 AS PERMISSIVE FOR ALL TO regress_rls_exempt_user WITH CHECK ((cid = ( SELECT rls_tbl_2.seclv+
+    FROM rls_tbl_2)));
+(1 row)
+
+-- With Pretty formatted
+\pset format unaligned
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p1 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	USING (dlevel <= (( SELECT rls_tbl_2.seclv
+   FROM rls_tbl_2
+  WHERE rls_tbl_2.pguser = CURRENT_USER)));
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p2 ON rls_tbl_1
+	AS RESTRICTIVE
+	FOR ALL
+	USING (cid <> 44 AND cid < 50);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p3 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	USING (dauthor = CURRENT_USER);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p4 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR SELECT
+	USING ((cid % 2) = 0);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p5 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR INSERT
+	WITH CHECK ((cid % 2) = 1);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p6 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR UPDATE
+	USING ((cid % 2) = 0);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p7 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR DELETE
+	USING (cid < 8);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p8 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO regress_rls_dave, regress_rls_alice
+	USING (true);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p9 ON rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO regress_rls_exempt_user
+	WITH CHECK (cid = (( SELECT rls_tbl_2.seclv
+   FROM rls_tbl_2)));
+(1 row)
+-- Clean up objects created for testing pg_get_policy_ddl function.
+DROP POLICY rls_p1 ON rls_tbl_1;
+DROP POLICY rls_p2 ON rls_tbl_1;
+DROP POLICY rls_p3 ON rls_tbl_1;
+DROP POLICY rls_p4 ON rls_tbl_1;
+DROP POLICY rls_p5 ON rls_tbl_1;
+DROP POLICY rls_p6 ON rls_tbl_1;
+DROP POLICY rls_p7 ON rls_tbl_1;
+DROP POLICY rls_p8 ON rls_tbl_1;
+DROP POLICY rls_p9 ON rls_tbl_1;
+--
 -- Clean up objects
 --
 RESET SESSION AUTHORIZATION;
 DROP SCHEMA regress_rls_schema CASCADE;
-NOTICE:  drop cascades to 30 other objects
+NOTICE:  drop cascades to 32 other objects
 DETAIL:  drop cascades to function f_leak(text)
 drop cascades to table uaccount
 drop cascades to table category
@@ -4856,6 +5048,8 @@ drop cascades to table dep1
 drop cascades to table dep2
 drop cascades to table dob_t1
 drop cascades to table dob_t2
+drop cascades to table rls_tbl_1
+drop cascades to table rls_tbl_2
 DROP USER regress_rls_alice;
 DROP USER regress_rls_bob;
 DROP USER regress_rls_carol;
diff --git a/src/test/regress/sql/rowsecurity.sql b/src/test/regress/sql/rowsecurity.sql
index 21ac0ca51ee..75c99b01e27 100644
--- a/src/test/regress/sql/rowsecurity.sql
+++ b/src/test/regress/sql/rowsecurity.sql
@@ -2400,6 +2400,84 @@ reset rls_test.blah;
 drop function rls_f(text);
 drop table rls_t, test_t;
 
+--
+-- Test for pg_get_policy_ddl(tableName, policyName, pretty) function.
+--
+CREATE TABLE rls_tbl_1 (
+    did         int primary key,
+    cid         int,
+    dlevel      int not null,
+    dauthor     name,
+    dtitle      text
+);
+GRANT ALL ON rls_tbl_1 TO public;
+CREATE TABLE rls_tbl_2 (
+    pguser      name primary key,
+    seclv       int
+);
+GRANT SELECT ON rls_tbl_2 TO public;
+
+-- Test PERMISSIVE and RESTRICTIVE
+CREATE POLICY rls_p1 ON rls_tbl_1 AS PERMISSIVE
+    USING (dlevel <= (SELECT seclv FROM rls_tbl_2 WHERE pguser = current_user));
+CREATE POLICY rls_p2 ON rls_tbl_1 AS RESTRICTIVE USING (cid <> 44 AND cid < 50);
+
+-- Test FOR ALL | SELECT | INSERT | UPDATE | DELETE
+CREATE POLICY rls_p3 ON rls_tbl_1 FOR ALL USING (dauthor = current_user);
+CREATE POLICY rls_p4 ON rls_tbl_1 FOR SELECT USING (cid % 2 = 0);
+CREATE POLICY rls_p5 ON rls_tbl_1 FOR INSERT WITH CHECK (cid % 2 = 1);
+CREATE POLICY rls_p6 ON rls_tbl_1 FOR UPDATE USING (cid % 2 = 0);
+CREATE POLICY rls_p7 ON rls_tbl_1 FOR DELETE USING (cid < 8);
+
+-- Test TO { role_name ... }
+CREATE POLICY rls_p8 ON rls_tbl_1 TO regress_rls_dave, regress_rls_alice USING (true);
+CREATE POLICY rls_p9 ON rls_tbl_1 TO regress_rls_exempt_user WITH CHECK (cid = (SELECT seclv FROM rls_tbl_2));
+
+-- Test NULL value
+SELECT pg_get_policy_ddl(NULL, 'rls_p1', false);
+SELECT pg_get_policy_ddl('tab1', NULL, false);
+SELECT pg_get_policy_ddl(NULL, NULL, false);
+
+
+-- Table does not exist
+SELECT pg_get_policy_ddl('tab1', 'rls_p1', false);
+-- Policy does not exist
+SELECT pg_get_policy_ddl('rls_tbl_1', 'pol1', false);
+
+-- Without Pretty formatted
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', false);
+
+-- With Pretty formatted
+\pset format unaligned
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', true);
+
+-- Clean up objects created for testing pg_get_policy_ddl function.
+DROP POLICY rls_p1 ON rls_tbl_1;
+DROP POLICY rls_p2 ON rls_tbl_1;
+DROP POLICY rls_p3 ON rls_tbl_1;
+DROP POLICY rls_p4 ON rls_tbl_1;
+DROP POLICY rls_p5 ON rls_tbl_1;
+DROP POLICY rls_p6 ON rls_tbl_1;
+DROP POLICY rls_p7 ON rls_tbl_1;
+DROP POLICY rls_p8 ON rls_tbl_1;
+DROP POLICY rls_p9 ON rls_tbl_1;
+
 --
 -- Clean up objects
 --
-- 
2.51.0

#10Chao Li
li.evan.chao@gmail.com
In reply to: Akshay Joshi (#9)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

On Oct 16, 2025, at 20:50, Akshay Joshi <akshay.joshi@enterprisedb.com> wrote:

Please find attached the v3 patch, which resolves all compilation errors and warnings.

On Thu, Oct 16, 2025 at 6:06 PM Philip Alger <paalger0@gmail.com> wrote:
Hi Akshay,

As for the statement terminator, it’s useful to include it, while running multiple queries together could result in a syntax error. In my opinion, there’s no harm in providing the statement terminator.
However, I’ve modified the logic to add the statement terminator at the end instead of appending to a new line.

Regarding putting the terminator at the end, I think my original comment got cut off by my poor editing. Yes, that's what I was referring to; no need to append it to a new line.

--
Best, Phil Alger
<v3-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patch>

1 - ruleutils.c
```
+	if (pretty)
+	{
+		/* Indent with tabs */
+		for (int i = 0; i < noOfTabChars; i++)
+		{
+			appendStringInfoString(buf, "\t");
+		}
```

As you are adding a single char of ‘\t’, better to use appendStringInfoChar() that is cheaper.

2 - ruleutils.c
```
+	initStringInfo(&buf);
+
+	targetTable = relation_open(tableID, AccessShareLock);
```

Looks like only usage of opening the table is to get the table name. In that case, why don’t just call get_rel_name(tableID) and store the table name in a local variable?

Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/

#11jian he
jian.universality@gmail.com
In reply to: Akshay Joshi (#9)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

On Thu, Oct 16, 2025 at 8:51 PM Akshay Joshi
<akshay.joshi@enterprisedb.com> wrote:

Please find attached the v3 patch, which resolves all compilation errors and warnings.

drop table if exists t, ts, ts1;
create table t(a int);
CREATE POLICY p0 ON t FOR ALL TO PUBLIC USING (a % 2 = 1);
SELECT pg_get_policy_ddl('t', 'p0', false);

pg_get_policy_ddl
---------------------------------------------------------------------
CREATE POLICY p0 ON t AS PERMISSIVE FOR ALL USING (((a % 2) = 1));
(1 row)

"TO PUBLIC" part is missing, maybe it's ok.

SELECT pg_get_policy_ddl(-1, 'p0', false);
ERROR: could not open relation with OID 4294967295
as I mentioned in a nearby thread [1]/messages/by-id/CACJufxGbE4uJWu1YuqdmOx+7PMBpHvX_fbRMmHu=r4SrsuW9tg@mail.gmail.com, this should be NULL instead of ERROR.
[1]: /messages/by-id/CACJufxGbE4uJWu1YuqdmOx+7PMBpHvX_fbRMmHu=r4SrsuW9tg@mail.gmail.com

IMHO, get_formatted_string is not needed, most of the time, if pretty is true,
we append "\t" and "\n", for that we can simply do
```
appendStringInfo(&buf, "CREATE POLICY %s ON %s ",
quote_identifier(NameStr(*policyName)),
generate_qualified_relation_name(policy_form->polrelid));
if (pretty)
appendStringInfoString(buf, "\t\n");
```

in pg_get_triggerdef_worker, I found the below code pattern:
/*
* In non-pretty mode, always schema-qualify the target table name for
* safety. In pretty mode, schema-qualify only if not visible.
*/
appendStringInfo(&buf, " ON %s ",
pretty ?
generate_relation_name(trigrec->tgrelid, NIL) :
generate_qualified_relation_name(trigrec->tgrelid));

maybe we can apply it too while construct query string:
"CREATE POLICY %s ON %s",

#12Akshay Joshi
akshay.joshi@enterprisedb.com
In reply to: Chao Li (#10)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

On Tue, Oct 21, 2025 at 2:39 PM Chao Li <li.evan.chao@gmail.com> wrote:

On Oct 16, 2025, at 20:50, Akshay Joshi <akshay.joshi@enterprisedb.com>

wrote:

Please find attached the v3 patch, which resolves all compilation errors

and warnings.

On Thu, Oct 16, 2025 at 6:06 PM Philip Alger <paalger0@gmail.com> wrote:
Hi Akshay,

As for the statement terminator, it’s useful to include it, while

running multiple queries together could result in a syntax error. In my
opinion, there’s no harm in providing the statement terminator.

However, I’ve modified the logic to add the statement terminator at the

end instead of appending to a new line.

Regarding putting the terminator at the end, I think my original comment

got cut off by my poor editing. Yes, that's what I was referring to; no
need to append it to a new line.

--
Best, Phil Alger
<v3-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patch>

1 - ruleutils.c
```
+       if (pretty)
+       {
+               /* Indent with tabs */
+               for (int i = 0; i < noOfTabChars; i++)
+               {
+                       appendStringInfoString(buf, "\t");
+               }
```

As you are adding a single char of ‘\t’, better to use
appendStringInfoChar() that is cheaper.

2 - ruleutils.c
```
+       initStringInfo(&buf);
+
+       targetTable = relation_open(tableID, AccessShareLock);
```

Looks like only usage of opening the table is to get the table name. In
that case, why don’t just call get_rel_name(tableID) and store the table
name in a local variable?

Fixed the above review comments in the v4 patch. I have used
generate_qualified_relation_name(tableID) instead of get_rel_name(tableID).

Show quoted text

Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/

#13Akshay Joshi
akshay.joshi@enterprisedb.com
In reply to: jian he (#11)
1 attachment(s)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

On Wed, Oct 22, 2025 at 12:51 PM jian he <jian.universality@gmail.com>
wrote:

On Thu, Oct 16, 2025 at 8:51 PM Akshay Joshi
<akshay.joshi@enterprisedb.com> wrote:

Please find attached the v3 patch, which resolves all compilation errors

and warnings.

drop table if exists t, ts, ts1;
create table t(a int);
CREATE POLICY p0 ON t FOR ALL TO PUBLIC USING (a % 2 = 1);
SELECT pg_get_policy_ddl('t', 'p0', false);

pg_get_policy_ddl
---------------------------------------------------------------------
CREATE POLICY p0 ON t AS PERMISSIVE FOR ALL USING (((a % 2) = 1));
(1 row)

"TO PUBLIC" part is missing, maybe it's ok.

I used the logic below, which did not return PUBLIC as a role. I have added
logic to default the TO clause to PUBLIC when no specific role name is
provided
valueDatum = heap_getattr(tuplePolicy,
Anum_pg_policy_polroles,
RelationGetDescr(pgPolicyRel),
&attrIsNull);
if (!attrIsNull)
{
ArrayType *policy_roles = DatumGetArrayTypePCopy(valueDatum);
int nitems = ARR_DIMS(policy_roles)[0];
Oid *roles = (Oid *) ARR_DATA_PTR(policy_roles);

SELECT pg_get_policy_ddl(-1, 'p0', false);
ERROR: could not open relation with OID 4294967295
as I mentioned in a nearby thread [1], this should be NULL instead of
ERROR.
[1]
/messages/by-id/CACJufxGbE4uJWu1YuqdmOx+7PMBpHvX_fbRMmHu=r4SrsuW9tg@mail.gmail.com

Fixed in v4 patch.

IMHO, get_formatted_string is not needed, most of the time, if pretty is
true,
we append "\t" and "\n", for that we can simply do
```
appendStringInfo(&buf, "CREATE POLICY %s ON %s ",
quote_identifier(NameStr(*policyName)),
generate_qualified_relation_name(policy_form->polrelid));
if (pretty)
appendStringInfoString(buf, "\t\n");
```

The get_formatted_string function is needed. Instead of using multiple if
statements for the pretty flag, it’s better to have a generic function.
This will be useful if the pretty-format DDL implementation is accepted by
the community, as it can be reused by other pg_get_<object>_ddl() DDL
functions added in the future.

in pg_get_triggerdef_worker, I found the below code pattern:
/*
* In non-pretty mode, always schema-qualify the target table name for
* safety. In pretty mode, schema-qualify only if not visible.
*/
appendStringInfo(&buf, " ON %s ",
pretty ?
generate_relation_name(trigrec->tgrelid, NIL) :
generate_qualified_relation_name(trigrec->tgrelid));

maybe we can apply it too while construct query string:
"CREATE POLICY %s ON %s",

In my opinion, the table name should always be schema-qualified, which I
have addressed in the v4 patch. The implementation of the pretty flag here
differs from pg_get_triggerdef_worker, which is used only for the target
table name. In my patch, the pretty flag adds \t and \n to each different
clause (example AS, FOR, USING ...)

Attachments:

v4-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patchapplication/octet-stream; name=v4-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patchDownload
From a86ff9fc2fe8f0b903beb6aaec1cd8e8667bbc4a Mon Sep 17 00:00:00 2001
From: Akshay Joshi <akshay.joshi@enterprisedb.com>
Date: Fri, 10 Oct 2025 15:46:13 +0530
Subject: [PATCH v4] Add pg_get_policy_ddl() function to reconstruct CREATE
 POLICY statements
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This patch introduces a new system function:
pg_get_policy_ddl(regclass table, name policy_name, bool pretty),
which reconstructs the CREATE POLICY statement for the specified policy.

Usage examples:
SELECT pg_get_policy_ddl('rls_table', 'pol1', false); -- non-pretty formatted DDL
SELECT pg_get_policy_ddl('rls_table', 'pol1', true);  -- pretty formatted DDL

Reference: PG-163
Author: Akshay Joshi <akshay.joshi@enterprisedb.com>
Reviewed-by: Álvaro Herrera <alvherre@kurilemu.de>
Reviewed-by: Philip Alger <paalger0@gmail.com>
---
 doc/src/sgml/func/func-info.sgml          |  45 +++++
 src/backend/commands/policy.c             |  27 +++
 src/backend/utils/adt/ruleutils.c         | 199 ++++++++++++++++++++
 src/include/catalog/pg_proc.dat           |   3 +
 src/include/commands/policy.h             |   2 +
 src/test/regress/expected/rowsecurity.out | 210 +++++++++++++++++++++-
 src/test/regress/sql/rowsecurity.sql      |  80 +++++++++
 7 files changed, 565 insertions(+), 1 deletion(-)

diff --git a/doc/src/sgml/func/func-info.sgml b/doc/src/sgml/func/func-info.sgml
index c393832d94c..4b9c661c20b 100644
--- a/doc/src/sgml/func/func-info.sgml
+++ b/doc/src/sgml/func/func-info.sgml
@@ -3797,4 +3797,49 @@ acl      | {postgres=arwdDxtm/postgres,foo=r/postgres}
 
   </sect2>
 
+  <sect2 id="functions-get-object-ddl">
+   <title>Get Object DDL Functions</title>
+
+   <para>
+    The functions described in <xref linkend="functions-get-object-ddl-table"/>
+    return the Data Definition Language (DDL) statement for any given database object.
+    This feature is implemented as a set of distinct functions for each object type.
+   </para>
+
+   <table id="functions-get-object-ddl-table">
+    <title>Get Object DDL Functions</title>
+    <tgroup cols="1">
+     <thead>
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        Function
+       </para>
+       <para>
+        Description
+       </para></entry>
+      </row>
+     </thead>
+
+     <tbody>
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        <indexterm>
+         <primary>pg_get_policy_ddl</primary>
+        </indexterm>
+        <function>pg_get_policy_ddl</function>
+        ( <parameter>table</parameter> <type>regclass</type>, <parameter>policy_name</parameter> <type>name</type>, <parameter>pretty</parameter> <type>boolean</type> )
+        <returnvalue>text</returnvalue>
+       </para>
+       <para>
+        Reconstructs the CREATE POLICY statement from the system catalogs for a specified table and policy name.
+        When the pretty flag is set to true, the function returns a well-formatted DDL statement.
+        The result is a comprehensive <command>CREATE POLICY</command> statement.
+       </para></entry>
+      </row>
+     </tbody>
+    </tgroup>
+   </table>
+
+  </sect2>
+
   </sect1>
diff --git a/src/backend/commands/policy.c b/src/backend/commands/policy.c
index 83056960fe4..1abe0c44353 100644
--- a/src/backend/commands/policy.c
+++ b/src/backend/commands/policy.c
@@ -128,6 +128,33 @@ parse_policy_command(const char *cmd_name)
 	return polcmd;
 }
 
+/*
+ * get_policy_cmd_name -
+ *	 helper function to convert char representation to full command strings.
+ *
+ * cmd -  Valid values are '*', 'r', 'a', 'w' and 'd'.
+ *
+ */
+char *
+get_policy_cmd_name(char cmd)
+{
+	switch (cmd)
+	{
+		case '*':
+			return "ALL";
+		case ACL_SELECT_CHR:
+			return "SELECT";
+		case ACL_INSERT_CHR:
+			return "INSERT";
+		case ACL_UPDATE_CHR:
+			return "UPDATE";
+		case ACL_DELETE_CHR:
+			return "DELETE";
+		default:
+			elog(ERROR, "unrecognized policy command");
+	}
+}
+
 /*
  * policy_role_list_to_array
  *	 helper function to convert a list of RoleSpecs to an array of
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 79ec136231b..c05e4786703 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -33,12 +33,14 @@
 #include "catalog/pg_opclass.h"
 #include "catalog/pg_operator.h"
 #include "catalog/pg_partitioned_table.h"
+#include "catalog/pg_policy.h"
 #include "catalog/pg_proc.h"
 #include "catalog/pg_statistic_ext.h"
 #include "catalog/pg_trigger.h"
 #include "catalog/pg_type.h"
 #include "commands/defrem.h"
 #include "commands/tablespace.h"
+#include "commands/policy.h"
 #include "common/keywords.h"
 #include "executor/spi.h"
 #include "funcapi.h"
@@ -546,6 +548,10 @@ static void get_json_table_nested_columns(TableFunc *tf, JsonTablePlan *plan,
 										  deparse_context *context,
 										  bool showimplicit,
 										  bool needcomma);
+static void get_formatted_string(StringInfo buf,
+								 bool pretty,
+								 int noOfTabChars,
+								 const char *fmt,...) pg_attribute_printf(4, 5);
 
 #define only_marker(rte)  ((rte)->inh ? "" : "ONLY ")
 
@@ -13738,3 +13744,196 @@ get_range_partbound_string(List *bound_datums)
 
 	return buf->data;
 }
+
+/*
+ * get_formatted_string
+ *
+ * Return a formatted version of the string.
+ *
+ * pretty - If pretty is true, the output includes tabs (\t) and newlines (\n).
+ * noOfTabChars - indent with specified no of tabs.
+ * fmt - printf-style format string used by appendStringInfoVA.
+ */
+static void
+get_formatted_string(StringInfo buf, bool pretty, int noOfTabChars, const char *fmt,...)
+{
+	va_list		args;
+
+	if (pretty)
+	{
+		/* Indent with tabs */
+		for (int i = 0; i < noOfTabChars; i++)
+		{
+			appendStringInfoChar(buf, '\t');
+		}
+	}
+	else
+		appendStringInfoChar(buf, ' ');
+
+	va_start(args, fmt);
+	appendStringInfoVA(buf, fmt, args);
+	va_end(args);
+
+	/* If pretty mode, append newline at the end */
+	if (pretty)
+		appendStringInfoChar(buf, '\n');
+}
+
+/*
+ * pg_get_policy_ddl
+ *
+ * Generate a CREATE POLICY statement for the specified policy.
+ *
+ * tableID - Table ID of the policy.
+ * policyName - Name of the policy for which to generate the DDL.
+ * pretty - If true, format the DDL with indentation and line breaks.
+ */
+Datum
+pg_get_policy_ddl(PG_FUNCTION_ARGS)
+{
+	Oid			tableID = PG_GETARG_OID(0);
+	Name		policyName = PG_GETARG_NAME(1);
+	bool		pretty = PG_GETARG_BOOL(2);
+	bool		attrIsNull;
+	int			prettyFlags;
+	Datum		valueDatum;
+	HeapTuple	tuplePolicy;
+	Relation	pgPolicyRel;
+	char	   *targetTable;
+	ScanKeyData skey[2];
+	SysScanDesc sscan;
+	Form_pg_policy policyForm;
+	StringInfoData buf;
+
+	/* Validate that the relation exists */
+	if (!OidIsValid(tableID) || get_rel_name(tableID) == NULL)
+		PG_RETURN_NULL();
+
+	initStringInfo(&buf);
+
+	targetTable = generate_qualified_relation_name(tableID);
+	/* Find policy to begin scan */
+	pgPolicyRel = table_open(PolicyRelationId, AccessShareLock);
+
+	/* Set key - policy's relation id. */
+	ScanKeyInit(&skey[0],
+				Anum_pg_policy_polrelid,
+				BTEqualStrategyNumber, F_OIDEQ,
+				ObjectIdGetDatum(tableID));
+
+	/* Set key - policy's name. */
+	ScanKeyInit(&skey[1],
+				Anum_pg_policy_polname,
+				BTEqualStrategyNumber, F_NAMEEQ,
+				CStringGetDatum(NameStr(*policyName)));
+
+	sscan = systable_beginscan(pgPolicyRel,
+							   PolicyPolrelidPolnameIndexId, true, NULL, 2,
+							   skey);
+
+	tuplePolicy = systable_getnext(sscan);
+	/* Check that the policy is found, raise an error if not. */
+	if (!HeapTupleIsValid(tuplePolicy))
+		ereport(ERROR,
+				(errcode(ERRCODE_UNDEFINED_OBJECT),
+				 errmsg("policy \"%s\" for table \"%s\" does not exist",
+						NameStr(*policyName),
+						targetTable)));
+
+	policyForm = (Form_pg_policy) GETSTRUCT(tuplePolicy);
+
+	/* Build the CREATE POLICY statement */
+	get_formatted_string(&buf, pretty, 0, "CREATE POLICY %s ON %s",
+						 quote_identifier(NameStr(*policyName)),
+						 targetTable);
+
+	/* Check the type is PERMISSIVE or RESTRICTIVE */
+	get_formatted_string(&buf, pretty, 1,
+						 policyForm->polpermissive ? "AS PERMISSIVE" : "AS RESTRICTIVE");
+
+	/* Check command to which the policy applies */
+	get_formatted_string(&buf, pretty, 1, "FOR %s",
+						 get_policy_cmd_name(policyForm->polcmd));
+
+	/* Check if the policy has a TO list */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polroles,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		ArrayType  *policy_roles = DatumGetArrayTypePCopy(valueDatum);
+		int			nitems = ARR_DIMS(policy_roles)[0];
+		Oid		   *roles = (Oid *) ARR_DATA_PTR(policy_roles);
+		StringInfoData role_names;
+
+		initStringInfo(&role_names);
+
+		for (int i = 0; i < nitems; i++)
+		{
+			if (OidIsValid(roles[i]))
+			{
+				char	   *rolename = GetUserNameFromId(roles[i], false);
+
+				if (i > 0)
+					appendStringInfoString(&role_names, ", ");
+				appendStringInfoString(&role_names, rolename);
+			}
+		}
+
+		if (role_names.len > 0)
+			get_formatted_string(&buf, pretty, 1, "TO %s", role_names.data);
+		else
+
+			/*
+			 * When no specific role is provided, generate the TO clause with
+			 * the PUBLIC role.
+			 */
+			get_formatted_string(&buf, pretty, 1, "TO PUBLIC");
+	}
+
+	prettyFlags = GET_PRETTY_FLAGS(pretty);
+	/* Check if the policy has a USING expr */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polqual,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		text	   *exprtext = DatumGetTextPP(valueDatum);
+		text	   *usingExpression = pg_get_expr_worker(exprtext,
+														 policyForm->polrelid,
+														 prettyFlags);
+
+		get_formatted_string(&buf, pretty, 1, "USING (%s)",
+							 text_to_cstring(usingExpression));
+	}
+
+	/* Check if the policy has a WITH CHECK expr */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polwithcheck,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		text	   *exprtext = DatumGetTextPP(valueDatum);
+		text	   *checkExpression = pg_get_expr_worker(exprtext,
+														 policyForm->polrelid,
+														 prettyFlags);
+
+		get_formatted_string(&buf, pretty, 1, "WITH CHECK (%s)",
+							 text_to_cstring(checkExpression));
+	}
+
+	/* Replace '\n' with ';' if newline at the end */
+	if (buf.len > 0 && buf.data[buf.len - 1] == '\n')
+		buf.data[buf.len - 1] = ';';
+	else
+		appendStringInfoChar(&buf, ';');
+
+	/* Clean up. */
+	systable_endscan(sscan);
+	table_close(pgPolicyRel, AccessShareLock);
+
+	PG_RETURN_TEXT_P(string_to_text(buf.data));
+}
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index eecb43ec6f0..536c5a857da 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -4021,6 +4021,9 @@
   proname => 'pg_get_function_sqlbody', provolatile => 's',
   prorettype => 'text', proargtypes => 'oid',
   prosrc => 'pg_get_function_sqlbody' },
+{ oid => '8811', descr => 'get CREATE statement for policy',
+  proname => 'pg_get_policy_ddl', prorettype => 'text',
+  proargtypes => 'regclass name bool', prosrc => 'pg_get_policy_ddl' },
 
 { oid => '1686', descr => 'list of SQL keywords',
   proname => 'pg_get_keywords', procost => '10', prorows => '500',
diff --git a/src/include/commands/policy.h b/src/include/commands/policy.h
index f06aa1df439..40e45b738f4 100644
--- a/src/include/commands/policy.h
+++ b/src/include/commands/policy.h
@@ -35,4 +35,6 @@ extern ObjectAddress rename_policy(RenameStmt *stmt);
 
 extern bool relation_has_policies(Relation rel);
 
+extern char *get_policy_cmd_name(char cmd);
+
 #endif							/* POLICY_H */
diff --git a/src/test/regress/expected/rowsecurity.out b/src/test/regress/expected/rowsecurity.out
index 42b78a24603..815a4ff72ce 100644
--- a/src/test/regress/expected/rowsecurity.out
+++ b/src/test/regress/expected/rowsecurity.out
@@ -4842,11 +4842,217 @@ reset rls_test.blah;
 drop function rls_f(text);
 drop table rls_t, test_t;
 --
+-- Test for pg_get_policy_ddl(tableName, policyName, pretty) function.
+--
+CREATE TABLE rls_tbl_1 (
+    did         int primary key,
+    cid         int,
+    dlevel      int not null,
+    dauthor     name,
+    dtitle      text
+);
+GRANT ALL ON rls_tbl_1 TO public;
+CREATE TABLE rls_tbl_2 (
+    pguser      name primary key,
+    seclv       int
+);
+GRANT SELECT ON rls_tbl_2 TO public;
+-- Test PERMISSIVE and RESTRICTIVE
+CREATE POLICY rls_p1 ON rls_tbl_1 AS PERMISSIVE
+    USING (dlevel <= (SELECT seclv FROM rls_tbl_2 WHERE pguser = current_user));
+CREATE POLICY rls_p2 ON rls_tbl_1 AS RESTRICTIVE USING (cid <> 44 AND cid < 50);
+-- Test FOR ALL | SELECT | INSERT | UPDATE | DELETE
+CREATE POLICY rls_p3 ON rls_tbl_1 FOR ALL USING (dauthor = current_user);
+CREATE POLICY rls_p4 ON rls_tbl_1 FOR SELECT USING (cid % 2 = 0);
+CREATE POLICY rls_p5 ON rls_tbl_1 FOR INSERT WITH CHECK (cid % 2 = 1);
+CREATE POLICY rls_p6 ON rls_tbl_1 FOR UPDATE USING (cid % 2 = 0);
+CREATE POLICY rls_p7 ON rls_tbl_1 FOR DELETE USING (cid < 8);
+-- Test TO { role_name ... }
+CREATE POLICY rls_p8 ON rls_tbl_1 TO regress_rls_dave, regress_rls_alice USING (true);
+CREATE POLICY rls_p9 ON rls_tbl_1 TO regress_rls_exempt_user WITH CHECK (cid = (SELECT seclv FROM rls_tbl_2));
+-- Test NULL value
+SELECT pg_get_policy_ddl(NULL, 'rls_p1', false);
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+SELECT pg_get_policy_ddl('tab1', NULL, false);
+ERROR:  relation "tab1" does not exist
+LINE 1: SELECT pg_get_policy_ddl('tab1', NULL, false);
+                                 ^
+SELECT pg_get_policy_ddl(NULL, NULL, false);
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+-- Test -1 as table oid
+ SELECT pg_get_policy_ddl(-1, 'rls_p1', false);
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+-- Table does not exist
+SELECT pg_get_policy_ddl('tab1', 'rls_p1', false);
+ERROR:  relation "tab1" does not exist
+LINE 1: SELECT pg_get_policy_ddl('tab1', 'rls_p1', false);
+                                 ^
+-- Policy does not exist
+SELECT pg_get_policy_ddl('rls_tbl_1', 'pol1', false);
+ERROR:  policy "pol1" for table "regress_rls_schema.rls_tbl_1" does not exist
+-- Without Pretty formatted
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', false);
+                                                        pg_get_policy_ddl                                                         
+----------------------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p1 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO PUBLIC USING ((dlevel <= ( SELECT rls_tbl_2.seclv+
+    FROM rls_tbl_2                                                                                                               +
+   WHERE (rls_tbl_2.pguser = CURRENT_USER))));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', false);
+                                                      pg_get_policy_ddl                                                       
+------------------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p2 ON regress_rls_schema.rls_tbl_1 AS RESTRICTIVE FOR ALL TO PUBLIC USING (((cid <> 44) AND (cid < 50)));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', false);
+                                                    pg_get_policy_ddl                                                    
+-------------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p3 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO PUBLIC USING ((dauthor = CURRENT_USER));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', false);
+                                                 pg_get_policy_ddl                                                 
+-------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p4 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR SELECT TO PUBLIC USING (((cid % 2) = 0));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', false);
+                                                   pg_get_policy_ddl                                                    
+------------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p5 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR INSERT TO PUBLIC WITH CHECK (((cid % 2) = 1));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', false);
+                                                 pg_get_policy_ddl                                                 
+-------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p6 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR UPDATE TO PUBLIC USING (((cid % 2) = 0));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', false);
+                                              pg_get_policy_ddl                                              
+-------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p7 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR DELETE TO PUBLIC USING ((cid < 8));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', false);
+                                                        pg_get_policy_ddl                                                         
+----------------------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p8 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO regress_rls_dave, regress_rls_alice USING (true);
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', false);
+                                                                 pg_get_policy_ddl                                                                  
+----------------------------------------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p9 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO regress_rls_exempt_user WITH CHECK ((cid = ( SELECT rls_tbl_2.seclv+
+    FROM rls_tbl_2)));
+(1 row)
+
+-- With Pretty formatted
+\pset format unaligned
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p1 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO PUBLIC
+	USING (dlevel <= (( SELECT rls_tbl_2.seclv
+   FROM rls_tbl_2
+  WHERE rls_tbl_2.pguser = CURRENT_USER)));
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p2 ON regress_rls_schema.rls_tbl_1
+	AS RESTRICTIVE
+	FOR ALL
+	TO PUBLIC
+	USING (cid <> 44 AND cid < 50);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p3 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO PUBLIC
+	USING (dauthor = CURRENT_USER);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p4 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR SELECT
+	TO PUBLIC
+	USING ((cid % 2) = 0);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p5 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR INSERT
+	TO PUBLIC
+	WITH CHECK ((cid % 2) = 1);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p6 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR UPDATE
+	TO PUBLIC
+	USING ((cid % 2) = 0);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p7 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR DELETE
+	TO PUBLIC
+	USING (cid < 8);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p8 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO regress_rls_dave, regress_rls_alice
+	USING (true);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p9 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO regress_rls_exempt_user
+	WITH CHECK (cid = (( SELECT rls_tbl_2.seclv
+   FROM rls_tbl_2)));
+(1 row)
+-- Clean up objects created for testing pg_get_policy_ddl function.
+DROP POLICY rls_p1 ON rls_tbl_1;
+DROP POLICY rls_p2 ON rls_tbl_1;
+DROP POLICY rls_p3 ON rls_tbl_1;
+DROP POLICY rls_p4 ON rls_tbl_1;
+DROP POLICY rls_p5 ON rls_tbl_1;
+DROP POLICY rls_p6 ON rls_tbl_1;
+DROP POLICY rls_p7 ON rls_tbl_1;
+DROP POLICY rls_p8 ON rls_tbl_1;
+DROP POLICY rls_p9 ON rls_tbl_1;
+--
 -- Clean up objects
 --
 RESET SESSION AUTHORIZATION;
 DROP SCHEMA regress_rls_schema CASCADE;
-NOTICE:  drop cascades to 30 other objects
+NOTICE:  drop cascades to 32 other objects
 DETAIL:  drop cascades to function f_leak(text)
 drop cascades to table uaccount
 drop cascades to table category
@@ -4877,6 +5083,8 @@ drop cascades to table dep1
 drop cascades to table dep2
 drop cascades to table dob_t1
 drop cascades to table dob_t2
+drop cascades to table rls_tbl_1
+drop cascades to table rls_tbl_2
 DROP USER regress_rls_alice;
 DROP USER regress_rls_bob;
 DROP USER regress_rls_carol;
diff --git a/src/test/regress/sql/rowsecurity.sql b/src/test/regress/sql/rowsecurity.sql
index 2d1be543391..f9f5bd0ae7d 100644
--- a/src/test/regress/sql/rowsecurity.sql
+++ b/src/test/regress/sql/rowsecurity.sql
@@ -2403,6 +2403,86 @@ reset rls_test.blah;
 drop function rls_f(text);
 drop table rls_t, test_t;
 
+--
+-- Test for pg_get_policy_ddl(tableName, policyName, pretty) function.
+--
+CREATE TABLE rls_tbl_1 (
+    did         int primary key,
+    cid         int,
+    dlevel      int not null,
+    dauthor     name,
+    dtitle      text
+);
+GRANT ALL ON rls_tbl_1 TO public;
+CREATE TABLE rls_tbl_2 (
+    pguser      name primary key,
+    seclv       int
+);
+GRANT SELECT ON rls_tbl_2 TO public;
+
+-- Test PERMISSIVE and RESTRICTIVE
+CREATE POLICY rls_p1 ON rls_tbl_1 AS PERMISSIVE
+    USING (dlevel <= (SELECT seclv FROM rls_tbl_2 WHERE pguser = current_user));
+CREATE POLICY rls_p2 ON rls_tbl_1 AS RESTRICTIVE USING (cid <> 44 AND cid < 50);
+
+-- Test FOR ALL | SELECT | INSERT | UPDATE | DELETE
+CREATE POLICY rls_p3 ON rls_tbl_1 FOR ALL USING (dauthor = current_user);
+CREATE POLICY rls_p4 ON rls_tbl_1 FOR SELECT USING (cid % 2 = 0);
+CREATE POLICY rls_p5 ON rls_tbl_1 FOR INSERT WITH CHECK (cid % 2 = 1);
+CREATE POLICY rls_p6 ON rls_tbl_1 FOR UPDATE USING (cid % 2 = 0);
+CREATE POLICY rls_p7 ON rls_tbl_1 FOR DELETE USING (cid < 8);
+
+-- Test TO { role_name ... }
+CREATE POLICY rls_p8 ON rls_tbl_1 TO regress_rls_dave, regress_rls_alice USING (true);
+CREATE POLICY rls_p9 ON rls_tbl_1 TO regress_rls_exempt_user WITH CHECK (cid = (SELECT seclv FROM rls_tbl_2));
+
+-- Test NULL value
+SELECT pg_get_policy_ddl(NULL, 'rls_p1', false);
+SELECT pg_get_policy_ddl('tab1', NULL, false);
+SELECT pg_get_policy_ddl(NULL, NULL, false);
+
+-- Test -1 as table oid
+ SELECT pg_get_policy_ddl(-1, 'rls_p1', false);
+
+-- Table does not exist
+SELECT pg_get_policy_ddl('tab1', 'rls_p1', false);
+-- Policy does not exist
+SELECT pg_get_policy_ddl('rls_tbl_1', 'pol1', false);
+
+-- Without Pretty formatted
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', false);
+
+-- With Pretty formatted
+\pset format unaligned
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', true);
+
+-- Clean up objects created for testing pg_get_policy_ddl function.
+DROP POLICY rls_p1 ON rls_tbl_1;
+DROP POLICY rls_p2 ON rls_tbl_1;
+DROP POLICY rls_p3 ON rls_tbl_1;
+DROP POLICY rls_p4 ON rls_tbl_1;
+DROP POLICY rls_p5 ON rls_tbl_1;
+DROP POLICY rls_p6 ON rls_tbl_1;
+DROP POLICY rls_p7 ON rls_tbl_1;
+DROP POLICY rls_p8 ON rls_tbl_1;
+DROP POLICY rls_p9 ON rls_tbl_1;
+
 --
 -- Clean up objects
 --
-- 
2.51.0

#14Philip Alger
paalger0@gmail.com
In reply to: Akshay Joshi (#13)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

The get_formatted_string function is needed. Instead of using multiple if

statements for the pretty flag, it’s better to have a generic function.
This will be useful if the pretty-format DDL implementation is accepted by
the community, as it can be reused by other pg_get_<object>_ddl() DDL
functions added in the future.

in pg_get_triggerdef_worker, I found the below code pattern:
/*
* In non-pretty mode, always schema-qualify the target table name for
* safety. In pretty mode, schema-qualify only if not visible.
*/
appendStringInfo(&buf, " ON %s ",
pretty ?
generate_relation_name(trigrec->tgrelid, NIL) :
generate_qualified_relation_name(trigrec->tgrelid));

maybe we can apply it too while construct query string:
"CREATE POLICY %s ON %s",

In my opinion, the table name should always be schema-qualified, which I
have addressed in the v4 patch. The implementation of the pretty flag
here differs from pg_get_triggerdef_worker, which is used only for the
target table name. In my patch, the pretty flag adds \t and \n to each
different clause (example AS, FOR, USING ...)

I think that's where the confusion lies with adding `pretty` to the DDL
functions. The `pretty` flag set to `true` on other functions is used to
"not" show the schema name. But in the case of this function, it is used to
format the statement. I wonder if the word `format` or `pretty_format` is a
better name? `pretty` itself in the codebase isn't a very clear name
regardless.

--
Best,
Phil Alger

#15Akshay Joshi
akshay.joshi@enterprisedb.com
In reply to: Philip Alger (#14)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

On Thu, Oct 23, 2025 at 12:19 AM Philip Alger <paalger0@gmail.com> wrote:

The get_formatted_string function is needed. Instead of using multiple

if statements for the pretty flag, it’s better to have a generic
function. This will be useful if the pretty-format DDL implementation is
accepted by the community, as it can be reused by other
pg_get_<object>_ddl() DDL functions added in the future.

in pg_get_triggerdef_worker, I found the below code pattern:
/*
* In non-pretty mode, always schema-qualify the target table name
for
* safety. In pretty mode, schema-qualify only if not visible.
*/
appendStringInfo(&buf, " ON %s ",
pretty ?
generate_relation_name(trigrec->tgrelid, NIL) :
generate_qualified_relation_name(trigrec->tgrelid));

maybe we can apply it too while construct query string:
"CREATE POLICY %s ON %s",

In my opinion, the table name should always be schema-qualified, which I
have addressed in the v4 patch. The implementation of the pretty flag
here differs from pg_get_triggerdef_worker, which is used only for the
target table name. In my patch, the pretty flag adds \t and \n to each
different clause (example AS, FOR, USING ...)

I think that's where the confusion lies with adding `pretty` to the DDL
functions. The `pretty` flag set to `true` on other functions is used to
"not" show the schema name. But in the case of this function, it is used to
format the statement. I wonder if the word `format` or `pretty_format` is a
better name? `pretty` itself in the codebase isn't a very clear name
regardless.

In my opinion, we should first decide whether we want the DDL statement to
be in a 'pretty' format or not. Personally, I believe it should be, since
parsing a one-line DDL statement can be quite complex and difficult for
users of this function. From a user’s perspective, having the entire DDL in
a single line makes it harder to read and understand. The flag allows users
to disable the pretty format by passing false.
If the community agrees on this approach, we can then think about choosing
a more appropriate word for it.

Show quoted text

--
Best,
Phil Alger

#16Mark Wong
markwkm@gmail.com
In reply to: Akshay Joshi (#4)
1 attachment(s)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

Hi everyone,

On Thu, Oct 16, 2025 at 01:47:53PM +0530, Akshay Joshi wrote:

On Wed, Oct 15, 2025 at 10:55 PM Álvaro Herrera <alvherre@kurilemu.de> wrote:

Hello,

I have reviewed this patch before and provided a number of comments that
have been addressed by Akshay (so I encourage you to list my name and
this address in a Reviewed-by trailer line in the commit message).  One
thing I had not noticed is that while this function has a "pretty" flag,
it doesn't use it to pass anything to pg_get_expr_worker()'s prettyFlags
argument, and I think it should -- probably just

  prettyFlags = GET_PRETTY_FLAGS(pretty);

same as pg_get_querydef() does.

Kinda sorta similar thought, I've noticed some existing functions like
pg_get_constraintdef make the "pretty" flag optional, so I'm wondering
if that scheme is also preferred here.

I've attached a small diff to the original
0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patch to
illustrate the additional work to follow suit, if so desired.

Regards,
Mark
--
Mark Wong <markwkm@gmail.com>
EDB https://enterprisedb.com

Attachments:

for-optional-pretty.difftext/plain; charset=us-asciiDownload
diff --git a/doc/src/sgml/func/func-info.sgml b/doc/src/sgml/func/func-info.sgml
index 4b9c661c20b..72b836cd082 100644
--- a/doc/src/sgml/func/func-info.sgml
+++ b/doc/src/sgml/func/func-info.sgml
@@ -3827,19 +3827,29 @@ acl      | {postgres=arwdDxtm/postgres,foo=r/postgres}
          <primary>pg_get_policy_ddl</primary>
         </indexterm>
         <function>pg_get_policy_ddl</function>
-        ( <parameter>table</parameter> <type>regclass</type>, <parameter>policy_name</parameter> <type>name</type>, <parameter>pretty</parameter> <type>boolean</type> )
+        ( <parameter>table</parameter> <type>regclass</type>, <parameter>policy_name</parameter> <type>name</type> <optional>, <parameter>pretty</parameter> <type>boolean</type> </optional> )
         <returnvalue>text</returnvalue>
        </para>
        <para>
-        Reconstructs the CREATE POLICY statement from the system catalogs for a specified table and policy name.
-        When the pretty flag is set to true, the function returns a well-formatted DDL statement.
-        The result is a comprehensive <command>CREATE POLICY</command> statement.
+        Reconstructs the <command>CREATE POLICY statement</command> from the
+        system catalogs for a specified table and policy name. The result is a
+        comprehensive <command>CREATE POLICY</command> statement.
        </para></entry>
       </row>
      </tbody>
     </tgroup>
    </table>
 
+  <para>
+   Most of the functions that reconstruct (decompile) database objects have an
+   optional <parameter>pretty</parameter> flag, which if
+   <literal>true</literal> causes the result to be
+   <quote>pretty-printed</quote>.  Pretty-printing adds whitespace for
+   legibility. Passing <literal>false</literal> for the
+   <parameter>pretty</parameter> parameter yields the same result as omitting
+   the parameter.
+  </para>
+
   </sect2>
 
   </sect1>
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index c05e4786703..e6d21a1d00e 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -552,6 +552,7 @@ static void get_formatted_string(StringInfo buf,
 								 bool pretty,
 								 int noOfTabChars,
 								 const char *fmt,...) pg_attribute_printf(4, 5);
+static char    *pg_get_policy_ddl_worker(Oid tableID, Name policyName, bool pretty);
 
 #define only_marker(rte)  ((rte)->inh ? "" : "ONLY ")
 
@@ -13788,12 +13789,41 @@ get_formatted_string(StringInfo buf, bool pretty, int noOfTabChars, const char *
  * policyName - Name of the policy for which to generate the DDL.
  * pretty - If true, format the DDL with indentation and line breaks.
  */
+
 Datum
 pg_get_policy_ddl(PG_FUNCTION_ARGS)
+{
+	Oid			tableID = PG_GETARG_OID(0);
+	Name		policyName = PG_GETARG_NAME(1);
+	char	   *res;
+
+	res = pg_get_policy_ddl_worker(tableID, policyName, false);
+
+	if (res == NULL)
+		PG_RETURN_NULL();
+
+	PG_RETURN_TEXT_P(string_to_text(res));
+}
+
+Datum
+pg_get_policy_ddl_ext(PG_FUNCTION_ARGS)
 {
 	Oid			tableID = PG_GETARG_OID(0);
 	Name		policyName = PG_GETARG_NAME(1);
 	bool		pretty = PG_GETARG_BOOL(2);
+	char	   *res;
+
+	res = pg_get_policy_ddl_worker(tableID, policyName, pretty);
+
+	if (res == NULL)
+		PG_RETURN_NULL();
+
+	PG_RETURN_TEXT_P(string_to_text(res));
+}
+
+static char *
+pg_get_policy_ddl_worker(Oid tableID, Name policyName, bool pretty)
+{
 	bool		attrIsNull;
 	int			prettyFlags;
 	Datum		valueDatum;
@@ -13807,7 +13837,7 @@ pg_get_policy_ddl(PG_FUNCTION_ARGS)
 
 	/* Validate that the relation exists */
 	if (!OidIsValid(tableID) || get_rel_name(tableID) == NULL)
-		PG_RETURN_NULL();
+		return NULL;
 
 	initStringInfo(&buf);
 
@@ -13935,5 +13965,5 @@ pg_get_policy_ddl(PG_FUNCTION_ARGS)
 	systable_endscan(sscan);
 	table_close(pgPolicyRel, AccessShareLock);
 
-	PG_RETURN_TEXT_P(string_to_text(buf.data));
+	return buf.data;
 }
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 536c5a857da..3bfaf34d535 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -4023,7 +4023,10 @@
   prosrc => 'pg_get_function_sqlbody' },
 { oid => '8811', descr => 'get CREATE statement for policy',
   proname => 'pg_get_policy_ddl', prorettype => 'text',
-  proargtypes => 'regclass name bool', prosrc => 'pg_get_policy_ddl' },
+  proargtypes => 'regclass name', prosrc => 'pg_get_policy_ddl' },
+{ oid => '8812', descr => 'get CREATE statement for policy with pretty-print option',
+  proname => 'pg_get_policy_ddl', prorettype => 'text',
+  proargtypes => 'regclass name bool', prosrc => 'pg_get_policy_ddl_ext' },
 
 { oid => '1686', descr => 'list of SQL keywords',
   proname => 'pg_get_keywords', procost => '10', prorows => '500',
#17Akshay Joshi
akshay.joshi@enterprisedb.com
In reply to: Mark Wong (#16)
1 attachment(s)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

Thanks, Mark, for your review comments and the updated patch.

I’ve incorporated your changes and prepared a combined v5 patch. The v5
patch is attached for further review.

On Mon, Oct 27, 2025 at 10:15 PM Mark Wong <markwkm@gmail.com> wrote:

Show quoted text

Hi everyone,

On Thu, Oct 16, 2025 at 01:47:53PM +0530, Akshay Joshi wrote:

On Wed, Oct 15, 2025 at 10:55 PM Álvaro Herrera <alvherre@kurilemu.de>

wrote:

Hello,

I have reviewed this patch before and provided a number of comments

that

have been addressed by Akshay (so I encourage you to list my name and
this address in a Reviewed-by trailer line in the commit message).

One

thing I had not noticed is that while this function has a "pretty"

flag,

it doesn't use it to pass anything to pg_get_expr_worker()'s

prettyFlags

argument, and I think it should -- probably just

prettyFlags = GET_PRETTY_FLAGS(pretty);

same as pg_get_querydef() does.

Kinda sorta similar thought, I've noticed some existing functions like
pg_get_constraintdef make the "pretty" flag optional, so I'm wondering
if that scheme is also preferred here.

I've attached a small diff to the original
0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patch to
illustrate the additional work to follow suit, if so desired.

Regards,
Mark
--
Mark Wong <markwkm@gmail.com>
EDB https://enterprisedb.com

Attachments:

v5-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patchapplication/octet-stream; name=v5-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patchDownload
From 0daa0f68ac03c63fe2a5a9ac0909c324d5937f5f Mon Sep 17 00:00:00 2001
From: Akshay Joshi <akshay.joshi@enterprisedb.com>
Date: Fri, 10 Oct 2025 15:46:13 +0530
Subject: [PATCH v5] Add pg_get_policy_ddl() function to reconstruct CREATE
 POLICY statements
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This patch introduces a new system function:
pg_get_policy_ddl(regclass table, name policy_name, bool pretty),
which reconstructs the CREATE POLICY statement for the specified policy.

Usage examples:
SELECT pg_get_policy_ddl('rls_table', 'pol1'); -- non-pretty formatted DDL
SELECT pg_get_policy_ddl('rls_table', 'pol1', true);  -- pretty formatted DDL

Reference: PG-163
Author: Akshay Joshi <akshay.joshi@enterprisedb.com>
Reviewed-by: Álvaro Herrera <alvherre@kurilemu.de>
---
 doc/src/sgml/func/func-info.sgml          |  55 ++++++
 src/backend/commands/policy.c             |  27 +++
 src/backend/utils/adt/ruleutils.c         | 228 ++++++++++++++++++++++
 src/include/catalog/pg_proc.dat           |   6 +
 src/include/commands/policy.h             |   2 +
 src/test/regress/expected/rowsecurity.out | 210 +++++++++++++++++++-
 src/test/regress/sql/rowsecurity.sql      |  80 ++++++++
 7 files changed, 607 insertions(+), 1 deletion(-)

diff --git a/doc/src/sgml/func/func-info.sgml b/doc/src/sgml/func/func-info.sgml
index c393832d94c..2210a49a478 100644
--- a/doc/src/sgml/func/func-info.sgml
+++ b/doc/src/sgml/func/func-info.sgml
@@ -3797,4 +3797,59 @@ acl      | {postgres=arwdDxtm/postgres,foo=r/postgres}
 
   </sect2>
 
+  <sect2 id="functions-get-object-ddl">
+   <title>Get Object DDL Functions</title>
+
+   <para>
+    The functions described in <xref linkend="functions-get-object-ddl-table"/>
+    return the Data Definition Language (DDL) statement for any given database object.
+    This feature is implemented as a set of distinct functions for each object type.
+   </para>
+
+   <table id="functions-get-object-ddl-table">
+    <title>Get Object DDL Functions</title>
+    <tgroup cols="1">
+     <thead>
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        Function
+       </para>
+       <para>
+        Description
+       </para></entry>
+      </row>
+     </thead>
+
+     <tbody>
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        <indexterm>
+         <primary>pg_get_policy_ddl</primary>
+        </indexterm>
+        <function>pg_get_policy_ddl</function>
+        ( <parameter>table</parameter> <type>regclass</type>, <parameter>policy_name</parameter> <type>name</type>, <optional> <parameter>pretty</parameter> <type>boolean</type> </optional> )
+        <returnvalue>text</returnvalue>
+       </para>
+       <para>
+        Reconstructs the <command>CREATE POLICY</command> statement from the
+        system catalogs for a specified table and policy name. The result is a
+        comprehensive <command>CREATE POLICY</command> statement.
+       </para></entry>
+      </row>
+     </tbody>
+    </tgroup>
+   </table>
+
+  <para>
+   Most of the functions that reconstruct (decompile) database objects have an
+   optional <parameter>pretty</parameter> flag, which if
+   <literal>true</literal> causes the result to be
+   <quote>pretty-printed</quote>. Pretty-printing adds tab character and new
+   line character for legibility. Passing <literal>false</literal> for the
+   <parameter>pretty</parameter> parameter yields the same result as omitting
+   the parameter.
+  </para>
+
+  </sect2>
+
   </sect1>
diff --git a/src/backend/commands/policy.c b/src/backend/commands/policy.c
index 83056960fe4..1abe0c44353 100644
--- a/src/backend/commands/policy.c
+++ b/src/backend/commands/policy.c
@@ -128,6 +128,33 @@ parse_policy_command(const char *cmd_name)
 	return polcmd;
 }
 
+/*
+ * get_policy_cmd_name -
+ *	 helper function to convert char representation to full command strings.
+ *
+ * cmd -  Valid values are '*', 'r', 'a', 'w' and 'd'.
+ *
+ */
+char *
+get_policy_cmd_name(char cmd)
+{
+	switch (cmd)
+	{
+		case '*':
+			return "ALL";
+		case ACL_SELECT_CHR:
+			return "SELECT";
+		case ACL_INSERT_CHR:
+			return "INSERT";
+		case ACL_UPDATE_CHR:
+			return "UPDATE";
+		case ACL_DELETE_CHR:
+			return "DELETE";
+		default:
+			elog(ERROR, "unrecognized policy command");
+	}
+}
+
 /*
  * policy_role_list_to_array
  *	 helper function to convert a list of RoleSpecs to an array of
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 79ec136231b..b773c7725a4 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -33,12 +33,14 @@
 #include "catalog/pg_opclass.h"
 #include "catalog/pg_operator.h"
 #include "catalog/pg_partitioned_table.h"
+#include "catalog/pg_policy.h"
 #include "catalog/pg_proc.h"
 #include "catalog/pg_statistic_ext.h"
 #include "catalog/pg_trigger.h"
 #include "catalog/pg_type.h"
 #include "commands/defrem.h"
 #include "commands/tablespace.h"
+#include "commands/policy.h"
 #include "common/keywords.h"
 #include "executor/spi.h"
 #include "funcapi.h"
@@ -546,6 +548,11 @@ static void get_json_table_nested_columns(TableFunc *tf, JsonTablePlan *plan,
 										  deparse_context *context,
 										  bool showimplicit,
 										  bool needcomma);
+static void get_formatted_string(StringInfo buf,
+								 bool pretty,
+								 int noOfTabChars,
+								 const char *fmt,...) pg_attribute_printf(4, 5);
+static char *pg_get_policy_ddl_worker(Oid tableID, Name policyName, bool pretty);
 
 #define only_marker(rte)  ((rte)->inh ? "" : "ONLY ")
 
@@ -13738,3 +13745,224 @@ get_range_partbound_string(List *bound_datums)
 
 	return buf->data;
 }
+
+/*
+ * get_formatted_string
+ *
+ * Return a formatted version of the string.
+ *
+ * pretty - If pretty is true, the output includes tabs (\t) and newlines (\n).
+ * noOfTabChars - indent with specified no of tabs.
+ * fmt - printf-style format string used by appendStringInfoVA.
+ */
+static void
+get_formatted_string(StringInfo buf, bool pretty, int noOfTabChars, const char *fmt,...)
+{
+	va_list		args;
+
+	if (pretty)
+	{
+		/* Indent with tabs */
+		for (int i = 0; i < noOfTabChars; i++)
+		{
+			appendStringInfoChar(buf, '\t');
+		}
+	}
+	else
+		appendStringInfoChar(buf, ' ');
+
+	va_start(args, fmt);
+	appendStringInfoVA(buf, fmt, args);
+	va_end(args);
+
+	/* If pretty mode, append newline at the end */
+	if (pretty)
+		appendStringInfoChar(buf, '\n');
+}
+
+/*
+ * pg_get_policy_ddl
+ *
+ * Generate a CREATE POLICY statement for the specified policy.
+ *
+ * tableID - Table ID of the policy.
+ * policyName - Name of the policy for which to generate the DDL.
+ * pretty - If true, format the DDL with indentation and line breaks.
+ */
+Datum
+pg_get_policy_ddl(PG_FUNCTION_ARGS)
+{
+	Oid			tableID = PG_GETARG_OID(0);
+	Name		policyName = PG_GETARG_NAME(1);
+	char	   *res;
+
+	res = pg_get_policy_ddl_worker(tableID, policyName, false);
+
+	if (res == NULL)
+		PG_RETURN_NULL();
+
+	PG_RETURN_TEXT_P(string_to_text(res));
+}
+
+Datum
+pg_get_policy_ddl_ext(PG_FUNCTION_ARGS)
+{
+	Oid			tableID = PG_GETARG_OID(0);
+	Name		policyName = PG_GETARG_NAME(1);
+	bool		pretty = PG_GETARG_BOOL(2);
+	char	   *res;
+
+	res = pg_get_policy_ddl_worker(tableID, policyName, pretty);
+
+	if (res == NULL)
+		PG_RETURN_NULL();
+
+	PG_RETURN_TEXT_P(string_to_text(res));
+}
+
+static char *
+pg_get_policy_ddl_worker(Oid tableID, Name policyName, bool pretty)
+{
+	bool		attrIsNull;
+	int			prettyFlags;
+	Datum		valueDatum;
+	HeapTuple	tuplePolicy;
+	Relation	pgPolicyRel;
+	char	   *targetTable;
+	ScanKeyData skey[2];
+	SysScanDesc sscan;
+	Form_pg_policy policyForm;
+	StringInfoData buf;
+
+	/* Validate that the relation exists */
+	if (!OidIsValid(tableID) || get_rel_name(tableID) == NULL)
+		return NULL;
+
+	initStringInfo(&buf);
+
+	targetTable = generate_qualified_relation_name(tableID);
+	/* Find policy to begin scan */
+	pgPolicyRel = table_open(PolicyRelationId, AccessShareLock);
+
+	/* Set key - policy's relation id. */
+	ScanKeyInit(&skey[0],
+				Anum_pg_policy_polrelid,
+				BTEqualStrategyNumber, F_OIDEQ,
+				ObjectIdGetDatum(tableID));
+
+	/* Set key - policy's name. */
+	ScanKeyInit(&skey[1],
+				Anum_pg_policy_polname,
+				BTEqualStrategyNumber, F_NAMEEQ,
+				CStringGetDatum(NameStr(*policyName)));
+
+	sscan = systable_beginscan(pgPolicyRel,
+							   PolicyPolrelidPolnameIndexId, true, NULL, 2,
+							   skey);
+
+	tuplePolicy = systable_getnext(sscan);
+	/* Check that the policy is found, raise an error if not. */
+	if (!HeapTupleIsValid(tuplePolicy))
+		ereport(ERROR,
+				(errcode(ERRCODE_UNDEFINED_OBJECT),
+				 errmsg("policy \"%s\" for table \"%s\" does not exist",
+						NameStr(*policyName),
+						targetTable)));
+
+	policyForm = (Form_pg_policy) GETSTRUCT(tuplePolicy);
+
+	/* Build the CREATE POLICY statement */
+	get_formatted_string(&buf, pretty, 0, "CREATE POLICY %s ON %s",
+						 quote_identifier(NameStr(*policyName)),
+						 targetTable);
+
+	/* Check the type is PERMISSIVE or RESTRICTIVE */
+	get_formatted_string(&buf, pretty, 1,
+						 policyForm->polpermissive ? "AS PERMISSIVE" : "AS RESTRICTIVE");
+
+	/* Check command to which the policy applies */
+	get_formatted_string(&buf, pretty, 1, "FOR %s",
+						 get_policy_cmd_name(policyForm->polcmd));
+
+	/* Check if the policy has a TO list */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polroles,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		ArrayType  *policy_roles = DatumGetArrayTypePCopy(valueDatum);
+		int			nitems = ARR_DIMS(policy_roles)[0];
+		Oid		   *roles = (Oid *) ARR_DATA_PTR(policy_roles);
+		StringInfoData role_names;
+
+		initStringInfo(&role_names);
+
+		for (int i = 0; i < nitems; i++)
+		{
+			if (OidIsValid(roles[i]))
+			{
+				char	   *rolename = GetUserNameFromId(roles[i], false);
+
+				if (i > 0)
+					appendStringInfoString(&role_names, ", ");
+				appendStringInfoString(&role_names, rolename);
+			}
+		}
+
+		if (role_names.len > 0)
+			get_formatted_string(&buf, pretty, 1, "TO %s", role_names.data);
+		else
+
+			/*
+			 * When no specific role is provided, generate the TO clause with
+			 * the PUBLIC role.
+			 */
+			get_formatted_string(&buf, pretty, 1, "TO PUBLIC");
+	}
+
+	prettyFlags = GET_PRETTY_FLAGS(pretty);
+	/* Check if the policy has a USING expr */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polqual,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		text	   *exprtext = DatumGetTextPP(valueDatum);
+		text	   *usingExpression = pg_get_expr_worker(exprtext,
+														 policyForm->polrelid,
+														 prettyFlags);
+
+		get_formatted_string(&buf, pretty, 1, "USING (%s)",
+							 text_to_cstring(usingExpression));
+	}
+
+	/* Check if the policy has a WITH CHECK expr */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polwithcheck,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		text	   *exprtext = DatumGetTextPP(valueDatum);
+		text	   *checkExpression = pg_get_expr_worker(exprtext,
+														 policyForm->polrelid,
+														 prettyFlags);
+
+		get_formatted_string(&buf, pretty, 1, "WITH CHECK (%s)",
+							 text_to_cstring(checkExpression));
+	}
+
+	/* Replace '\n' with ';' if newline at the end */
+	if (buf.len > 0 && buf.data[buf.len - 1] == '\n')
+		buf.data[buf.len - 1] = ';';
+	else
+		appendStringInfoChar(&buf, ';');
+
+	/* Clean up. */
+	systable_endscan(sscan);
+	table_close(pgPolicyRel, AccessShareLock);
+
+	return buf.data;
+}
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 9121a382f76..69683fb37f7 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -4021,6 +4021,12 @@
   proname => 'pg_get_function_sqlbody', provolatile => 's',
   prorettype => 'text', proargtypes => 'oid',
   prosrc => 'pg_get_function_sqlbody' },
+{ oid => '8811', descr => 'get CREATE statement for policy',
+  proname => 'pg_get_policy_ddl', prorettype => 'text',
+  proargtypes => 'regclass name', prosrc => 'pg_get_policy_ddl' },
+{ oid => '8812', descr => 'get CREATE statement for policy with pretty option',
+  proname => 'pg_get_policy_ddl', prorettype => 'text',
+  proargtypes => 'regclass name bool', prosrc => 'pg_get_policy_ddl_ext' },
 
 { oid => '1686', descr => 'list of SQL keywords',
   proname => 'pg_get_keywords', procost => '10', prorows => '500',
diff --git a/src/include/commands/policy.h b/src/include/commands/policy.h
index f06aa1df439..40e45b738f4 100644
--- a/src/include/commands/policy.h
+++ b/src/include/commands/policy.h
@@ -35,4 +35,6 @@ extern ObjectAddress rename_policy(RenameStmt *stmt);
 
 extern bool relation_has_policies(Relation rel);
 
+extern char *get_policy_cmd_name(char cmd);
+
 #endif							/* POLICY_H */
diff --git a/src/test/regress/expected/rowsecurity.out b/src/test/regress/expected/rowsecurity.out
index c958ef4d70a..abc3e84c5de 100644
--- a/src/test/regress/expected/rowsecurity.out
+++ b/src/test/regress/expected/rowsecurity.out
@@ -5101,11 +5101,217 @@ reset rls_test.blah;
 drop function rls_f(text);
 drop table rls_t, test_t;
 --
+-- Test for pg_get_policy_ddl(tableName, policyName, pretty) function.
+--
+CREATE TABLE rls_tbl_1 (
+    did         int primary key,
+    cid         int,
+    dlevel      int not null,
+    dauthor     name,
+    dtitle      text
+);
+GRANT ALL ON rls_tbl_1 TO public;
+CREATE TABLE rls_tbl_2 (
+    pguser      name primary key,
+    seclv       int
+);
+GRANT SELECT ON rls_tbl_2 TO public;
+-- Test PERMISSIVE and RESTRICTIVE
+CREATE POLICY rls_p1 ON rls_tbl_1 AS PERMISSIVE
+    USING (dlevel <= (SELECT seclv FROM rls_tbl_2 WHERE pguser = current_user));
+CREATE POLICY rls_p2 ON rls_tbl_1 AS RESTRICTIVE USING (cid <> 44 AND cid < 50);
+-- Test FOR ALL | SELECT | INSERT | UPDATE | DELETE
+CREATE POLICY rls_p3 ON rls_tbl_1 FOR ALL USING (dauthor = current_user);
+CREATE POLICY rls_p4 ON rls_tbl_1 FOR SELECT USING (cid % 2 = 0);
+CREATE POLICY rls_p5 ON rls_tbl_1 FOR INSERT WITH CHECK (cid % 2 = 1);
+CREATE POLICY rls_p6 ON rls_tbl_1 FOR UPDATE USING (cid % 2 = 0);
+CREATE POLICY rls_p7 ON rls_tbl_1 FOR DELETE USING (cid < 8);
+-- Test TO { role_name ... }
+CREATE POLICY rls_p8 ON rls_tbl_1 TO regress_rls_dave, regress_rls_alice USING (true);
+CREATE POLICY rls_p9 ON rls_tbl_1 TO regress_rls_exempt_user WITH CHECK (cid = (SELECT seclv FROM rls_tbl_2));
+-- Test NULL value
+SELECT pg_get_policy_ddl(NULL, 'rls_p1', false);
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+SELECT pg_get_policy_ddl('tab1', NULL, false);
+ERROR:  relation "tab1" does not exist
+LINE 1: SELECT pg_get_policy_ddl('tab1', NULL, false);
+                                 ^
+SELECT pg_get_policy_ddl(NULL, NULL, false);
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+-- Test -1 as table oid
+ SELECT pg_get_policy_ddl(-1, 'rls_p1', false);
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+-- Table does not exist
+SELECT pg_get_policy_ddl('tab1', 'rls_p1', false);
+ERROR:  relation "tab1" does not exist
+LINE 1: SELECT pg_get_policy_ddl('tab1', 'rls_p1', false);
+                                 ^
+-- Policy does not exist
+SELECT pg_get_policy_ddl('rls_tbl_1', 'pol1', false);
+ERROR:  policy "pol1" for table "regress_rls_schema.rls_tbl_1" does not exist
+-- Without Pretty formatted
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', false);
+                                                        pg_get_policy_ddl                                                         
+----------------------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p1 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO PUBLIC USING ((dlevel <= ( SELECT rls_tbl_2.seclv+
+    FROM rls_tbl_2                                                                                                               +
+   WHERE (rls_tbl_2.pguser = CURRENT_USER))));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', false);
+                                                      pg_get_policy_ddl                                                       
+------------------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p2 ON regress_rls_schema.rls_tbl_1 AS RESTRICTIVE FOR ALL TO PUBLIC USING (((cid <> 44) AND (cid < 50)));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', false);
+                                                    pg_get_policy_ddl                                                    
+-------------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p3 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO PUBLIC USING ((dauthor = CURRENT_USER));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', false);
+                                                 pg_get_policy_ddl                                                 
+-------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p4 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR SELECT TO PUBLIC USING (((cid % 2) = 0));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', false);
+                                                   pg_get_policy_ddl                                                    
+------------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p5 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR INSERT TO PUBLIC WITH CHECK (((cid % 2) = 1));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', false);
+                                                 pg_get_policy_ddl                                                 
+-------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p6 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR UPDATE TO PUBLIC USING (((cid % 2) = 0));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', false);
+                                              pg_get_policy_ddl                                              
+-------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p7 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR DELETE TO PUBLIC USING ((cid < 8));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', false);
+                                                        pg_get_policy_ddl                                                         
+----------------------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p8 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO regress_rls_dave, regress_rls_alice USING (true);
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', false);
+                                                                 pg_get_policy_ddl                                                                  
+----------------------------------------------------------------------------------------------------------------------------------------------------
+  CREATE POLICY rls_p9 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO regress_rls_exempt_user WITH CHECK ((cid = ( SELECT rls_tbl_2.seclv+
+    FROM rls_tbl_2)));
+(1 row)
+
+-- With Pretty formatted
+\pset format unaligned
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p1 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO PUBLIC
+	USING (dlevel <= (( SELECT rls_tbl_2.seclv
+   FROM rls_tbl_2
+  WHERE rls_tbl_2.pguser = CURRENT_USER)));
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p2 ON regress_rls_schema.rls_tbl_1
+	AS RESTRICTIVE
+	FOR ALL
+	TO PUBLIC
+	USING (cid <> 44 AND cid < 50);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p3 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO PUBLIC
+	USING (dauthor = CURRENT_USER);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p4 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR SELECT
+	TO PUBLIC
+	USING ((cid % 2) = 0);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p5 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR INSERT
+	TO PUBLIC
+	WITH CHECK ((cid % 2) = 1);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p6 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR UPDATE
+	TO PUBLIC
+	USING ((cid % 2) = 0);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p7 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR DELETE
+	TO PUBLIC
+	USING (cid < 8);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p8 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO regress_rls_dave, regress_rls_alice
+	USING (true);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p9 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO regress_rls_exempt_user
+	WITH CHECK (cid = (( SELECT rls_tbl_2.seclv
+   FROM rls_tbl_2)));
+(1 row)
+-- Clean up objects created for testing pg_get_policy_ddl function.
+DROP POLICY rls_p1 ON rls_tbl_1;
+DROP POLICY rls_p2 ON rls_tbl_1;
+DROP POLICY rls_p3 ON rls_tbl_1;
+DROP POLICY rls_p4 ON rls_tbl_1;
+DROP POLICY rls_p5 ON rls_tbl_1;
+DROP POLICY rls_p6 ON rls_tbl_1;
+DROP POLICY rls_p7 ON rls_tbl_1;
+DROP POLICY rls_p8 ON rls_tbl_1;
+DROP POLICY rls_p9 ON rls_tbl_1;
+--
 -- Clean up objects
 --
 RESET SESSION AUTHORIZATION;
 DROP SCHEMA regress_rls_schema CASCADE;
-NOTICE:  drop cascades to 30 other objects
+NOTICE:  drop cascades to 32 other objects
 DETAIL:  drop cascades to function f_leak(text)
 drop cascades to table uaccount
 drop cascades to table category
@@ -5136,6 +5342,8 @@ drop cascades to table dep1
 drop cascades to table dep2
 drop cascades to table dob_t1
 drop cascades to table dob_t2
+drop cascades to table rls_tbl_1
+drop cascades to table rls_tbl_2
 DROP USER regress_rls_alice;
 DROP USER regress_rls_bob;
 DROP USER regress_rls_carol;
diff --git a/src/test/regress/sql/rowsecurity.sql b/src/test/regress/sql/rowsecurity.sql
index 5d923c5ca3b..22ff813ea24 100644
--- a/src/test/regress/sql/rowsecurity.sql
+++ b/src/test/regress/sql/rowsecurity.sql
@@ -2542,6 +2542,86 @@ reset rls_test.blah;
 drop function rls_f(text);
 drop table rls_t, test_t;
 
+--
+-- Test for pg_get_policy_ddl(tableName, policyName, pretty) function.
+--
+CREATE TABLE rls_tbl_1 (
+    did         int primary key,
+    cid         int,
+    dlevel      int not null,
+    dauthor     name,
+    dtitle      text
+);
+GRANT ALL ON rls_tbl_1 TO public;
+CREATE TABLE rls_tbl_2 (
+    pguser      name primary key,
+    seclv       int
+);
+GRANT SELECT ON rls_tbl_2 TO public;
+
+-- Test PERMISSIVE and RESTRICTIVE
+CREATE POLICY rls_p1 ON rls_tbl_1 AS PERMISSIVE
+    USING (dlevel <= (SELECT seclv FROM rls_tbl_2 WHERE pguser = current_user));
+CREATE POLICY rls_p2 ON rls_tbl_1 AS RESTRICTIVE USING (cid <> 44 AND cid < 50);
+
+-- Test FOR ALL | SELECT | INSERT | UPDATE | DELETE
+CREATE POLICY rls_p3 ON rls_tbl_1 FOR ALL USING (dauthor = current_user);
+CREATE POLICY rls_p4 ON rls_tbl_1 FOR SELECT USING (cid % 2 = 0);
+CREATE POLICY rls_p5 ON rls_tbl_1 FOR INSERT WITH CHECK (cid % 2 = 1);
+CREATE POLICY rls_p6 ON rls_tbl_1 FOR UPDATE USING (cid % 2 = 0);
+CREATE POLICY rls_p7 ON rls_tbl_1 FOR DELETE USING (cid < 8);
+
+-- Test TO { role_name ... }
+CREATE POLICY rls_p8 ON rls_tbl_1 TO regress_rls_dave, regress_rls_alice USING (true);
+CREATE POLICY rls_p9 ON rls_tbl_1 TO regress_rls_exempt_user WITH CHECK (cid = (SELECT seclv FROM rls_tbl_2));
+
+-- Test NULL value
+SELECT pg_get_policy_ddl(NULL, 'rls_p1', false);
+SELECT pg_get_policy_ddl('tab1', NULL, false);
+SELECT pg_get_policy_ddl(NULL, NULL, false);
+
+-- Test -1 as table oid
+ SELECT pg_get_policy_ddl(-1, 'rls_p1', false);
+
+-- Table does not exist
+SELECT pg_get_policy_ddl('tab1', 'rls_p1', false);
+-- Policy does not exist
+SELECT pg_get_policy_ddl('rls_tbl_1', 'pol1', false);
+
+-- Without Pretty formatted
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', false);
+
+-- With Pretty formatted
+\pset format unaligned
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', true);
+
+-- Clean up objects created for testing pg_get_policy_ddl function.
+DROP POLICY rls_p1 ON rls_tbl_1;
+DROP POLICY rls_p2 ON rls_tbl_1;
+DROP POLICY rls_p3 ON rls_tbl_1;
+DROP POLICY rls_p4 ON rls_tbl_1;
+DROP POLICY rls_p5 ON rls_tbl_1;
+DROP POLICY rls_p6 ON rls_tbl_1;
+DROP POLICY rls_p7 ON rls_tbl_1;
+DROP POLICY rls_p8 ON rls_tbl_1;
+DROP POLICY rls_p9 ON rls_tbl_1;
+
 --
 -- Clean up objects
 --
-- 
2.51.0

#18Akshay Joshi
akshay.joshi@enterprisedb.com
In reply to: Akshay Joshi (#17)
1 attachment(s)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

Hi Hackers,

Added a new #define GET_DDL_PRETTY_FLAGS because the existing #define
GET_PRETTY_FLAGS is not suitable for formatting reconstructed DDLs. The
existing #define GET_PRETTY_FLAGS always indents the code, regardless of
whether the flag is set to true or false, which is not the desired behavior
for pg_get_<object>_ddl functions.

Updated the logic of the get_formatted_string function based on Tim
Waizenegger’s suggestion.

I am attaching the new v6 patch, which is ready for review.

On Tue, Oct 28, 2025 at 3:08 PM Akshay Joshi <akshay.joshi@enterprisedb.com>
wrote:

Show quoted text

Thanks, Mark, for your review comments and the updated patch.

I’ve incorporated your changes and prepared a combined v5 patch. The v5
patch is attached for further review.

On Mon, Oct 27, 2025 at 10:15 PM Mark Wong <markwkm@gmail.com> wrote:

Hi everyone,

On Thu, Oct 16, 2025 at 01:47:53PM +0530, Akshay Joshi wrote:

On Wed, Oct 15, 2025 at 10:55 PM Álvaro Herrera <alvherre@kurilemu.de>

wrote:

Hello,

I have reviewed this patch before and provided a number of comments

that

have been addressed by Akshay (so I encourage you to list my name

and

this address in a Reviewed-by trailer line in the commit message).

One

thing I had not noticed is that while this function has a "pretty"

flag,

it doesn't use it to pass anything to pg_get_expr_worker()'s

prettyFlags

argument, and I think it should -- probably just

prettyFlags = GET_PRETTY_FLAGS(pretty);

same as pg_get_querydef() does.

Kinda sorta similar thought, I've noticed some existing functions like
pg_get_constraintdef make the "pretty" flag optional, so I'm wondering
if that scheme is also preferred here.

I've attached a small diff to the original
0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patch to
illustrate the additional work to follow suit, if so desired.

Regards,
Mark
--
Mark Wong <markwkm@gmail.com>
EDB https://enterprisedb.com

Attachments:

v6-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patchapplication/octet-stream; name=v6-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patchDownload
From 0d505dc15d89ba59a845d4057a67096d4e5f4284 Mon Sep 17 00:00:00 2001
From: Akshay Joshi <akshay.joshi@enterprisedb.com>
Date: Fri, 10 Oct 2025 15:46:13 +0530
Subject: [PATCH v6] Add pg_get_policy_ddl() function to reconstruct CREATE
 POLICY statements
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This patch introduces a new system function:
pg_get_policy_ddl(regclass table, name policy_name, bool pretty),
which reconstructs the CREATE POLICY statement for the specified policy.

Usage examples:
SELECT pg_get_policy_ddl('rls_table', 'pol1'); -- non-pretty formatted DDL
SELECT pg_get_policy_ddl('rls_table', 'pol1', true);  -- pretty formatted DDL

Reference: PG-163
Author: Akshay Joshi <akshay.joshi@enterprisedb.com>
Reviewed-by: Álvaro Herrera <alvherre@kurilemu.de>
---
 doc/src/sgml/func/func-info.sgml          |  55 ++++++
 src/backend/commands/policy.c             |  27 +++
 src/backend/utils/adt/ruleutils.c         | 227 ++++++++++++++++++++++
 src/include/catalog/pg_proc.dat           |   6 +
 src/include/commands/policy.h             |   2 +
 src/test/regress/expected/rowsecurity.out | 207 +++++++++++++++++++-
 src/test/regress/sql/rowsecurity.sql      |  80 ++++++++
 7 files changed, 603 insertions(+), 1 deletion(-)

diff --git a/doc/src/sgml/func/func-info.sgml b/doc/src/sgml/func/func-info.sgml
index c393832d94c..2210a49a478 100644
--- a/doc/src/sgml/func/func-info.sgml
+++ b/doc/src/sgml/func/func-info.sgml
@@ -3797,4 +3797,59 @@ acl      | {postgres=arwdDxtm/postgres,foo=r/postgres}
 
   </sect2>
 
+  <sect2 id="functions-get-object-ddl">
+   <title>Get Object DDL Functions</title>
+
+   <para>
+    The functions described in <xref linkend="functions-get-object-ddl-table"/>
+    return the Data Definition Language (DDL) statement for any given database object.
+    This feature is implemented as a set of distinct functions for each object type.
+   </para>
+
+   <table id="functions-get-object-ddl-table">
+    <title>Get Object DDL Functions</title>
+    <tgroup cols="1">
+     <thead>
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        Function
+       </para>
+       <para>
+        Description
+       </para></entry>
+      </row>
+     </thead>
+
+     <tbody>
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        <indexterm>
+         <primary>pg_get_policy_ddl</primary>
+        </indexterm>
+        <function>pg_get_policy_ddl</function>
+        ( <parameter>table</parameter> <type>regclass</type>, <parameter>policy_name</parameter> <type>name</type>, <optional> <parameter>pretty</parameter> <type>boolean</type> </optional> )
+        <returnvalue>text</returnvalue>
+       </para>
+       <para>
+        Reconstructs the <command>CREATE POLICY</command> statement from the
+        system catalogs for a specified table and policy name. The result is a
+        comprehensive <command>CREATE POLICY</command> statement.
+       </para></entry>
+      </row>
+     </tbody>
+    </tgroup>
+   </table>
+
+  <para>
+   Most of the functions that reconstruct (decompile) database objects have an
+   optional <parameter>pretty</parameter> flag, which if
+   <literal>true</literal> causes the result to be
+   <quote>pretty-printed</quote>. Pretty-printing adds tab character and new
+   line character for legibility. Passing <literal>false</literal> for the
+   <parameter>pretty</parameter> parameter yields the same result as omitting
+   the parameter.
+  </para>
+
+  </sect2>
+
   </sect1>
diff --git a/src/backend/commands/policy.c b/src/backend/commands/policy.c
index 83056960fe4..1abe0c44353 100644
--- a/src/backend/commands/policy.c
+++ b/src/backend/commands/policy.c
@@ -128,6 +128,33 @@ parse_policy_command(const char *cmd_name)
 	return polcmd;
 }
 
+/*
+ * get_policy_cmd_name -
+ *	 helper function to convert char representation to full command strings.
+ *
+ * cmd -  Valid values are '*', 'r', 'a', 'w' and 'd'.
+ *
+ */
+char *
+get_policy_cmd_name(char cmd)
+{
+	switch (cmd)
+	{
+		case '*':
+			return "ALL";
+		case ACL_SELECT_CHR:
+			return "SELECT";
+		case ACL_INSERT_CHR:
+			return "INSERT";
+		case ACL_UPDATE_CHR:
+			return "UPDATE";
+		case ACL_DELETE_CHR:
+			return "DELETE";
+		default:
+			elog(ERROR, "unrecognized policy command");
+	}
+}
+
 /*
  * policy_role_list_to_array
  *	 helper function to convert a list of RoleSpecs to an array of
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 79ec136231b..5bf8a1e6467 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -33,12 +33,14 @@
 #include "catalog/pg_opclass.h"
 #include "catalog/pg_operator.h"
 #include "catalog/pg_partitioned_table.h"
+#include "catalog/pg_policy.h"
 #include "catalog/pg_proc.h"
 #include "catalog/pg_statistic_ext.h"
 #include "catalog/pg_trigger.h"
 #include "catalog/pg_type.h"
 #include "commands/defrem.h"
 #include "commands/tablespace.h"
+#include "commands/policy.h"
 #include "common/keywords.h"
 #include "executor/spi.h"
 #include "funcapi.h"
@@ -94,6 +96,10 @@
 	((pretty) ? (PRETTYFLAG_PAREN | PRETTYFLAG_INDENT | PRETTYFLAG_SCHEMA) \
 	 : PRETTYFLAG_INDENT)
 
+#define GET_DDL_PRETTY_FLAGS(pretty) \
+	((pretty) ? (PRETTYFLAG_PAREN | PRETTYFLAG_INDENT | PRETTYFLAG_SCHEMA) \
+	 : 0)
+
 /* Default line length for pretty-print wrapping: 0 means wrap always */
 #define WRAP_COLUMN_DEFAULT		0
 
@@ -546,6 +552,12 @@ static void get_json_table_nested_columns(TableFunc *tf, JsonTablePlan *plan,
 										  deparse_context *context,
 										  bool showimplicit,
 										  bool needcomma);
+static void get_formatted_string(StringInfo buf,
+								 int prettyFlags,
+								 int noOfTabChars,
+								 const char *fmt,...) pg_attribute_printf(4, 5);
+static char *pg_get_policy_ddl_worker(Oid tableID, Name policyName,
+									  int prettyFlags);
 
 #define only_marker(rte)  ((rte)->inh ? "" : "ONLY ")
 
@@ -13738,3 +13750,218 @@ get_range_partbound_string(List *bound_datums)
 
 	return buf->data;
 }
+
+/*
+ * get_formatted_string
+ *
+ * Return a formatted version of the string.
+ *
+ * prettyFlags - Based on prettyFlags the output includes tabs (\t) and
+ *               newlines (\n).
+ * noOfTabChars - indent with specified no of tabs.
+ * fmt - printf-style format string used by appendStringInfoVA.
+ */
+static void
+get_formatted_string(StringInfo buf, int prettyFlags, int noOfTabChars, const char *fmt,...)
+{
+	va_list		args;
+
+	if (prettyFlags & PRETTYFLAG_INDENT)
+	{
+		appendStringInfoChar(buf, '\n');
+		/* Indent with tabs */
+		for (int i = 0; i < noOfTabChars; i++)
+		{
+			appendStringInfoChar(buf, '\t');
+		}
+	}
+	else
+		appendStringInfoChar(buf, ' ');
+
+	va_start(args, fmt);
+	appendStringInfoVA(buf, fmt, args);
+	va_end(args);
+}
+
+/*
+ * pg_get_policy_ddl
+ *
+ * Generate a CREATE POLICY statement for the specified policy.
+ *
+ * tableID - Table ID of the policy.
+ * policyName - Name of the policy for which to generate the DDL.
+ * pretty - If true, format the DDL with indentation and line breaks.
+ */
+Datum
+pg_get_policy_ddl(PG_FUNCTION_ARGS)
+{
+	Oid			tableID = PG_GETARG_OID(0);
+	Name		policyName = PG_GETARG_NAME(1);
+	char	   *res;
+
+	res = pg_get_policy_ddl_worker(tableID, policyName, false);
+
+	if (res == NULL)
+		PG_RETURN_NULL();
+
+	PG_RETURN_TEXT_P(string_to_text(res));
+}
+
+Datum
+pg_get_policy_ddl_ext(PG_FUNCTION_ARGS)
+{
+	Oid			tableID = PG_GETARG_OID(0);
+	Name		policyName = PG_GETARG_NAME(1);
+	bool		pretty = PG_GETARG_BOOL(2);
+	int			prettyFlags;
+	char	   *res;
+
+	prettyFlags = GET_DDL_PRETTY_FLAGS(pretty);
+	res = pg_get_policy_ddl_worker(tableID, policyName, prettyFlags);
+
+	if (res == NULL)
+		PG_RETURN_NULL();
+
+	PG_RETURN_TEXT_P(string_to_text(res));
+}
+
+static char *
+pg_get_policy_ddl_worker(Oid tableID, Name policyName, int prettyFlags)
+{
+	bool		attrIsNull;
+	Datum		valueDatum;
+	HeapTuple	tuplePolicy;
+	Relation	pgPolicyRel;
+	char	   *targetTable;
+	ScanKeyData skey[2];
+	SysScanDesc sscan;
+	Form_pg_policy policyForm;
+	StringInfoData buf;
+
+	/* Validate that the relation exists */
+	if (!OidIsValid(tableID) || get_rel_name(tableID) == NULL)
+		return NULL;
+
+	initStringInfo(&buf);
+
+	targetTable = generate_qualified_relation_name(tableID);
+	/* Find policy to begin scan */
+	pgPolicyRel = table_open(PolicyRelationId, AccessShareLock);
+
+	/* Set key - policy's relation id. */
+	ScanKeyInit(&skey[0],
+				Anum_pg_policy_polrelid,
+				BTEqualStrategyNumber, F_OIDEQ,
+				ObjectIdGetDatum(tableID));
+
+	/* Set key - policy's name. */
+	ScanKeyInit(&skey[1],
+				Anum_pg_policy_polname,
+				BTEqualStrategyNumber, F_NAMEEQ,
+				CStringGetDatum(NameStr(*policyName)));
+
+	sscan = systable_beginscan(pgPolicyRel,
+							   PolicyPolrelidPolnameIndexId, true, NULL, 2,
+							   skey);
+
+	tuplePolicy = systable_getnext(sscan);
+	/* Check that the policy is found, raise an error if not. */
+	if (!HeapTupleIsValid(tuplePolicy))
+		ereport(ERROR,
+				(errcode(ERRCODE_UNDEFINED_OBJECT),
+				 errmsg("policy \"%s\" for table \"%s\" does not exist",
+						NameStr(*policyName),
+						targetTable)));
+
+	policyForm = (Form_pg_policy) GETSTRUCT(tuplePolicy);
+
+	/* Build the CREATE POLICY statement */
+	appendStringInfo(&buf, "CREATE POLICY %s ON %s",
+					 quote_identifier(NameStr(*policyName)),
+					 targetTable);
+
+	/* Check the type is PERMISSIVE or RESTRICTIVE */
+	get_formatted_string(&buf, prettyFlags, 1,
+						 policyForm->polpermissive ? "AS PERMISSIVE" : "AS RESTRICTIVE");
+
+	/* Check command to which the policy applies */
+	get_formatted_string(&buf, prettyFlags, 1, "FOR %s",
+						 get_policy_cmd_name(policyForm->polcmd));
+
+	/* Check if the policy has a TO list */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polroles,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		ArrayType  *policy_roles = DatumGetArrayTypePCopy(valueDatum);
+		int			nitems = ARR_DIMS(policy_roles)[0];
+		Oid		   *roles = (Oid *) ARR_DATA_PTR(policy_roles);
+		StringInfoData role_names;
+
+		initStringInfo(&role_names);
+
+		for (int i = 0; i < nitems; i++)
+		{
+			if (OidIsValid(roles[i]))
+			{
+				char	   *rolename = GetUserNameFromId(roles[i], false);
+
+				if (i > 0)
+					appendStringInfoString(&role_names, ", ");
+				appendStringInfoString(&role_names, rolename);
+			}
+		}
+
+		if (role_names.len > 0)
+			get_formatted_string(&buf, prettyFlags, 1, "TO %s", role_names.data);
+		else
+
+			/*
+			 * When no specific role is provided, generate the TO clause with
+			 * the PUBLIC role.
+			 */
+			get_formatted_string(&buf, prettyFlags, 1, "TO PUBLIC");
+	}
+
+	/* Check if the policy has a USING expr */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polqual,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		text	   *exprtext = DatumGetTextPP(valueDatum);
+		text	   *usingExpression = pg_get_expr_worker(exprtext,
+														 policyForm->polrelid,
+														 prettyFlags);
+
+		get_formatted_string(&buf, prettyFlags, 1, "USING (%s)",
+							 text_to_cstring(usingExpression));
+	}
+
+	/* Check if the policy has a WITH CHECK expr */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polwithcheck,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		text	   *exprtext = DatumGetTextPP(valueDatum);
+		text	   *checkExpression = pg_get_expr_worker(exprtext,
+														 policyForm->polrelid,
+														 prettyFlags);
+
+		get_formatted_string(&buf, prettyFlags, 1, "WITH CHECK (%s)",
+							 text_to_cstring(checkExpression));
+	}
+
+	appendStringInfoChar(&buf, ';');
+
+	/* Clean up. */
+	systable_endscan(sscan);
+	table_close(pgPolicyRel, AccessShareLock);
+
+	return buf.data;
+}
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 9121a382f76..69683fb37f7 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -4021,6 +4021,12 @@
   proname => 'pg_get_function_sqlbody', provolatile => 's',
   prorettype => 'text', proargtypes => 'oid',
   prosrc => 'pg_get_function_sqlbody' },
+{ oid => '8811', descr => 'get CREATE statement for policy',
+  proname => 'pg_get_policy_ddl', prorettype => 'text',
+  proargtypes => 'regclass name', prosrc => 'pg_get_policy_ddl' },
+{ oid => '8812', descr => 'get CREATE statement for policy with pretty option',
+  proname => 'pg_get_policy_ddl', prorettype => 'text',
+  proargtypes => 'regclass name bool', prosrc => 'pg_get_policy_ddl_ext' },
 
 { oid => '1686', descr => 'list of SQL keywords',
   proname => 'pg_get_keywords', procost => '10', prorows => '500',
diff --git a/src/include/commands/policy.h b/src/include/commands/policy.h
index f06aa1df439..40e45b738f4 100644
--- a/src/include/commands/policy.h
+++ b/src/include/commands/policy.h
@@ -35,4 +35,6 @@ extern ObjectAddress rename_policy(RenameStmt *stmt);
 
 extern bool relation_has_policies(Relation rel);
 
+extern char *get_policy_cmd_name(char cmd);
+
 #endif							/* POLICY_H */
diff --git a/src/test/regress/expected/rowsecurity.out b/src/test/regress/expected/rowsecurity.out
index c958ef4d70a..4ebe32711cd 100644
--- a/src/test/regress/expected/rowsecurity.out
+++ b/src/test/regress/expected/rowsecurity.out
@@ -5101,11 +5101,214 @@ reset rls_test.blah;
 drop function rls_f(text);
 drop table rls_t, test_t;
 --
+-- Test for pg_get_policy_ddl(tableName, policyName, pretty) function.
+--
+CREATE TABLE rls_tbl_1 (
+    did         int primary key,
+    cid         int,
+    dlevel      int not null,
+    dauthor     name,
+    dtitle      text
+);
+GRANT ALL ON rls_tbl_1 TO public;
+CREATE TABLE rls_tbl_2 (
+    pguser      name primary key,
+    seclv       int
+);
+GRANT SELECT ON rls_tbl_2 TO public;
+-- Test PERMISSIVE and RESTRICTIVE
+CREATE POLICY rls_p1 ON rls_tbl_1 AS PERMISSIVE
+    USING (dlevel <= (SELECT seclv FROM rls_tbl_2 WHERE pguser = current_user));
+CREATE POLICY rls_p2 ON rls_tbl_1 AS RESTRICTIVE USING (cid <> 44 AND cid < 50);
+-- Test FOR ALL | SELECT | INSERT | UPDATE | DELETE
+CREATE POLICY rls_p3 ON rls_tbl_1 FOR ALL USING (dauthor = current_user);
+CREATE POLICY rls_p4 ON rls_tbl_1 FOR SELECT USING (cid % 2 = 0);
+CREATE POLICY rls_p5 ON rls_tbl_1 FOR INSERT WITH CHECK (cid % 2 = 1);
+CREATE POLICY rls_p6 ON rls_tbl_1 FOR UPDATE USING (cid % 2 = 0);
+CREATE POLICY rls_p7 ON rls_tbl_1 FOR DELETE USING (cid < 8);
+-- Test TO { role_name ... }
+CREATE POLICY rls_p8 ON rls_tbl_1 TO regress_rls_dave, regress_rls_alice USING (true);
+CREATE POLICY rls_p9 ON rls_tbl_1 TO regress_rls_exempt_user WITH CHECK (cid = (SELECT seclv FROM rls_tbl_2));
+-- Test NULL value
+SELECT pg_get_policy_ddl(NULL, 'rls_p1');
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+SELECT pg_get_policy_ddl('tab1', NULL);
+ERROR:  relation "tab1" does not exist
+LINE 1: SELECT pg_get_policy_ddl('tab1', NULL);
+                                 ^
+SELECT pg_get_policy_ddl(NULL, NULL);
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+-- Test -1 as table oid
+ SELECT pg_get_policy_ddl(-1, 'rls_p1');
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+-- Table does not exist
+SELECT pg_get_policy_ddl('tab1', 'rls_p1');
+ERROR:  relation "tab1" does not exist
+LINE 1: SELECT pg_get_policy_ddl('tab1', 'rls_p1');
+                                 ^
+-- Policy does not exist
+SELECT pg_get_policy_ddl('rls_tbl_1', 'pol1');
+ERROR:  policy "pol1" for table "regress_rls_schema.rls_tbl_1" does not exist
+-- Without Pretty formatted
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1');
+                                                                                     pg_get_policy_ddl                                                                                     
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p1 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO PUBLIC USING ((dlevel <= (SELECT rls_tbl_2.seclv FROM rls_tbl_2 WHERE (rls_tbl_2.pguser = CURRENT_USER))));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2');
+                                                      pg_get_policy_ddl                                                      
+-----------------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p2 ON regress_rls_schema.rls_tbl_1 AS RESTRICTIVE FOR ALL TO PUBLIC USING (((cid <> 44) AND (cid < 50)));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3');
+                                                   pg_get_policy_ddl                                                    
+------------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p3 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO PUBLIC USING ((dauthor = CURRENT_USER));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4');
+                                                pg_get_policy_ddl                                                 
+------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p4 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR SELECT TO PUBLIC USING (((cid % 2) = 0));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5');
+                                                   pg_get_policy_ddl                                                   
+-----------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p5 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR INSERT TO PUBLIC WITH CHECK (((cid % 2) = 1));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', false);
+                                                pg_get_policy_ddl                                                 
+------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p6 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR UPDATE TO PUBLIC USING (((cid % 2) = 0));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', false);
+                                             pg_get_policy_ddl                                              
+------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p7 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR DELETE TO PUBLIC USING ((cid < 8));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', false);
+                                                        pg_get_policy_ddl                                                        
+---------------------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p8 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO regress_rls_dave, regress_rls_alice USING (true);
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', false);
+                                                                          pg_get_policy_ddl                                                                          
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p9 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO regress_rls_exempt_user WITH CHECK ((cid = (SELECT rls_tbl_2.seclv FROM rls_tbl_2)));
+(1 row)
+
+-- With Pretty formatted
+\pset format unaligned
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p1 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO PUBLIC
+	USING (dlevel <= (( SELECT rls_tbl_2.seclv
+   FROM rls_tbl_2
+  WHERE rls_tbl_2.pguser = CURRENT_USER)));
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p2 ON regress_rls_schema.rls_tbl_1
+	AS RESTRICTIVE
+	FOR ALL
+	TO PUBLIC
+	USING (cid <> 44 AND cid < 50);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p3 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO PUBLIC
+	USING (dauthor = CURRENT_USER);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p4 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR SELECT
+	TO PUBLIC
+	USING ((cid % 2) = 0);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p5 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR INSERT
+	TO PUBLIC
+	WITH CHECK ((cid % 2) = 1);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p6 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR UPDATE
+	TO PUBLIC
+	USING ((cid % 2) = 0);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p7 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR DELETE
+	TO PUBLIC
+	USING (cid < 8);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p8 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO regress_rls_dave, regress_rls_alice
+	USING (true);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p9 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO regress_rls_exempt_user
+	WITH CHECK (cid = (( SELECT rls_tbl_2.seclv
+   FROM rls_tbl_2)));
+(1 row)
+-- Clean up objects created for testing pg_get_policy_ddl function.
+DROP POLICY rls_p1 ON rls_tbl_1;
+DROP POLICY rls_p2 ON rls_tbl_1;
+DROP POLICY rls_p3 ON rls_tbl_1;
+DROP POLICY rls_p4 ON rls_tbl_1;
+DROP POLICY rls_p5 ON rls_tbl_1;
+DROP POLICY rls_p6 ON rls_tbl_1;
+DROP POLICY rls_p7 ON rls_tbl_1;
+DROP POLICY rls_p8 ON rls_tbl_1;
+DROP POLICY rls_p9 ON rls_tbl_1;
+--
 -- Clean up objects
 --
 RESET SESSION AUTHORIZATION;
 DROP SCHEMA regress_rls_schema CASCADE;
-NOTICE:  drop cascades to 30 other objects
+NOTICE:  drop cascades to 32 other objects
 DETAIL:  drop cascades to function f_leak(text)
 drop cascades to table uaccount
 drop cascades to table category
@@ -5136,6 +5339,8 @@ drop cascades to table dep1
 drop cascades to table dep2
 drop cascades to table dob_t1
 drop cascades to table dob_t2
+drop cascades to table rls_tbl_1
+drop cascades to table rls_tbl_2
 DROP USER regress_rls_alice;
 DROP USER regress_rls_bob;
 DROP USER regress_rls_carol;
diff --git a/src/test/regress/sql/rowsecurity.sql b/src/test/regress/sql/rowsecurity.sql
index 5d923c5ca3b..b90f5309578 100644
--- a/src/test/regress/sql/rowsecurity.sql
+++ b/src/test/regress/sql/rowsecurity.sql
@@ -2542,6 +2542,86 @@ reset rls_test.blah;
 drop function rls_f(text);
 drop table rls_t, test_t;
 
+--
+-- Test for pg_get_policy_ddl(tableName, policyName, pretty) function.
+--
+CREATE TABLE rls_tbl_1 (
+    did         int primary key,
+    cid         int,
+    dlevel      int not null,
+    dauthor     name,
+    dtitle      text
+);
+GRANT ALL ON rls_tbl_1 TO public;
+CREATE TABLE rls_tbl_2 (
+    pguser      name primary key,
+    seclv       int
+);
+GRANT SELECT ON rls_tbl_2 TO public;
+
+-- Test PERMISSIVE and RESTRICTIVE
+CREATE POLICY rls_p1 ON rls_tbl_1 AS PERMISSIVE
+    USING (dlevel <= (SELECT seclv FROM rls_tbl_2 WHERE pguser = current_user));
+CREATE POLICY rls_p2 ON rls_tbl_1 AS RESTRICTIVE USING (cid <> 44 AND cid < 50);
+
+-- Test FOR ALL | SELECT | INSERT | UPDATE | DELETE
+CREATE POLICY rls_p3 ON rls_tbl_1 FOR ALL USING (dauthor = current_user);
+CREATE POLICY rls_p4 ON rls_tbl_1 FOR SELECT USING (cid % 2 = 0);
+CREATE POLICY rls_p5 ON rls_tbl_1 FOR INSERT WITH CHECK (cid % 2 = 1);
+CREATE POLICY rls_p6 ON rls_tbl_1 FOR UPDATE USING (cid % 2 = 0);
+CREATE POLICY rls_p7 ON rls_tbl_1 FOR DELETE USING (cid < 8);
+
+-- Test TO { role_name ... }
+CREATE POLICY rls_p8 ON rls_tbl_1 TO regress_rls_dave, regress_rls_alice USING (true);
+CREATE POLICY rls_p9 ON rls_tbl_1 TO regress_rls_exempt_user WITH CHECK (cid = (SELECT seclv FROM rls_tbl_2));
+
+-- Test NULL value
+SELECT pg_get_policy_ddl(NULL, 'rls_p1');
+SELECT pg_get_policy_ddl('tab1', NULL);
+SELECT pg_get_policy_ddl(NULL, NULL);
+
+-- Test -1 as table oid
+ SELECT pg_get_policy_ddl(-1, 'rls_p1');
+
+-- Table does not exist
+SELECT pg_get_policy_ddl('tab1', 'rls_p1');
+-- Policy does not exist
+SELECT pg_get_policy_ddl('rls_tbl_1', 'pol1');
+
+-- Without Pretty formatted
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1');
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2');
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3');
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4');
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5');
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', false);
+
+-- With Pretty formatted
+\pset format unaligned
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', true);
+
+-- Clean up objects created for testing pg_get_policy_ddl function.
+DROP POLICY rls_p1 ON rls_tbl_1;
+DROP POLICY rls_p2 ON rls_tbl_1;
+DROP POLICY rls_p3 ON rls_tbl_1;
+DROP POLICY rls_p4 ON rls_tbl_1;
+DROP POLICY rls_p5 ON rls_tbl_1;
+DROP POLICY rls_p6 ON rls_tbl_1;
+DROP POLICY rls_p7 ON rls_tbl_1;
+DROP POLICY rls_p8 ON rls_tbl_1;
+DROP POLICY rls_p9 ON rls_tbl_1;
+
 --
 -- Clean up objects
 --
-- 
2.51.0

#19Akshay Joshi
akshay.joshi@enterprisedb.com
In reply to: Akshay Joshi (#18)
1 attachment(s)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

Hi Hackers,

Make the pretty flag a default parameter by adding CREATE OR REPLACE
FUNCTION in system_functions.sql.
Attached is the v7 patch, which is ready for review.

On Mon, Nov 3, 2025 at 5:17 PM Akshay Joshi <akshay.joshi@enterprisedb.com>
wrote:

Show quoted text

Hi Hackers,

Added a new #define GET_DDL_PRETTY_FLAGS because the existing #define
GET_PRETTY_FLAGS is not suitable for formatting reconstructed DDLs. The
existing #define GET_PRETTY_FLAGS always indents the code, regardless of
whether the flag is set to true or false, which is not the desired
behavior for pg_get_<object>_ddl functions.

Updated the logic of the get_formatted_string function based on Tim
Waizenegger’s suggestion.

I am attaching the new v6 patch, which is ready for review.

On Tue, Oct 28, 2025 at 3:08 PM Akshay Joshi <
akshay.joshi@enterprisedb.com> wrote:

Thanks, Mark, for your review comments and the updated patch.

I’ve incorporated your changes and prepared a combined v5 patch. The v5
patch is attached for further review.

On Mon, Oct 27, 2025 at 10:15 PM Mark Wong <markwkm@gmail.com> wrote:

Hi everyone,

On Thu, Oct 16, 2025 at 01:47:53PM +0530, Akshay Joshi wrote:

On Wed, Oct 15, 2025 at 10:55 PM Álvaro Herrera <alvherre@kurilemu.de>

wrote:

Hello,

I have reviewed this patch before and provided a number of

comments that

have been addressed by Akshay (so I encourage you to list my name

and

this address in a Reviewed-by trailer line in the commit

message). One

thing I had not noticed is that while this function has a "pretty"

flag,

it doesn't use it to pass anything to pg_get_expr_worker()'s

prettyFlags

argument, and I think it should -- probably just

prettyFlags = GET_PRETTY_FLAGS(pretty);

same as pg_get_querydef() does.

Kinda sorta similar thought, I've noticed some existing functions like
pg_get_constraintdef make the "pretty" flag optional, so I'm wondering
if that scheme is also preferred here.

I've attached a small diff to the original
0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patch to
illustrate the additional work to follow suit, if so desired.

Regards,
Mark
--
Mark Wong <markwkm@gmail.com>
EDB https://enterprisedb.com

Attachments:

v7-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patchapplication/octet-stream; name=v7-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patchDownload
From 8ba841c91127f9774907586f94f732321b867fb2 Mon Sep 17 00:00:00 2001
From: Akshay Joshi <akshay.joshi@enterprisedb.com>
Date: Fri, 10 Oct 2025 15:46:13 +0530
Subject: [PATCH v7] Add pg_get_policy_ddl() function to reconstruct CREATE
 POLICY statements
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This patch introduces a new system function:
pg_get_policy_ddl(regclass table, name policy_name, bool pretty),
which reconstructs the CREATE POLICY statement for the specified policy.

Usage examples:
SELECT pg_get_policy_ddl('rls_table', 'pol1'); -- non-pretty formatted DDL
SELECT pg_get_policy_ddl('rls_table', 'pol1', true);  -- pretty formatted DDL

Reference: PG-163
Author: Akshay Joshi <akshay.joshi@enterprisedb.com>
Reviewed-by: Álvaro Herrera <alvherre@kurilemu.de>
---
 doc/src/sgml/func/func-info.sgml          |  55 ++++++
 src/backend/catalog/system_functions.sql  |   6 +
 src/backend/commands/policy.c             |  27 +++
 src/backend/utils/adt/ruleutils.c         | 212 ++++++++++++++++++++++
 src/include/catalog/pg_proc.dat           |   3 +
 src/include/commands/policy.h             |   2 +
 src/test/regress/expected/rowsecurity.out | 207 ++++++++++++++++++++-
 src/test/regress/sql/rowsecurity.sql      |  80 ++++++++
 8 files changed, 591 insertions(+), 1 deletion(-)

diff --git a/doc/src/sgml/func/func-info.sgml b/doc/src/sgml/func/func-info.sgml
index d4508114a48..edfd9381be0 100644
--- a/doc/src/sgml/func/func-info.sgml
+++ b/doc/src/sgml/func/func-info.sgml
@@ -3797,4 +3797,59 @@ acl      | {postgres=arwdDxtm/postgres,foo=r/postgres}
 
   </sect2>
 
+  <sect2 id="functions-get-object-ddl">
+   <title>Get Object DDL Functions</title>
+
+   <para>
+    The functions described in <xref linkend="functions-get-object-ddl-table"/>
+    return the Data Definition Language (DDL) statement for any given database object.
+    This feature is implemented as a set of distinct functions for each object type.
+   </para>
+
+   <table id="functions-get-object-ddl-table">
+    <title>Get Object DDL Functions</title>
+    <tgroup cols="1">
+     <thead>
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        Function
+       </para>
+       <para>
+        Description
+       </para></entry>
+      </row>
+     </thead>
+
+     <tbody>
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        <indexterm>
+         <primary>pg_get_policy_ddl</primary>
+        </indexterm>
+        <function>pg_get_policy_ddl</function>
+        ( <parameter>table</parameter> <type>regclass</type>, <parameter>policy_name</parameter> <type>name</type>, <optional> <parameter>pretty</parameter> <type>boolean</type> </optional> )
+        <returnvalue>text</returnvalue>
+       </para>
+       <para>
+        Reconstructs the <command>CREATE POLICY</command> statement from the
+        system catalogs for a specified table and policy name. The result is a
+        comprehensive <command>CREATE POLICY</command> statement.
+       </para></entry>
+      </row>
+     </tbody>
+    </tgroup>
+   </table>
+
+  <para>
+   Most of the functions that reconstruct (decompile) database objects have an
+   optional <parameter>pretty</parameter> flag, which if
+   <literal>true</literal> causes the result to be
+   <quote>pretty-printed</quote>. Pretty-printing adds tab character and new
+   line character for legibility. Passing <literal>false</literal> for the
+   <parameter>pretty</parameter> parameter yields the same result as omitting
+   the parameter.
+  </para>
+
+  </sect2>
+
   </sect1>
diff --git a/src/backend/catalog/system_functions.sql b/src/backend/catalog/system_functions.sql
index 2d946d6d9e9..a5e22374668 100644
--- a/src/backend/catalog/system_functions.sql
+++ b/src/backend/catalog/system_functions.sql
@@ -657,6 +657,12 @@ LANGUAGE INTERNAL
 STRICT VOLATILE PARALLEL UNSAFE
 AS 'pg_replication_origin_session_setup';
 
+CREATE OR REPLACE FUNCTION
+  pg_get_policy_ddl(tableID regclass, policyName name, pretty bool DEFAULT false)
+RETURNS text
+LANGUAGE INTERNAL
+AS 'pg_get_policy_ddl';
+
 --
 -- The default permissions for functions mean that anyone can execute them.
 -- A number of functions shouldn't be executable by just anyone, but rather
diff --git a/src/backend/commands/policy.c b/src/backend/commands/policy.c
index 83056960fe4..1abe0c44353 100644
--- a/src/backend/commands/policy.c
+++ b/src/backend/commands/policy.c
@@ -128,6 +128,33 @@ parse_policy_command(const char *cmd_name)
 	return polcmd;
 }
 
+/*
+ * get_policy_cmd_name -
+ *	 helper function to convert char representation to full command strings.
+ *
+ * cmd -  Valid values are '*', 'r', 'a', 'w' and 'd'.
+ *
+ */
+char *
+get_policy_cmd_name(char cmd)
+{
+	switch (cmd)
+	{
+		case '*':
+			return "ALL";
+		case ACL_SELECT_CHR:
+			return "SELECT";
+		case ACL_INSERT_CHR:
+			return "INSERT";
+		case ACL_UPDATE_CHR:
+			return "UPDATE";
+		case ACL_DELETE_CHR:
+			return "DELETE";
+		default:
+			elog(ERROR, "unrecognized policy command");
+	}
+}
+
 /*
  * policy_role_list_to_array
  *	 helper function to convert a list of RoleSpecs to an array of
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 556ab057e5a..d8e145f9e4c 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -33,12 +33,14 @@
 #include "catalog/pg_opclass.h"
 #include "catalog/pg_operator.h"
 #include "catalog/pg_partitioned_table.h"
+#include "catalog/pg_policy.h"
 #include "catalog/pg_proc.h"
 #include "catalog/pg_statistic_ext.h"
 #include "catalog/pg_trigger.h"
 #include "catalog/pg_type.h"
 #include "commands/defrem.h"
 #include "commands/tablespace.h"
+#include "commands/policy.h"
 #include "common/keywords.h"
 #include "executor/spi.h"
 #include "funcapi.h"
@@ -94,6 +96,10 @@
 	((pretty) ? (PRETTYFLAG_PAREN | PRETTYFLAG_INDENT | PRETTYFLAG_SCHEMA) \
 	 : PRETTYFLAG_INDENT)
 
+#define GET_DDL_PRETTY_FLAGS(pretty) \
+	((pretty) ? (PRETTYFLAG_PAREN | PRETTYFLAG_INDENT | PRETTYFLAG_SCHEMA) \
+	 : 0)
+
 /* Default line length for pretty-print wrapping: 0 means wrap always */
 #define WRAP_COLUMN_DEFAULT		0
 
@@ -546,6 +552,12 @@ static void get_json_table_nested_columns(TableFunc *tf, JsonTablePlan *plan,
 										  deparse_context *context,
 										  bool showimplicit,
 										  bool needcomma);
+static void get_formatted_string(StringInfo buf,
+								 int prettyFlags,
+								 int noOfTabChars,
+								 const char *fmt,...) pg_attribute_printf(4, 5);
+static char *pg_get_policy_ddl_worker(Oid tableID, Name policyName,
+									  int prettyFlags);
 
 #define only_marker(rte)  ((rte)->inh ? "" : "ONLY ")
 
@@ -13743,3 +13755,203 @@ get_range_partbound_string(List *bound_datums)
 
 	return buf.data;
 }
+
+/*
+ * get_formatted_string
+ *
+ * Return a formatted version of the string.
+ *
+ * prettyFlags - Based on prettyFlags the output includes tabs (\t) and
+ *               newlines (\n).
+ * noOfTabChars - indent with specified no of tabs.
+ * fmt - printf-style format string used by appendStringInfoVA.
+ */
+static void
+get_formatted_string(StringInfo buf, int prettyFlags, int noOfTabChars, const char *fmt,...)
+{
+	va_list		args;
+
+	if (prettyFlags & PRETTYFLAG_INDENT)
+	{
+		appendStringInfoChar(buf, '\n');
+		/* Indent with tabs */
+		for (int i = 0; i < noOfTabChars; i++)
+		{
+			appendStringInfoChar(buf, '\t');
+		}
+	}
+	else
+		appendStringInfoChar(buf, ' ');
+
+	va_start(args, fmt);
+	appendStringInfoVA(buf, fmt, args);
+	va_end(args);
+}
+
+/*
+ * pg_get_policy_ddl
+ *
+ * Generate a CREATE POLICY statement for the specified policy.
+ *
+ * tableID - Table ID of the policy.
+ * policyName - Name of the policy for which to generate the DDL.
+ * pretty - If true, format the DDL with indentation and line breaks.
+ */
+Datum
+pg_get_policy_ddl(PG_FUNCTION_ARGS)
+{
+	Oid			tableID = PG_GETARG_OID(0);
+	Name		policyName = PG_GETARG_NAME(1);
+	bool		pretty = PG_GETARG_BOOL(2);
+	int			prettyFlags;
+	char	   *res;
+
+	prettyFlags = GET_DDL_PRETTY_FLAGS(pretty);
+	res = pg_get_policy_ddl_worker(tableID, policyName, prettyFlags);
+
+	if (res == NULL)
+		PG_RETURN_NULL();
+
+	PG_RETURN_TEXT_P(string_to_text(res));
+}
+
+static char *
+pg_get_policy_ddl_worker(Oid tableID, Name policyName, int prettyFlags)
+{
+	bool		attrIsNull;
+	Datum		valueDatum;
+	HeapTuple	tuplePolicy;
+	Relation	pgPolicyRel;
+	char	   *targetTable;
+	ScanKeyData skey[2];
+	SysScanDesc sscan;
+	Form_pg_policy policyForm;
+	StringInfoData buf;
+
+	/* Validate that the relation exists */
+	if (!OidIsValid(tableID) || get_rel_name(tableID) == NULL)
+		return NULL;
+
+	initStringInfo(&buf);
+
+	targetTable = generate_qualified_relation_name(tableID);
+	/* Find policy to begin scan */
+	pgPolicyRel = table_open(PolicyRelationId, AccessShareLock);
+
+	/* Set key - policy's relation id. */
+	ScanKeyInit(&skey[0],
+				Anum_pg_policy_polrelid,
+				BTEqualStrategyNumber, F_OIDEQ,
+				ObjectIdGetDatum(tableID));
+
+	/* Set key - policy's name. */
+	ScanKeyInit(&skey[1],
+				Anum_pg_policy_polname,
+				BTEqualStrategyNumber, F_NAMEEQ,
+				CStringGetDatum(NameStr(*policyName)));
+
+	sscan = systable_beginscan(pgPolicyRel,
+							   PolicyPolrelidPolnameIndexId, true, NULL, 2,
+							   skey);
+
+	tuplePolicy = systable_getnext(sscan);
+	/* Check that the policy is found, raise an error if not. */
+	if (!HeapTupleIsValid(tuplePolicy))
+		ereport(ERROR,
+				(errcode(ERRCODE_UNDEFINED_OBJECT),
+				 errmsg("policy \"%s\" for table \"%s\" does not exist",
+						NameStr(*policyName),
+						targetTable)));
+
+	policyForm = (Form_pg_policy) GETSTRUCT(tuplePolicy);
+
+	/* Build the CREATE POLICY statement */
+	appendStringInfo(&buf, "CREATE POLICY %s ON %s",
+					 quote_identifier(NameStr(*policyName)),
+					 targetTable);
+
+	/* Check the type is PERMISSIVE or RESTRICTIVE */
+	get_formatted_string(&buf, prettyFlags, 1,
+						 policyForm->polpermissive ? "AS PERMISSIVE" : "AS RESTRICTIVE");
+
+	/* Check command to which the policy applies */
+	get_formatted_string(&buf, prettyFlags, 1, "FOR %s",
+						 get_policy_cmd_name(policyForm->polcmd));
+
+	/* Check if the policy has a TO list */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polroles,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		ArrayType  *policy_roles = DatumGetArrayTypePCopy(valueDatum);
+		int			nitems = ARR_DIMS(policy_roles)[0];
+		Oid		   *roles = (Oid *) ARR_DATA_PTR(policy_roles);
+		StringInfoData role_names;
+
+		initStringInfo(&role_names);
+
+		for (int i = 0; i < nitems; i++)
+		{
+			if (OidIsValid(roles[i]))
+			{
+				char	   *rolename = GetUserNameFromId(roles[i], false);
+
+				if (i > 0)
+					appendStringInfoString(&role_names, ", ");
+				appendStringInfoString(&role_names, rolename);
+			}
+		}
+
+		if (role_names.len > 0)
+			get_formatted_string(&buf, prettyFlags, 1, "TO %s", role_names.data);
+		else
+
+			/*
+			 * When no specific role is provided, generate the TO clause with
+			 * the PUBLIC role.
+			 */
+			get_formatted_string(&buf, prettyFlags, 1, "TO PUBLIC");
+	}
+
+	/* Check if the policy has a USING expr */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polqual,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		text	   *exprtext = DatumGetTextPP(valueDatum);
+		text	   *usingExpression = pg_get_expr_worker(exprtext,
+														 policyForm->polrelid,
+														 prettyFlags);
+
+		get_formatted_string(&buf, prettyFlags, 1, "USING (%s)",
+							 text_to_cstring(usingExpression));
+	}
+
+	/* Check if the policy has a WITH CHECK expr */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polwithcheck,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		text	   *exprtext = DatumGetTextPP(valueDatum);
+		text	   *checkExpression = pg_get_expr_worker(exprtext,
+														 policyForm->polrelid,
+														 prettyFlags);
+
+		get_formatted_string(&buf, prettyFlags, 1, "WITH CHECK (%s)",
+							 text_to_cstring(checkExpression));
+	}
+
+	appendStringInfoChar(&buf, ';');
+
+	/* Clean up. */
+	systable_endscan(sscan);
+	table_close(pgPolicyRel, AccessShareLock);
+
+	return buf.data;
+}
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 5cf9e12fcb9..81053729fba 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -4021,6 +4021,9 @@
   proname => 'pg_get_function_sqlbody', provolatile => 's',
   prorettype => 'text', proargtypes => 'oid',
   prosrc => 'pg_get_function_sqlbody' },
+{ oid => '8811', descr => 'get CREATE statement for policy',
+  proname => 'pg_get_policy_ddl', prorettype => 'text',
+  proargtypes => 'regclass name bool', prosrc => 'pg_get_policy_ddl' },
 
 { oid => '1686', descr => 'list of SQL keywords',
   proname => 'pg_get_keywords', procost => '10', prorows => '500',
diff --git a/src/include/commands/policy.h b/src/include/commands/policy.h
index f06aa1df439..40e45b738f4 100644
--- a/src/include/commands/policy.h
+++ b/src/include/commands/policy.h
@@ -35,4 +35,6 @@ extern ObjectAddress rename_policy(RenameStmt *stmt);
 
 extern bool relation_has_policies(Relation rel);
 
+extern char *get_policy_cmd_name(char cmd);
+
 #endif							/* POLICY_H */
diff --git a/src/test/regress/expected/rowsecurity.out b/src/test/regress/expected/rowsecurity.out
index c958ef4d70a..4ebe32711cd 100644
--- a/src/test/regress/expected/rowsecurity.out
+++ b/src/test/regress/expected/rowsecurity.out
@@ -5101,11 +5101,214 @@ reset rls_test.blah;
 drop function rls_f(text);
 drop table rls_t, test_t;
 --
+-- Test for pg_get_policy_ddl(tableName, policyName, pretty) function.
+--
+CREATE TABLE rls_tbl_1 (
+    did         int primary key,
+    cid         int,
+    dlevel      int not null,
+    dauthor     name,
+    dtitle      text
+);
+GRANT ALL ON rls_tbl_1 TO public;
+CREATE TABLE rls_tbl_2 (
+    pguser      name primary key,
+    seclv       int
+);
+GRANT SELECT ON rls_tbl_2 TO public;
+-- Test PERMISSIVE and RESTRICTIVE
+CREATE POLICY rls_p1 ON rls_tbl_1 AS PERMISSIVE
+    USING (dlevel <= (SELECT seclv FROM rls_tbl_2 WHERE pguser = current_user));
+CREATE POLICY rls_p2 ON rls_tbl_1 AS RESTRICTIVE USING (cid <> 44 AND cid < 50);
+-- Test FOR ALL | SELECT | INSERT | UPDATE | DELETE
+CREATE POLICY rls_p3 ON rls_tbl_1 FOR ALL USING (dauthor = current_user);
+CREATE POLICY rls_p4 ON rls_tbl_1 FOR SELECT USING (cid % 2 = 0);
+CREATE POLICY rls_p5 ON rls_tbl_1 FOR INSERT WITH CHECK (cid % 2 = 1);
+CREATE POLICY rls_p6 ON rls_tbl_1 FOR UPDATE USING (cid % 2 = 0);
+CREATE POLICY rls_p7 ON rls_tbl_1 FOR DELETE USING (cid < 8);
+-- Test TO { role_name ... }
+CREATE POLICY rls_p8 ON rls_tbl_1 TO regress_rls_dave, regress_rls_alice USING (true);
+CREATE POLICY rls_p9 ON rls_tbl_1 TO regress_rls_exempt_user WITH CHECK (cid = (SELECT seclv FROM rls_tbl_2));
+-- Test NULL value
+SELECT pg_get_policy_ddl(NULL, 'rls_p1');
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+SELECT pg_get_policy_ddl('tab1', NULL);
+ERROR:  relation "tab1" does not exist
+LINE 1: SELECT pg_get_policy_ddl('tab1', NULL);
+                                 ^
+SELECT pg_get_policy_ddl(NULL, NULL);
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+-- Test -1 as table oid
+ SELECT pg_get_policy_ddl(-1, 'rls_p1');
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+-- Table does not exist
+SELECT pg_get_policy_ddl('tab1', 'rls_p1');
+ERROR:  relation "tab1" does not exist
+LINE 1: SELECT pg_get_policy_ddl('tab1', 'rls_p1');
+                                 ^
+-- Policy does not exist
+SELECT pg_get_policy_ddl('rls_tbl_1', 'pol1');
+ERROR:  policy "pol1" for table "regress_rls_schema.rls_tbl_1" does not exist
+-- Without Pretty formatted
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1');
+                                                                                     pg_get_policy_ddl                                                                                     
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p1 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO PUBLIC USING ((dlevel <= (SELECT rls_tbl_2.seclv FROM rls_tbl_2 WHERE (rls_tbl_2.pguser = CURRENT_USER))));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2');
+                                                      pg_get_policy_ddl                                                      
+-----------------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p2 ON regress_rls_schema.rls_tbl_1 AS RESTRICTIVE FOR ALL TO PUBLIC USING (((cid <> 44) AND (cid < 50)));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3');
+                                                   pg_get_policy_ddl                                                    
+------------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p3 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO PUBLIC USING ((dauthor = CURRENT_USER));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4');
+                                                pg_get_policy_ddl                                                 
+------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p4 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR SELECT TO PUBLIC USING (((cid % 2) = 0));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5');
+                                                   pg_get_policy_ddl                                                   
+-----------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p5 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR INSERT TO PUBLIC WITH CHECK (((cid % 2) = 1));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', false);
+                                                pg_get_policy_ddl                                                 
+------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p6 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR UPDATE TO PUBLIC USING (((cid % 2) = 0));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', false);
+                                             pg_get_policy_ddl                                              
+------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p7 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR DELETE TO PUBLIC USING ((cid < 8));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', false);
+                                                        pg_get_policy_ddl                                                        
+---------------------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p8 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO regress_rls_dave, regress_rls_alice USING (true);
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', false);
+                                                                          pg_get_policy_ddl                                                                          
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p9 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO regress_rls_exempt_user WITH CHECK ((cid = (SELECT rls_tbl_2.seclv FROM rls_tbl_2)));
+(1 row)
+
+-- With Pretty formatted
+\pset format unaligned
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p1 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO PUBLIC
+	USING (dlevel <= (( SELECT rls_tbl_2.seclv
+   FROM rls_tbl_2
+  WHERE rls_tbl_2.pguser = CURRENT_USER)));
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p2 ON regress_rls_schema.rls_tbl_1
+	AS RESTRICTIVE
+	FOR ALL
+	TO PUBLIC
+	USING (cid <> 44 AND cid < 50);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p3 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO PUBLIC
+	USING (dauthor = CURRENT_USER);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p4 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR SELECT
+	TO PUBLIC
+	USING ((cid % 2) = 0);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p5 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR INSERT
+	TO PUBLIC
+	WITH CHECK ((cid % 2) = 1);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p6 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR UPDATE
+	TO PUBLIC
+	USING ((cid % 2) = 0);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p7 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR DELETE
+	TO PUBLIC
+	USING (cid < 8);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p8 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO regress_rls_dave, regress_rls_alice
+	USING (true);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p9 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO regress_rls_exempt_user
+	WITH CHECK (cid = (( SELECT rls_tbl_2.seclv
+   FROM rls_tbl_2)));
+(1 row)
+-- Clean up objects created for testing pg_get_policy_ddl function.
+DROP POLICY rls_p1 ON rls_tbl_1;
+DROP POLICY rls_p2 ON rls_tbl_1;
+DROP POLICY rls_p3 ON rls_tbl_1;
+DROP POLICY rls_p4 ON rls_tbl_1;
+DROP POLICY rls_p5 ON rls_tbl_1;
+DROP POLICY rls_p6 ON rls_tbl_1;
+DROP POLICY rls_p7 ON rls_tbl_1;
+DROP POLICY rls_p8 ON rls_tbl_1;
+DROP POLICY rls_p9 ON rls_tbl_1;
+--
 -- Clean up objects
 --
 RESET SESSION AUTHORIZATION;
 DROP SCHEMA regress_rls_schema CASCADE;
-NOTICE:  drop cascades to 30 other objects
+NOTICE:  drop cascades to 32 other objects
 DETAIL:  drop cascades to function f_leak(text)
 drop cascades to table uaccount
 drop cascades to table category
@@ -5136,6 +5339,8 @@ drop cascades to table dep1
 drop cascades to table dep2
 drop cascades to table dob_t1
 drop cascades to table dob_t2
+drop cascades to table rls_tbl_1
+drop cascades to table rls_tbl_2
 DROP USER regress_rls_alice;
 DROP USER regress_rls_bob;
 DROP USER regress_rls_carol;
diff --git a/src/test/regress/sql/rowsecurity.sql b/src/test/regress/sql/rowsecurity.sql
index 5d923c5ca3b..b90f5309578 100644
--- a/src/test/regress/sql/rowsecurity.sql
+++ b/src/test/regress/sql/rowsecurity.sql
@@ -2542,6 +2542,86 @@ reset rls_test.blah;
 drop function rls_f(text);
 drop table rls_t, test_t;
 
+--
+-- Test for pg_get_policy_ddl(tableName, policyName, pretty) function.
+--
+CREATE TABLE rls_tbl_1 (
+    did         int primary key,
+    cid         int,
+    dlevel      int not null,
+    dauthor     name,
+    dtitle      text
+);
+GRANT ALL ON rls_tbl_1 TO public;
+CREATE TABLE rls_tbl_2 (
+    pguser      name primary key,
+    seclv       int
+);
+GRANT SELECT ON rls_tbl_2 TO public;
+
+-- Test PERMISSIVE and RESTRICTIVE
+CREATE POLICY rls_p1 ON rls_tbl_1 AS PERMISSIVE
+    USING (dlevel <= (SELECT seclv FROM rls_tbl_2 WHERE pguser = current_user));
+CREATE POLICY rls_p2 ON rls_tbl_1 AS RESTRICTIVE USING (cid <> 44 AND cid < 50);
+
+-- Test FOR ALL | SELECT | INSERT | UPDATE | DELETE
+CREATE POLICY rls_p3 ON rls_tbl_1 FOR ALL USING (dauthor = current_user);
+CREATE POLICY rls_p4 ON rls_tbl_1 FOR SELECT USING (cid % 2 = 0);
+CREATE POLICY rls_p5 ON rls_tbl_1 FOR INSERT WITH CHECK (cid % 2 = 1);
+CREATE POLICY rls_p6 ON rls_tbl_1 FOR UPDATE USING (cid % 2 = 0);
+CREATE POLICY rls_p7 ON rls_tbl_1 FOR DELETE USING (cid < 8);
+
+-- Test TO { role_name ... }
+CREATE POLICY rls_p8 ON rls_tbl_1 TO regress_rls_dave, regress_rls_alice USING (true);
+CREATE POLICY rls_p9 ON rls_tbl_1 TO regress_rls_exempt_user WITH CHECK (cid = (SELECT seclv FROM rls_tbl_2));
+
+-- Test NULL value
+SELECT pg_get_policy_ddl(NULL, 'rls_p1');
+SELECT pg_get_policy_ddl('tab1', NULL);
+SELECT pg_get_policy_ddl(NULL, NULL);
+
+-- Test -1 as table oid
+ SELECT pg_get_policy_ddl(-1, 'rls_p1');
+
+-- Table does not exist
+SELECT pg_get_policy_ddl('tab1', 'rls_p1');
+-- Policy does not exist
+SELECT pg_get_policy_ddl('rls_tbl_1', 'pol1');
+
+-- Without Pretty formatted
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1');
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2');
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3');
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4');
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5');
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', false);
+
+-- With Pretty formatted
+\pset format unaligned
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', true);
+
+-- Clean up objects created for testing pg_get_policy_ddl function.
+DROP POLICY rls_p1 ON rls_tbl_1;
+DROP POLICY rls_p2 ON rls_tbl_1;
+DROP POLICY rls_p3 ON rls_tbl_1;
+DROP POLICY rls_p4 ON rls_tbl_1;
+DROP POLICY rls_p5 ON rls_tbl_1;
+DROP POLICY rls_p6 ON rls_tbl_1;
+DROP POLICY rls_p7 ON rls_tbl_1;
+DROP POLICY rls_p8 ON rls_tbl_1;
+DROP POLICY rls_p9 ON rls_tbl_1;
+
 --
 -- Clean up objects
 --
-- 
2.51.0

#20Marcos Pegoraro
marcos@f10.com.br
In reply to: Akshay Joshi (#19)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

Em sex., 7 de nov. de 2025 às 09:21, Akshay Joshi <
akshay.joshi@enterprisedb.com> escreveu:

Attached is the v7 patch, which is ready for review.

<https://enterprisedb.com&gt;

For this functionality to be complete, the

ALTER TABLE ... ENABLE ROW LEVEL SECURITY
statement needs to be added to the command.

Did you think about that ?
Maybe one more parameter ?

regards
Marcos

#21Akshay Joshi
akshay.joshi@enterprisedb.com
In reply to: Marcos Pegoraro (#20)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

On Fri, Nov 7, 2025 at 6:45 PM Marcos Pegoraro <marcos@f10.com.br> wrote:

Em sex., 7 de nov. de 2025 às 09:21, Akshay Joshi <
akshay.joshi@enterprisedb.com> escreveu:

Attached is the v7 patch, which is ready for review.

<https://enterprisedb.com&gt;

For this functionality to be complete, the

ALTER TABLE ... ENABLE ROW LEVEL SECURITY
statement needs to be added to the command.

Did you think about that ?
Maybe one more parameter ?

I don’t think we need that statement. Could you please elaborate on where
exactly it needs to be added?
The purpose of this reconstruction DDL is to generate the DDL for an
already created policy. The command you mentioned is used to enable
row-level security on the table, which is a separate step.

Show quoted text

regards
Marcos

#22Marcos Pegoraro
marcos@f10.com.br
In reply to: Akshay Joshi (#21)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

Em sex., 7 de nov. de 2025 às 11:27, Akshay Joshi <
akshay.joshi@enterprisedb.com> escreveu:

I don’t think we need that statement. Could you please elaborate on where
exactly it needs to be added?

well, these pg_get_..._ddl() functions will be cool for compare/clone
schemas in a multi tenant world.
Instead of dump/sed/restore a schema to create a new one, I could use
something like
select pg_get_table_ddl(oid) from pg_class where nspname = 'customer_050'
and relkind = 'r' union all
select pg_get_constraint_ddl(oid) from pg_constraint inner join pg_class on
... where ... union all
select pg_get_trigger_ddl(oid) from pg_trigger inner join pg_class on
... where ... union all
...

And pg_get_policy_ddl() will be part of these union all selects

Because that would be good to worry about create that only if it does not
exists or drop first too.

regards
Marcos

#23Akshay Joshi
akshay.joshi@enterprisedb.com
In reply to: Marcos Pegoraro (#22)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

Thanks for the clarification. However, I still believe this is out of scope
for the CREATE POLICY DDL. The command ALTER TABLE ... ENABLE ROW LEVEL
SECURITY seems more appropriate as part of the CREATE TABLE reconstruction
rather than CREATE POLICY.

That said, I’m open to adding it if the majority feels it should be
included in this feature.

On Fri, Nov 7, 2025 at 8:18 PM Marcos Pegoraro <marcos@f10.com.br> wrote:

Show quoted text

Em sex., 7 de nov. de 2025 às 11:27, Akshay Joshi <
akshay.joshi@enterprisedb.com> escreveu:

I don’t think we need that statement. Could you please elaborate on where
exactly it needs to be added?

well, these pg_get_..._ddl() functions will be cool for compare/clone
schemas in a multi tenant world.
Instead of dump/sed/restore a schema to create a new one, I could use
something like
select pg_get_table_ddl(oid) from pg_class where nspname = 'customer_050'
and relkind = 'r' union all
select pg_get_constraint_ddl(oid) from pg_constraint inner join pg_class
on ... where ... union all
select pg_get_trigger_ddl(oid) from pg_trigger inner join pg_class on
... where ... union all
...

And pg_get_policy_ddl() will be part of these union all selects

Because that would be good to worry about create that only if it does not
exists or drop first too.

regards
Marcos

#24Akshay Joshi
akshay.joshi@enterprisedb.com
In reply to: Akshay Joshi (#23)
1 attachment(s)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

Attached is the v8 patch for your review, with updated variable names and a
rebase applied.

On Mon, Nov 10, 2025 at 10:46 AM Akshay Joshi <akshay.joshi@enterprisedb.com>
wrote:

Show quoted text

Thanks for the clarification. However, I still believe this is out of
scope for the CREATE POLICY DDL. The command ALTER TABLE ... ENABLE ROW
LEVEL SECURITY seems more appropriate as part of the CREATE TABLE
reconstruction rather than CREATE POLICY.

That said, I’m open to adding it if the majority feels it should be
included in this feature.

On Fri, Nov 7, 2025 at 8:18 PM Marcos Pegoraro <marcos@f10.com.br> wrote:

Em sex., 7 de nov. de 2025 às 11:27, Akshay Joshi <
akshay.joshi@enterprisedb.com> escreveu:

I don’t think we need that statement. Could you please elaborate on
where exactly it needs to be added?

well, these pg_get_..._ddl() functions will be cool for compare/clone
schemas in a multi tenant world.
Instead of dump/sed/restore a schema to create a new one, I could use
something like
select pg_get_table_ddl(oid) from pg_class where nspname = 'customer_050'
and relkind = 'r' union all
select pg_get_constraint_ddl(oid) from pg_constraint inner join pg_class
on ... where ... union all
select pg_get_trigger_ddl(oid) from pg_trigger inner join pg_class on
... where ... union all
...

And pg_get_policy_ddl() will be part of these union all selects

Because that would be good to worry about create that only if it does not
exists or drop first too.

regards
Marcos

Attachments:

v8-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patchapplication/x-patch; name=v8-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patchDownload
From 2421b3821457ddc765da70667fde2aed437b30bf Mon Sep 17 00:00:00 2001
From: Akshay Joshi <akshay.joshi@enterprisedb.com>
Date: Fri, 10 Oct 2025 15:46:13 +0530
Subject: [PATCH v8] Add pg_get_policy_ddl() function to reconstruct CREATE
 POLICY statements
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This patch introduces a new system function:
pg_get_policy_ddl(regclass table, name policy_name, bool pretty),
which reconstructs the CREATE POLICY statement for the specified policy.

Usage examples:
SELECT pg_get_policy_ddl('rls_table', 'pol1'); -- non-pretty formatted DDL
SELECT pg_get_policy_ddl('rls_table', 'pol1', true);  -- pretty formatted DDL
SELECT pg_get_policy_ddl(16564, 'pol1'); -- non-pretty formatted DDL
SELECT pg_get_policy_ddl(16564, 'pol1', true);  -- pretty formatted DDL

Reference: PG-163
Author: Akshay Joshi <akshay.joshi@enterprisedb.com>
Reviewed-by: Álvaro Herrera <alvherre@kurilemu.de>
---
 doc/src/sgml/func/func-info.sgml          |  55 ++++++
 src/backend/catalog/system_functions.sql  |   6 +
 src/backend/commands/policy.c             |  27 +++
 src/backend/utils/adt/ruleutils.c         | 212 ++++++++++++++++++++++
 src/include/catalog/pg_proc.dat           |   3 +
 src/include/commands/policy.h             |   2 +
 src/test/regress/expected/rowsecurity.out | 207 ++++++++++++++++++++-
 src/test/regress/sql/rowsecurity.sql      |  80 ++++++++
 8 files changed, 591 insertions(+), 1 deletion(-)

diff --git a/doc/src/sgml/func/func-info.sgml b/doc/src/sgml/func/func-info.sgml
index d4508114a48..edfd9381be0 100644
--- a/doc/src/sgml/func/func-info.sgml
+++ b/doc/src/sgml/func/func-info.sgml
@@ -3797,4 +3797,59 @@ acl      | {postgres=arwdDxtm/postgres,foo=r/postgres}
 
   </sect2>
 
+  <sect2 id="functions-get-object-ddl">
+   <title>Get Object DDL Functions</title>
+
+   <para>
+    The functions described in <xref linkend="functions-get-object-ddl-table"/>
+    return the Data Definition Language (DDL) statement for any given database object.
+    This feature is implemented as a set of distinct functions for each object type.
+   </para>
+
+   <table id="functions-get-object-ddl-table">
+    <title>Get Object DDL Functions</title>
+    <tgroup cols="1">
+     <thead>
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        Function
+       </para>
+       <para>
+        Description
+       </para></entry>
+      </row>
+     </thead>
+
+     <tbody>
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        <indexterm>
+         <primary>pg_get_policy_ddl</primary>
+        </indexterm>
+        <function>pg_get_policy_ddl</function>
+        ( <parameter>table</parameter> <type>regclass</type>, <parameter>policy_name</parameter> <type>name</type>, <optional> <parameter>pretty</parameter> <type>boolean</type> </optional> )
+        <returnvalue>text</returnvalue>
+       </para>
+       <para>
+        Reconstructs the <command>CREATE POLICY</command> statement from the
+        system catalogs for a specified table and policy name. The result is a
+        comprehensive <command>CREATE POLICY</command> statement.
+       </para></entry>
+      </row>
+     </tbody>
+    </tgroup>
+   </table>
+
+  <para>
+   Most of the functions that reconstruct (decompile) database objects have an
+   optional <parameter>pretty</parameter> flag, which if
+   <literal>true</literal> causes the result to be
+   <quote>pretty-printed</quote>. Pretty-printing adds tab character and new
+   line character for legibility. Passing <literal>false</literal> for the
+   <parameter>pretty</parameter> parameter yields the same result as omitting
+   the parameter.
+  </para>
+
+  </sect2>
+
   </sect1>
diff --git a/src/backend/catalog/system_functions.sql b/src/backend/catalog/system_functions.sql
index 2d946d6d9e9..a5e22374668 100644
--- a/src/backend/catalog/system_functions.sql
+++ b/src/backend/catalog/system_functions.sql
@@ -657,6 +657,12 @@ LANGUAGE INTERNAL
 STRICT VOLATILE PARALLEL UNSAFE
 AS 'pg_replication_origin_session_setup';
 
+CREATE OR REPLACE FUNCTION
+  pg_get_policy_ddl(tableID regclass, policyName name, pretty bool DEFAULT false)
+RETURNS text
+LANGUAGE INTERNAL
+AS 'pg_get_policy_ddl';
+
 --
 -- The default permissions for functions mean that anyone can execute them.
 -- A number of functions shouldn't be executable by just anyone, but rather
diff --git a/src/backend/commands/policy.c b/src/backend/commands/policy.c
index 83056960fe4..1abe0c44353 100644
--- a/src/backend/commands/policy.c
+++ b/src/backend/commands/policy.c
@@ -128,6 +128,33 @@ parse_policy_command(const char *cmd_name)
 	return polcmd;
 }
 
+/*
+ * get_policy_cmd_name -
+ *	 helper function to convert char representation to full command strings.
+ *
+ * cmd -  Valid values are '*', 'r', 'a', 'w' and 'd'.
+ *
+ */
+char *
+get_policy_cmd_name(char cmd)
+{
+	switch (cmd)
+	{
+		case '*':
+			return "ALL";
+		case ACL_SELECT_CHR:
+			return "SELECT";
+		case ACL_INSERT_CHR:
+			return "INSERT";
+		case ACL_UPDATE_CHR:
+			return "UPDATE";
+		case ACL_DELETE_CHR:
+			return "DELETE";
+		default:
+			elog(ERROR, "unrecognized policy command");
+	}
+}
+
 /*
  * policy_role_list_to_array
  *	 helper function to convert a list of RoleSpecs to an array of
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 556ab057e5a..9adadf65743 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -33,12 +33,14 @@
 #include "catalog/pg_opclass.h"
 #include "catalog/pg_operator.h"
 #include "catalog/pg_partitioned_table.h"
+#include "catalog/pg_policy.h"
 #include "catalog/pg_proc.h"
 #include "catalog/pg_statistic_ext.h"
 #include "catalog/pg_trigger.h"
 #include "catalog/pg_type.h"
 #include "commands/defrem.h"
 #include "commands/tablespace.h"
+#include "commands/policy.h"
 #include "common/keywords.h"
 #include "executor/spi.h"
 #include "funcapi.h"
@@ -94,6 +96,10 @@
 	((pretty) ? (PRETTYFLAG_PAREN | PRETTYFLAG_INDENT | PRETTYFLAG_SCHEMA) \
 	 : PRETTYFLAG_INDENT)
 
+#define GET_DDL_PRETTY_FLAGS(pretty) \
+	((pretty) ? (PRETTYFLAG_PAREN | PRETTYFLAG_INDENT | PRETTYFLAG_SCHEMA) \
+	 : 0)
+
 /* Default line length for pretty-print wrapping: 0 means wrap always */
 #define WRAP_COLUMN_DEFAULT		0
 
@@ -546,6 +552,12 @@ static void get_json_table_nested_columns(TableFunc *tf, JsonTablePlan *plan,
 										  deparse_context *context,
 										  bool showimplicit,
 										  bool needcomma);
+static void get_formatted_string(StringInfo buf,
+								 int prettyFlags,
+								 int nTabChars,
+								 const char *fmt,...) pg_attribute_printf(4, 5);
+static char *pg_get_policy_ddl_worker(Oid tableID, Name policyName,
+									  int prettyFlags);
 
 #define only_marker(rte)  ((rte)->inh ? "" : "ONLY ")
 
@@ -13743,3 +13755,203 @@ get_range_partbound_string(List *bound_datums)
 
 	return buf.data;
 }
+
+/*
+ * get_formatted_string
+ *
+ * Return a formatted version of the string.
+ *
+ * prettyFlags - Based on prettyFlags the output includes tabs (\t) and
+ *               newlines (\n).
+ * nTabChars - indent with specified no of tabs.
+ * fmt - printf-style format string used by appendStringInfoVA.
+ */
+static void
+get_formatted_string(StringInfo buf, int prettyFlags, int nTabChars, const char *fmt,...)
+{
+	va_list		args;
+
+	if (prettyFlags & PRETTYFLAG_INDENT)
+	{
+		appendStringInfoChar(buf, '\n');
+		/* Indent with tabs */
+		for (int i = 0; i < nTabChars; i++)
+		{
+			appendStringInfoChar(buf, '\t');
+		}
+	}
+	else
+		appendStringInfoChar(buf, ' ');
+
+	va_start(args, fmt);
+	appendStringInfoVA(buf, fmt, args);
+	va_end(args);
+}
+
+/*
+ * pg_get_policy_ddl
+ *
+ * Generate a CREATE POLICY statement for the specified policy.
+ *
+ * tableID - Table ID of the policy.
+ * policyName - Name of the policy for which to generate the DDL.
+ * pretty - If true, format the DDL with indentation and line breaks.
+ */
+Datum
+pg_get_policy_ddl(PG_FUNCTION_ARGS)
+{
+	Oid			tableID = PG_GETARG_OID(0);
+	Name		policyName = PG_GETARG_NAME(1);
+	bool		pretty = PG_GETARG_BOOL(2);
+	int			prettyFlags;
+	char	   *res;
+
+	prettyFlags = GET_DDL_PRETTY_FLAGS(pretty);
+	res = pg_get_policy_ddl_worker(tableID, policyName, prettyFlags);
+
+	if (res == NULL)
+		PG_RETURN_NULL();
+
+	PG_RETURN_TEXT_P(string_to_text(res));
+}
+
+static char *
+pg_get_policy_ddl_worker(Oid tableID, Name policyName, int prettyFlags)
+{
+	bool		attrIsNull;
+	Datum		valueDatum;
+	HeapTuple	tuplePolicy;
+	Relation	pgPolicyRel;
+	char	   *targetTable;
+	ScanKeyData skey[2];
+	SysScanDesc sscan;
+	Form_pg_policy policyForm;
+	StringInfoData buf;
+
+	/* Validate that the relation exists */
+	if (!OidIsValid(tableID) || get_rel_name(tableID) == NULL)
+		return NULL;
+
+	initStringInfo(&buf);
+
+	targetTable = generate_qualified_relation_name(tableID);
+	/* Find policy to begin scan */
+	pgPolicyRel = table_open(PolicyRelationId, AccessShareLock);
+
+	/* Set key - policy's relation id. */
+	ScanKeyInit(&skey[0],
+				Anum_pg_policy_polrelid,
+				BTEqualStrategyNumber, F_OIDEQ,
+				ObjectIdGetDatum(tableID));
+
+	/* Set key - policy's name. */
+	ScanKeyInit(&skey[1],
+				Anum_pg_policy_polname,
+				BTEqualStrategyNumber, F_NAMEEQ,
+				CStringGetDatum(NameStr(*policyName)));
+
+	sscan = systable_beginscan(pgPolicyRel,
+							   PolicyPolrelidPolnameIndexId, true, NULL, 2,
+							   skey);
+
+	tuplePolicy = systable_getnext(sscan);
+	/* Check that the policy is found, raise an error if not. */
+	if (!HeapTupleIsValid(tuplePolicy))
+		ereport(ERROR,
+				(errcode(ERRCODE_UNDEFINED_OBJECT),
+				 errmsg("policy \"%s\" for table \"%s\" does not exist",
+						NameStr(*policyName),
+						targetTable)));
+
+	policyForm = (Form_pg_policy) GETSTRUCT(tuplePolicy);
+
+	/* Build the CREATE POLICY statement */
+	appendStringInfo(&buf, "CREATE POLICY %s ON %s",
+					 quote_identifier(NameStr(*policyName)),
+					 targetTable);
+
+	/* Check the type is PERMISSIVE or RESTRICTIVE */
+	get_formatted_string(&buf, prettyFlags, 1,
+						 policyForm->polpermissive ? "AS PERMISSIVE" : "AS RESTRICTIVE");
+
+	/* Check command to which the policy applies */
+	get_formatted_string(&buf, prettyFlags, 1, "FOR %s",
+						 get_policy_cmd_name(policyForm->polcmd));
+
+	/* Check if the policy has a TO list */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polroles,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		ArrayType  *policy_roles = DatumGetArrayTypePCopy(valueDatum);
+		int			nitems = ARR_DIMS(policy_roles)[0];
+		Oid		   *roles = (Oid *) ARR_DATA_PTR(policy_roles);
+		StringInfoData role_names;
+
+		initStringInfo(&role_names);
+
+		for (int i = 0; i < nitems; i++)
+		{
+			if (OidIsValid(roles[i]))
+			{
+				char	   *rolename = GetUserNameFromId(roles[i], false);
+
+				if (i > 0)
+					appendStringInfoString(&role_names, ", ");
+				appendStringInfoString(&role_names, rolename);
+			}
+		}
+
+		if (role_names.len > 0)
+			get_formatted_string(&buf, prettyFlags, 1, "TO %s", role_names.data);
+		else
+
+			/*
+			 * When no specific role is provided, generate the TO clause with
+			 * the PUBLIC role.
+			 */
+			get_formatted_string(&buf, prettyFlags, 1, "TO PUBLIC");
+	}
+
+	/* Check if the policy has a USING expr */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polqual,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		text	   *exprtext = DatumGetTextPP(valueDatum);
+		text	   *usingExpression = pg_get_expr_worker(exprtext,
+														 policyForm->polrelid,
+														 prettyFlags);
+
+		get_formatted_string(&buf, prettyFlags, 1, "USING (%s)",
+							 text_to_cstring(usingExpression));
+	}
+
+	/* Check if the policy has a WITH CHECK expr */
+	valueDatum = heap_getattr(tuplePolicy,
+							  Anum_pg_policy_polwithcheck,
+							  RelationGetDescr(pgPolicyRel),
+							  &attrIsNull);
+	if (!attrIsNull)
+	{
+		text	   *exprtext = DatumGetTextPP(valueDatum);
+		text	   *checkExpression = pg_get_expr_worker(exprtext,
+														 policyForm->polrelid,
+														 prettyFlags);
+
+		get_formatted_string(&buf, prettyFlags, 1, "WITH CHECK (%s)",
+							 text_to_cstring(checkExpression));
+	}
+
+	appendStringInfoChar(&buf, ';');
+
+	/* Clean up. */
+	systable_endscan(sscan);
+	table_close(pgPolicyRel, AccessShareLock);
+
+	return buf.data;
+}
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index aaadfd8c748..50fb26f6b1e 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -4021,6 +4021,9 @@
   proname => 'pg_get_function_sqlbody', provolatile => 's',
   prorettype => 'text', proargtypes => 'oid',
   prosrc => 'pg_get_function_sqlbody' },
+{ oid => '8811', descr => 'get CREATE statement for policy',
+  proname => 'pg_get_policy_ddl', prorettype => 'text',
+  proargtypes => 'regclass name bool', prosrc => 'pg_get_policy_ddl' },
 
 { oid => '1686', descr => 'list of SQL keywords',
   proname => 'pg_get_keywords', procost => '10', prorows => '500',
diff --git a/src/include/commands/policy.h b/src/include/commands/policy.h
index f06aa1df439..40e45b738f4 100644
--- a/src/include/commands/policy.h
+++ b/src/include/commands/policy.h
@@ -35,4 +35,6 @@ extern ObjectAddress rename_policy(RenameStmt *stmt);
 
 extern bool relation_has_policies(Relation rel);
 
+extern char *get_policy_cmd_name(char cmd);
+
 #endif							/* POLICY_H */
diff --git a/src/test/regress/expected/rowsecurity.out b/src/test/regress/expected/rowsecurity.out
index c958ef4d70a..4ebe32711cd 100644
--- a/src/test/regress/expected/rowsecurity.out
+++ b/src/test/regress/expected/rowsecurity.out
@@ -5101,11 +5101,214 @@ reset rls_test.blah;
 drop function rls_f(text);
 drop table rls_t, test_t;
 --
+-- Test for pg_get_policy_ddl(tableName, policyName, pretty) function.
+--
+CREATE TABLE rls_tbl_1 (
+    did         int primary key,
+    cid         int,
+    dlevel      int not null,
+    dauthor     name,
+    dtitle      text
+);
+GRANT ALL ON rls_tbl_1 TO public;
+CREATE TABLE rls_tbl_2 (
+    pguser      name primary key,
+    seclv       int
+);
+GRANT SELECT ON rls_tbl_2 TO public;
+-- Test PERMISSIVE and RESTRICTIVE
+CREATE POLICY rls_p1 ON rls_tbl_1 AS PERMISSIVE
+    USING (dlevel <= (SELECT seclv FROM rls_tbl_2 WHERE pguser = current_user));
+CREATE POLICY rls_p2 ON rls_tbl_1 AS RESTRICTIVE USING (cid <> 44 AND cid < 50);
+-- Test FOR ALL | SELECT | INSERT | UPDATE | DELETE
+CREATE POLICY rls_p3 ON rls_tbl_1 FOR ALL USING (dauthor = current_user);
+CREATE POLICY rls_p4 ON rls_tbl_1 FOR SELECT USING (cid % 2 = 0);
+CREATE POLICY rls_p5 ON rls_tbl_1 FOR INSERT WITH CHECK (cid % 2 = 1);
+CREATE POLICY rls_p6 ON rls_tbl_1 FOR UPDATE USING (cid % 2 = 0);
+CREATE POLICY rls_p7 ON rls_tbl_1 FOR DELETE USING (cid < 8);
+-- Test TO { role_name ... }
+CREATE POLICY rls_p8 ON rls_tbl_1 TO regress_rls_dave, regress_rls_alice USING (true);
+CREATE POLICY rls_p9 ON rls_tbl_1 TO regress_rls_exempt_user WITH CHECK (cid = (SELECT seclv FROM rls_tbl_2));
+-- Test NULL value
+SELECT pg_get_policy_ddl(NULL, 'rls_p1');
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+SELECT pg_get_policy_ddl('tab1', NULL);
+ERROR:  relation "tab1" does not exist
+LINE 1: SELECT pg_get_policy_ddl('tab1', NULL);
+                                 ^
+SELECT pg_get_policy_ddl(NULL, NULL);
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+-- Test -1 as table oid
+ SELECT pg_get_policy_ddl(-1, 'rls_p1');
+ pg_get_policy_ddl 
+-------------------
+ 
+(1 row)
+
+-- Table does not exist
+SELECT pg_get_policy_ddl('tab1', 'rls_p1');
+ERROR:  relation "tab1" does not exist
+LINE 1: SELECT pg_get_policy_ddl('tab1', 'rls_p1');
+                                 ^
+-- Policy does not exist
+SELECT pg_get_policy_ddl('rls_tbl_1', 'pol1');
+ERROR:  policy "pol1" for table "regress_rls_schema.rls_tbl_1" does not exist
+-- Without Pretty formatted
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1');
+                                                                                     pg_get_policy_ddl                                                                                     
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p1 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO PUBLIC USING ((dlevel <= (SELECT rls_tbl_2.seclv FROM rls_tbl_2 WHERE (rls_tbl_2.pguser = CURRENT_USER))));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2');
+                                                      pg_get_policy_ddl                                                      
+-----------------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p2 ON regress_rls_schema.rls_tbl_1 AS RESTRICTIVE FOR ALL TO PUBLIC USING (((cid <> 44) AND (cid < 50)));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3');
+                                                   pg_get_policy_ddl                                                    
+------------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p3 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO PUBLIC USING ((dauthor = CURRENT_USER));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4');
+                                                pg_get_policy_ddl                                                 
+------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p4 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR SELECT TO PUBLIC USING (((cid % 2) = 0));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5');
+                                                   pg_get_policy_ddl                                                   
+-----------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p5 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR INSERT TO PUBLIC WITH CHECK (((cid % 2) = 1));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', false);
+                                                pg_get_policy_ddl                                                 
+------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p6 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR UPDATE TO PUBLIC USING (((cid % 2) = 0));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', false);
+                                             pg_get_policy_ddl                                              
+------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p7 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR DELETE TO PUBLIC USING ((cid < 8));
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', false);
+                                                        pg_get_policy_ddl                                                        
+---------------------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p8 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO regress_rls_dave, regress_rls_alice USING (true);
+(1 row)
+
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', false);
+                                                                          pg_get_policy_ddl                                                                          
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ CREATE POLICY rls_p9 ON regress_rls_schema.rls_tbl_1 AS PERMISSIVE FOR ALL TO regress_rls_exempt_user WITH CHECK ((cid = (SELECT rls_tbl_2.seclv FROM rls_tbl_2)));
+(1 row)
+
+-- With Pretty formatted
+\pset format unaligned
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p1 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO PUBLIC
+	USING (dlevel <= (( SELECT rls_tbl_2.seclv
+   FROM rls_tbl_2
+  WHERE rls_tbl_2.pguser = CURRENT_USER)));
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p2 ON regress_rls_schema.rls_tbl_1
+	AS RESTRICTIVE
+	FOR ALL
+	TO PUBLIC
+	USING (cid <> 44 AND cid < 50);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p3 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO PUBLIC
+	USING (dauthor = CURRENT_USER);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p4 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR SELECT
+	TO PUBLIC
+	USING ((cid % 2) = 0);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p5 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR INSERT
+	TO PUBLIC
+	WITH CHECK ((cid % 2) = 1);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p6 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR UPDATE
+	TO PUBLIC
+	USING ((cid % 2) = 0);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p7 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR DELETE
+	TO PUBLIC
+	USING (cid < 8);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p8 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO regress_rls_dave, regress_rls_alice
+	USING (true);
+(1 row)
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', true);
+pg_get_policy_ddl
+CREATE POLICY rls_p9 ON regress_rls_schema.rls_tbl_1
+	AS PERMISSIVE
+	FOR ALL
+	TO regress_rls_exempt_user
+	WITH CHECK (cid = (( SELECT rls_tbl_2.seclv
+   FROM rls_tbl_2)));
+(1 row)
+-- Clean up objects created for testing pg_get_policy_ddl function.
+DROP POLICY rls_p1 ON rls_tbl_1;
+DROP POLICY rls_p2 ON rls_tbl_1;
+DROP POLICY rls_p3 ON rls_tbl_1;
+DROP POLICY rls_p4 ON rls_tbl_1;
+DROP POLICY rls_p5 ON rls_tbl_1;
+DROP POLICY rls_p6 ON rls_tbl_1;
+DROP POLICY rls_p7 ON rls_tbl_1;
+DROP POLICY rls_p8 ON rls_tbl_1;
+DROP POLICY rls_p9 ON rls_tbl_1;
+--
 -- Clean up objects
 --
 RESET SESSION AUTHORIZATION;
 DROP SCHEMA regress_rls_schema CASCADE;
-NOTICE:  drop cascades to 30 other objects
+NOTICE:  drop cascades to 32 other objects
 DETAIL:  drop cascades to function f_leak(text)
 drop cascades to table uaccount
 drop cascades to table category
@@ -5136,6 +5339,8 @@ drop cascades to table dep1
 drop cascades to table dep2
 drop cascades to table dob_t1
 drop cascades to table dob_t2
+drop cascades to table rls_tbl_1
+drop cascades to table rls_tbl_2
 DROP USER regress_rls_alice;
 DROP USER regress_rls_bob;
 DROP USER regress_rls_carol;
diff --git a/src/test/regress/sql/rowsecurity.sql b/src/test/regress/sql/rowsecurity.sql
index 5d923c5ca3b..b90f5309578 100644
--- a/src/test/regress/sql/rowsecurity.sql
+++ b/src/test/regress/sql/rowsecurity.sql
@@ -2542,6 +2542,86 @@ reset rls_test.blah;
 drop function rls_f(text);
 drop table rls_t, test_t;
 
+--
+-- Test for pg_get_policy_ddl(tableName, policyName, pretty) function.
+--
+CREATE TABLE rls_tbl_1 (
+    did         int primary key,
+    cid         int,
+    dlevel      int not null,
+    dauthor     name,
+    dtitle      text
+);
+GRANT ALL ON rls_tbl_1 TO public;
+CREATE TABLE rls_tbl_2 (
+    pguser      name primary key,
+    seclv       int
+);
+GRANT SELECT ON rls_tbl_2 TO public;
+
+-- Test PERMISSIVE and RESTRICTIVE
+CREATE POLICY rls_p1 ON rls_tbl_1 AS PERMISSIVE
+    USING (dlevel <= (SELECT seclv FROM rls_tbl_2 WHERE pguser = current_user));
+CREATE POLICY rls_p2 ON rls_tbl_1 AS RESTRICTIVE USING (cid <> 44 AND cid < 50);
+
+-- Test FOR ALL | SELECT | INSERT | UPDATE | DELETE
+CREATE POLICY rls_p3 ON rls_tbl_1 FOR ALL USING (dauthor = current_user);
+CREATE POLICY rls_p4 ON rls_tbl_1 FOR SELECT USING (cid % 2 = 0);
+CREATE POLICY rls_p5 ON rls_tbl_1 FOR INSERT WITH CHECK (cid % 2 = 1);
+CREATE POLICY rls_p6 ON rls_tbl_1 FOR UPDATE USING (cid % 2 = 0);
+CREATE POLICY rls_p7 ON rls_tbl_1 FOR DELETE USING (cid < 8);
+
+-- Test TO { role_name ... }
+CREATE POLICY rls_p8 ON rls_tbl_1 TO regress_rls_dave, regress_rls_alice USING (true);
+CREATE POLICY rls_p9 ON rls_tbl_1 TO regress_rls_exempt_user WITH CHECK (cid = (SELECT seclv FROM rls_tbl_2));
+
+-- Test NULL value
+SELECT pg_get_policy_ddl(NULL, 'rls_p1');
+SELECT pg_get_policy_ddl('tab1', NULL);
+SELECT pg_get_policy_ddl(NULL, NULL);
+
+-- Test -1 as table oid
+ SELECT pg_get_policy_ddl(-1, 'rls_p1');
+
+-- Table does not exist
+SELECT pg_get_policy_ddl('tab1', 'rls_p1');
+-- Policy does not exist
+SELECT pg_get_policy_ddl('rls_tbl_1', 'pol1');
+
+-- Without Pretty formatted
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1');
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2');
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3');
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4');
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5');
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', false);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', false);
+
+-- With Pretty formatted
+\pset format unaligned
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p1', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p2', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p3', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p4', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p5', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p6', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p7', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true);
+SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p9', true);
+
+-- Clean up objects created for testing pg_get_policy_ddl function.
+DROP POLICY rls_p1 ON rls_tbl_1;
+DROP POLICY rls_p2 ON rls_tbl_1;
+DROP POLICY rls_p3 ON rls_tbl_1;
+DROP POLICY rls_p4 ON rls_tbl_1;
+DROP POLICY rls_p5 ON rls_tbl_1;
+DROP POLICY rls_p6 ON rls_tbl_1;
+DROP POLICY rls_p7 ON rls_tbl_1;
+DROP POLICY rls_p8 ON rls_tbl_1;
+DROP POLICY rls_p9 ON rls_tbl_1;
+
 --
 -- Clean up objects
 --
-- 
2.51.0

#25jian he
jian.universality@gmail.com
In reply to: Akshay Joshi (#24)
Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement

On Thu, Nov 20, 2025 at 5:27 PM Akshay Joshi
<akshay.joshi@enterprisedb.com> wrote:

Attached is the v8 patch for your review, with updated variable names and a rebase applied.

hi.

+     <tbody>
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        <indexterm>
+         <primary>pg_get_policy_ddl</primary>
+        </indexterm>
+        <function>pg_get_policy_ddl</function>
+        ( <parameter>table</parameter> <type>regclass</type>,
<parameter>policy_name</parameter> <type>name</type>, <optional>
<parameter>pretty</parameter> <type>boolean</type> </optional> )
+        <returnvalue>text</returnvalue>
+       </para>
+       <para>
+        Reconstructs the <command>CREATE POLICY</command> statement from the
+        system catalogs for a specified table and policy name. The result is a
+        comprehensive <command>CREATE POLICY</command> statement.
+       </para></entry>
+      </row>
+     </tbody>

( <parameter>table</parameter> <type>regclass</type> ...
this line is way too long, we can split it into several lines, it
won't affect the appearance.

like:
<function>pg_get_policy_ddl</function>
( <parameter>table</parameter> <type>regclass</type>,
<parameter>policy_name</parameter> <type>name</type>,
<optional> <parameter>pretty</parameter>
<type>boolean</type> </optional> )
<returnvalue>text</returnvalue>

Also, the explanation does not mention that the default value of
pretty is false.

index 2d946d6d9e9..a5e22374668 100644
--- a/src/backend/catalog/system_functions.sql
+++ b/src/backend/catalog/system_functions.sql
@@ -657,6 +657,12 @@ LANGUAGE INTERNAL
 STRICT VOLATILE PARALLEL UNSAFE
 AS 'pg_replication_origin_session_setup';
+CREATE OR REPLACE FUNCTION
+  pg_get_policy_ddl(tableID regclass, policyName name, pretty bool
DEFAULT false)
+RETURNS text
+LANGUAGE INTERNAL
+AS 'pg_get_policy_ddl';
+

The partial upper casing above has no effect; it's the same as
``pg_get_policy_ddl(tableid regclass, policyname name, pretty bool
DEFAULT false)``

--
jian
https://www.enterprisedb.com/